using UnityEngine; using System.Collections; using System; using System.Runtime.InteropServices; using FMOD; using FMODUnity; public class clip_to_sound : MonoSingleton { public AudioClip audioclip; Channel channel; private ChannelGroup channel_Group; public void Start() { float[] samples = new float[audioclip.samples * audioclip.channels]; audioclip.GetData(samples, 0); uint lenbytes = (uint)(audioclip.samples * audioclip.channels * sizeof(float)); CREATESOUNDEXINFO soundinfo = new CREATESOUNDEXINFO(); soundinfo.cbsize = Marshal.SizeOf(typeof(CREATESOUNDEXINFO)); soundinfo.length = lenbytes; soundinfo.format = SOUND_FORMAT.PCMFLOAT; soundinfo.defaultfrequency = audioclip.frequency; soundinfo.numchannels = audioclip.channels; RESULT result; Sound sound; result = RuntimeManager.CoreSystem.createSound("abc", MODE.OPENUSER, ref soundinfo, out sound); IntPtr ptr1, ptr2; uint len1, len2; result = sound.@lock(0, lenbytes, out ptr1, out ptr2, out len1, out len2); Marshal.Copy(samples, 0, ptr1, (int)(len1 / sizeof(float))); if (len2 > 0) { Marshal.Copy(samples, (int)(len1 / sizeof(float)), ptr2, (int)(len2 / sizeof(float))); } result = sound.unlock(ptr1, ptr2, len1, len2); result = sound.setMode(MODE.LOOP_NORMAL); result = RuntimeManager.CoreSystem.playSound(sound, channel_Group, false, out channel); channel.setPaused(true); UnityEngine.Debug.LogError("RESULT => " + result); } public FMOD.Sound ConvertAudioClip(AudioClip clip) { RESULT result1; Factory.System_Create(out FMOD.System fmodSystem); result1 = fmodSystem.init(4, INITFLAGS.NORMAL, System.IntPtr.Zero); UnityEngine.Debug.LogError("RESULT => " + result1); float[] samples = new float[clip.samples * clip.channels]; clip.GetData(samples, 0); uint lenbytes = (uint)(clip.samples * clip.channels * sizeof(float)); FMOD.CREATESOUNDEXINFO soundinfo = new FMOD.CREATESOUNDEXINFO(); soundinfo.length = lenbytes; soundinfo.format = FMOD.SOUND_FORMAT.PCMFLOAT; soundinfo.defaultfrequency = clip.frequency; soundinfo.numchannels = clip.channels; soundinfo.cbsize = Marshal.SizeOf(typeof(CREATESOUNDEXINFO)); FMOD.RESULT result; FMOD.Sound sound = new FMOD.Sound(); result = fmodSystem.createSound(soundinfo.fileuserread_internal , FMOD.MODE.OPENUSER, ref soundinfo, out sound); System.IntPtr ptr1 = System.IntPtr.Zero, ptr2 = System.IntPtr.Zero; uint len1 = (uint)0, len2 = (uint)0; result = sound.@lock(0, lenbytes, out ptr1, out ptr2, out len1, out len2); Marshal.Copy(samples, 0, ptr1, (int)(len1 / sizeof(float))); if (len2 > 0) { Marshal.Copy(samples, (int)(len1 / sizeof(float)), ptr2, (int)(len2 / sizeof(float))); } result = sound.unlock(ptr1, ptr2, len1, len2); result = sound.setMode(FMOD.MODE.LOOP_NORMAL); result = fmodSystem.playSound(sound, channel_Group, false, out channel); return sound; } }