如何在c#中只在耳机的左声道和耳机的右声道播放声音?
Posted
技术标签:
【中文标题】如何在c#中只在耳机的左声道和耳机的右声道播放声音?【英文标题】:How to play sound only on the left channel of the headphone and only on the right channel of the headphone in c#? 【发布时间】:2014-02-20 06:20:04 【问题描述】:我要求只在耳机的左声道播放声音(.wav 文件),而另一个文件只在耳机的右声道播放。 我是c#新手,请帮我解决这个问题。
【问题讨论】:
【参考方案1】:我认为单独的 WPF 无法做到这一点,但您可能想查看NAudio。
【讨论】:
var input2 = new Mp3FileReader(@"C:\Users\Public\Music\Sample Music\Kalimba.mp3"); var input1 = new Mp3FileReader(@"C:\Users\Public\Music\Sample Music\Maid with the Flaxen Hair.mp3"); MultiplexingWaveProvider waveProvider = new MultiplexingWaveProvider(new IWaveProvider[] input1, input2 , 2);waveProvider.ConnectInputToOutput(1, 1);WaveOut wave = new WaveOut(); wave.Init(waveProvider); wave.Play();【参考方案2】: var input2 = new Mp3FileReader(@"C:\Users\Public\Music\Sample Music\Kalimba.mp3");
var input1 = new Mp3FileReader(@"C:\Users\Public\Music\Sample Music\Maid with the Flaxen Hair.mp3");
MultiplexingWaveProvider waveProvider = new MultiplexingWaveProvider(new IWaveProvider[] input1, input2 , 2);
waveProvider.ConnectInputToOutput(1, 1);
WaveOut wave = new WaveOut();
wave.Init(waveProvider);
wave.Play();
我刚刚在上面的代码中添加了以下几行,它适用于 2 个通道
waveProvider.ConnectInputToOutput(1, 0);
waveProvider.ConnectInputToOutput(3, 1);
并删除
waveProvider.ConnectInputToOutput(1, 1);
【讨论】:
【参考方案3】:代码项目中的这个article 展示了一种可视化音频的方法。 如果您可以主动可视化音频,您将了解您的常见立体声波文件包含两个通道(一个左通道和一个右通道)。使用有关如何对其进行可视化的信息,您可以轻松地调整流以破坏左通道(例如,将零放在左流/右流中)。因此,当您之后以常规方式播放它时,它只会在左耳或右耳中播放音乐。
当您有一个具有两个相等通道的立体声文件时,以上是简单的部分。 还有一种情况是您的立体声文件具有不同的通道(例如,左耳上的吉他和右耳上的鼓。)在这种情况下,您必须将两个通道合并到一个通道,查找重复信息并最终销毁另一个您不想使用的频道。)
第三种可能性是您的音频文件是单声道的,因此只有一个声道。通常,您的计算机会自动将通道从单声道文件复制到立体声文件。所以它在双耳/扬声器上播放。因此,我们在这里永远不会认为文件是单声道的。但是,在编程中,如果您想让它只在一只耳朵/频道上播放。您必须手动将其转换为立体声文件(通过添加空白通道)。然后再一次,您只会在一只耳朵/扬声器上听到声音。
希望这会有所帮助。
【讨论】:
以上是关于如何在c#中只在耳机的左声道和耳机的右声道播放声音?的主要内容,如果未能解决你的问题,请参考以下文章