【问题标题】:NAudio converting samples buffer to wave bufferNAudio将样本缓冲区转换为波形缓冲区
【发布时间】:2018-06-29 13:48:25
【问题描述】:

我的目标 - 让 NAudio 实时处理和播放音频数据。该应用程序使用不同的格式:8bit pcm、16bit pcm、24bit pcm。对于播放,我使用 WaveOut 和 BufferedWaveProvider。实时处理单个样本会出现困难。要将原始数据转换为样本,我使用以下代码:

var vaweProviderIn = new BufferedWaveProvider(format);
vaweProviderIn.AddSamples(waveBuffer, 0, waveBuffer.Length);
var sampleProvider = vaweProviderIn.ToSampleProvider();
sampleProvider.Read(sampleBuffer, 0, sampleBufferSize);
//samples processing

问题是如何将samples buffer转换回wave buffer,进行播放?

【问题讨论】:

    标签: c# .net audio naudio sample


    【解决方案1】:

    我编写了自己的代码来解决这个问题。

        private enum BPS {PCM_16Bit = 16, PCM_24Bit = 24};
    
        /// <summary>
        /// Converting the Sample Buffer to the Byte Buffer
        /// </summary>
        /// <param name="samples"></param>
        /// <param name="format"></param>
        /// <returns></returns>
        private byte[] samplesToVawe(float[] samples, WaveFormat format)
        {
            Int32 intSample;
            UInt32 sample4Byte;
            byte[] byteBuffer = new byte[samples.Length * (format.BitsPerSample / 8)];
            uint byteBufIndex = 0;
    
            for (uint i = 0; i < samples.Length; i++)
            {
                //convert 1 sample into 4 byte integer
                intSample = (Int32)(samples[i] * Int32.MaxValue);
                sample4Byte = (UInt32)intSample;
    
                switch((BPS)format.BitsPerSample)
                {
                    case BPS.PCM_24Bit:
                        byteBuffer[byteBufIndex++] = (byte)(sample4Byte >> 8);
                        byteBuffer[byteBufIndex++] = (byte)(sample4Byte >> 16);
                        byteBuffer[byteBufIndex++] = (byte)(sample4Byte >> 24);
                        break;
    
                    case BPS.PCM_16Bit:
                        byteBuffer[byteBufIndex++] = (byte)(sample4Byte >> 16);
                        byteBuffer[byteBufIndex++] = (byte)(sample4Byte >> 24);
                        break;
                }                
            }
    
            return byteBuffer;
        }
    

    【讨论】:

      猜你喜欢
      • 2021-01-14
      • 2022-08-05
      • 1970-01-01
      • 2023-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-26
      • 2013-08-11
      相关资源
      最近更新 更多