Ejemplo n.º 1
0
        private void OnAudioDataAvailable_NativeCallbackThread(MLAudio.Buffer buffer)
        {
            lock (lockObject)
            {
                if (queue == null)
                {
                    lastBuferFormat           = buffer.Format;
                    recreateAudioClipOrSource = true;

                    queue = new CircularBuffer <float>(GetDesiredBufferSizeForAudioFormat(lastBuferFormat));
                }

                if (queue.Count > 0)
                {
                    if (!buffer.Format.Equals(lastBuferFormat))
                    {
                        Debug.Log($"Audio buffer format changed. Need to recreate audio clip.");
                        Debug.Log($"Old Format : {lastBuferFormat}.");
                        Debug.Log($"New Format : {buffer.Format}.");

                        lastBuferFormat           = buffer.Format;
                        recreateAudioClipOrSource = true;
                        isReadyToSubmitAudio      = false;

                        queue.Clear();
                        queue.Resize(GetDesiredBufferSizeForAudioFormat(buffer.Format));
                    }
                }

                queue.Enqueue(buffer.Samples);
            }
        }
Ejemplo n.º 2
0
 private uint GetDesiredBufferSizeForAudioFormat(MLAudio.BufferFormat format)
 {
     // 2 second cache
     // TODO : make configurable with AudioCacheSize?
     return((uint)(2 * format.SamplesPerSecond * format.ChannelCount));
 }