// // Applies the Phonon 3D effect to dry audio. // void OnAudioFilterRead(float[] data, int channels) { if (effect == IntPtr.Zero || data == null) { return; } inputBuffer.interleavedBuffer = data; outputBuffer.interleavedBuffer = data; Phonon3D.iplApplyBinauralEffect(effect, inputBuffer, relativeDirection, HRTFInterpolation.NEAREST, outputBuffer); }
// // Initializes the source. // void Awake() { // If no AudioSource is attached to this GameObject, // disable binaural filtering. if (GetComponent <AudioSource>() == null) { Debug.LogError("No AudioSource attached to Phonon 3D Source. Phonon 3D effects disabled for GameObject: " + gameObject.name + "."); return; } // If the speaker configuration does not have 2 channels, // disable binaural filtering. if (AudioSettings.speakerMode != AudioSpeakerMode.Stereo) { Debug.LogError("Phonon 3D requires stereo output. Use Edit > Project Settings > Audio > Default Speaker Mode to fix this."); return; } GlobalContext globalContext; globalContext.logCallback = IntPtr.Zero; globalContext.allocateCallback = IntPtr.Zero; globalContext.freeCallback = IntPtr.Zero; int numBuffers, frameSize; AudioSettings.GetDSPBufferSize(out frameSize, out numBuffers); DSPParams dspParams; dspParams.samplingRate = AudioSettings.outputSampleRate; dspParams.frameSize = frameSize; if (Phonon3D.iplCreate3DContext(globalContext, dspParams, null, ref context) != Error.NONE) { Debug.Log("Unable to create Phonon 3D context for object: " + gameObject.name + ". Please check the log file for details."); return; } inputFormat.channelLayoutType = ChannelLayoutType.SPEAKERS; inputFormat.channelLayout = ChannelLayout.STEREO; inputFormat.numSpeakers = 2; inputFormat.speakerDirections = null; inputFormat.ambisonicsOrder = -1; inputFormat.ambisonicsOrdering = AmbisonicsOrdering.ACN; inputFormat.ambisonicsNormalization = AmbisonicsNormalization.N3D; inputFormat.channelOrder = ChannelOrder.INTERLEAVED; outputFormat.channelLayoutType = ChannelLayoutType.SPEAKERS; outputFormat.channelLayout = ChannelLayout.STEREO; outputFormat.numSpeakers = 2; outputFormat.speakerDirections = null; outputFormat.ambisonicsOrder = -1; outputFormat.ambisonicsOrdering = AmbisonicsOrdering.ACN; outputFormat.ambisonicsNormalization = AmbisonicsNormalization.N3D; outputFormat.channelOrder = ChannelOrder.INTERLEAVED; if (Phonon3D.iplCreateBinauralEffect(context, inputFormat, outputFormat, ref effect) != Error.NONE) { Debug.Log("Unable to create Phonon 3D effect for object: " + gameObject.name + ". Please check the log file for details."); return; } inputBuffer.numSamples = frameSize; inputBuffer.audioFormat = inputFormat; inputBuffer.deInterleavedBuffer = IntPtr.Zero; outputBuffer.numSamples = frameSize; outputBuffer.audioFormat = outputFormat; outputBuffer.deInterleavedBuffer = IntPtr.Zero; listener = FindObjectOfType <AudioListener>(); StartCoroutine(EndOfFrameUpdate()); }
// // Destroys the source. // void OnDestroy() { Phonon3D.iplDestroyBinauralEffect(ref effect); Phonon3D.iplDestroy3DContext(ref context); }