Пример #1
0
    //
    // 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);
    }
Пример #2
0
    //
    // 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());
    }
Пример #3
0
 //
 // Destroys the source.
 //
 void OnDestroy()
 {
     Phonon3D.iplDestroyBinauralEffect(ref effect);
     Phonon3D.iplDestroy3DContext(ref context);
 }