示例#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);
    }
示例#2
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);
    }