Example #1
0
    public static AudioClip CreateAudioClip(string name, PCMAudioBuffer audioBuffer)
    {
        var sampleData = audioBuffer.ToFloatArray();

        var audioClip = AudioClip.Create(name, sampleData.Length, audioBuffer.channelCount, audioBuffer.samplingRate, false);

        audioClip.SetData(sampleData, 0);

        return(audioClip);
    }
Example #2
0
    /// <summary>
    /// Create a Unity audio clip for an audio stream.
    /// </summary>
    private static AudioClip CreateStreamingAudioClip(string name, MP3StreamReader audioStream)
    {
        PCMAudioBuffer streamBuffer = new PCMAudioBuffer(audioStream.channelCount, audioStream.bitDepth, audioStream.samplingRate, 8192);
        int            bufferAudioClipSampleFrameCount = audioStream.samplingRate;

        return(AudioClip.Create(name, bufferAudioClipSampleFrameCount, audioStream.channelCount, audioStream.samplingRate, true, delegate(float[] samples)
        {
            int samplesReturned = FillUnityStreamBuffer(samples, streamBuffer, audioStream);

            if (audioStream.isOpen && audioStream.isDoneStreaming)
            {
                audioStream.Close();
            }
        }));
    }
Example #3
0
    /// <summary>
    /// Streams audio into a floating point sample buffer.
    /// </summary>
    /// <param name="unityBuffer"></param>
    /// <param name="intermediateBuffer">A PCM sample buffer to act as an intermediary between the raw audio stream and Unity.</param>
    /// <param name="audioStream"></param>
    /// <returns>Returns the number of samples that were read from the stream.</returns>
    public static int FillUnityStreamBuffer(float[] unityBuffer, PCMAudioBuffer intermediateBuffer, MP3StreamReader audioStream)
    {
        if (audioStream.isDoneStreaming)
        {
            // Fill the Unity sample buffer with zeros.
            Array.Clear(unityBuffer, 0, unityBuffer.Length);

            return(0);
        }

        int totalSampleFramesToRead = unityBuffer.Length / audioStream.channelCount;
        int sampleFramesRead        = 0;

        while (sampleFramesRead < totalSampleFramesToRead)
        {
            // Read some sample frames.
            int sampleFramesLeftToRead = totalSampleFramesToRead - sampleFramesRead;
            int sampleFramesReturned   = audioStream.ReadSampleFrames(intermediateBuffer.data, 0, Math.Min(sampleFramesLeftToRead, intermediateBuffer.sampleFrameCount));

            if (sampleFramesReturned > 0)
            {
                // Convert the read samples to floats copy them to the output buffer.
                intermediateBuffer.ToFloatArray(unityBuffer, sampleFramesRead, sampleFramesReturned);

                sampleFramesRead += sampleFramesReturned;
            }
            else
            {
                // Fill the rest of the Unity sample buffer with zeros.
                int samplesRead = sampleFramesRead * audioStream.channelCount;
                Array.Clear(unityBuffer, samplesRead, unityBuffer.Length - samplesRead);

                break;
            }
        }

        return(sampleFramesRead * audioStream.channelCount);
    }
Example #4
0
    public static GameObject Play2DAudioClip(PCMAudioBuffer audioBuffer)
    {
        var audioClip = CreateAudioClip("tmp2DAudioClip", audioBuffer);

        return(Play2DAudioClip(audioClip));
    }
Example #5
0
 void Start()
 {
     streamBuffer    = new PCMAudioBuffer(audioStream.channelCount, audioStream.bitDepth, audioStream.samplingRate, 8192);
     UnitySampleRate = AudioSettings.outputSampleRate;
 }