如何只在耳机的左声道播放声音,而只在c#的耳机右声道播放声音?

时间:2014-02-20 06:20:04

标签: c# wpf audio

我要求仅在耳机的左声道播放声音(.wav文件),而另一个文件只在耳机的右声道播放。 我是c#的新手,请帮我解决这个问题。

3 个答案:

答案 0 :(得分:1)

我认为仅WPF不能做到这一点,但你可能想看看NAudio

答案 1 :(得分:0)

代码项目中的article显示了一种可视化音频的方法。 如果您可以主动显示音频,您将了解您的常见立体声波文件包含两个通道(左声道和右声道)。有了如何将其可视化的信息,您可以轻松地调整流以摧毁左声道(E.G.在左流/右流中放置零)。因此,当你以常规的方式播放它之后,它只能在左耳或右耳播放音乐。

当你有一个有两个相同通道的立体声文件时,上面是很容易的部分。 还有一种情况,你的立体声文件有不同的通道(左耳上的吉他是右耳上的一个鼓。)在这种情况下,你必须将两个通道合并到一个通道,找到重复的信息,最后摧毁另一个您不想使用的频道。)

第三种可能性是您的音频文件是单声道的,因此只有一个频道。通常,您的计算机会自动将通道从单声道文件复制到立体声文件。因此它可以在双耳/扬声器上播放。因此,我们永远不会在这里文件是单声道。但是在编程中如果你想让它只在一个耳/通道上播放。您必须手动将其转换为立体声文件(通过添加空白通道)。然后你只会在一只耳朵/扬声器上发出声音。

希望这有帮助。

答案 2 :(得分:0)

 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);