c# - 如何使用 naudio 将立体声 pcm 样本转换为单声道样本

标签 c# naudio

如何使用 naudio 将立体声 pcm 样本转换为单声道样本?

或将立体声 mp3 文件转换为单声道原始样本!

我之前尝试过:

for (int u = 0; u < output.Length; u+=4)
            {
                byte[] Lbuffer = new byte[2];
                byte[] Rbuffer = new byte[2];
                Lbuffer[0] = output[u + 0];
                Lbuffer[1] = output[u + 1];
                Rbuffer[0] = output[u + 2];
                Rbuffer[1] = output[u + 3];

                Int16 leftSample = BitConverter.ToInt16(Lbuffer, 0);
                Int16 rightSample = BitConverter.ToInt16(Rbuffer, 0);

                Int16 mixedMono = (Int16)(0.5f * (float)leftSample + (float)rightSample);
                Byte[] mixedMonoBytes = BitConverter.GetBytes(mixedMono);

                mono[counter] = mixedMonoBytes[0];
                mono[counter+1] = mixedMonoBytes[1];


                //mono[counter] = Convert.ToByte((Convert.ToInt16(buffer[0]) + Convert.ToInt16(buffer[2]))/2);
                //mono[counter+1] = Convert.ToByte((Convert.ToInt16(buffer[0]) + Convert.ToInt16(buffer[2]))/2);
                counter += 2;
            }

但目前还不起作用!结果有噪音! 输出是一个包含原始样本的数组!

最佳答案

正如 @daniel-s 所指出的,要将 PCM 样本从立体声(2 个 channel )转换为单声道(1 个 channel ),您可以简单地取两个 channel 的平均值:对于每个样本,从左 channel 获取值,添加右 channel 的值,然后除以 2。使用 saturation arithmetic以避免溢出。

要将 MP3 文件转换为原始 (PCM) 样本,您需要通过文件解析器和 MP3 比特流解码器运行 MP3 文件。有许多库和应用程序可以做到这一点;例如,参见FFmpeg .

[编辑]我忘了提,更重要的是,NAudio 支持通过 ACM 或 DMO 编解码器解码 MP3 文件;请参阅NAudio - MP3例如。

关于c# - 如何使用 naudio 将立体声 pcm 样本转换为单声道样本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16285008/

相关文章:

c# - NAudio获得左右扬声器水平吗?

c# - WPF - 隐藏 ItemsControl -> UniformGrid 中的项目基于数据绑定(bind)不占用 UI 空间

c# - 如何序列化一切

c# - 将 IeeeFloat 缓冲区中的音频数据转换为缓冲区中的 PCM

c# - 听WaveOutDevice

c# - 使用 NAudio 在 C# 中播放 ohLibSpotify pcm 数据流

c# - 使用扩展 ASCII 在 WinForms RichTextBox 控件中创建树

c# - 如何使用VS2012在对象被释放时进行调试?

c# - 在 C# 中,给定当前和先前状态计算 "trend"的最简单方法是什么?

c# - 在 c# 中线程函数不起作用