如何在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#中只在耳机的左声道和耳机的右声道播放声音?的主要内容,如果未能解决你的问题,请参考以下文章

四条线的耳机怎么接

ios 内置麦克风录音只有一个声道声音

ios开发之--AVAudioPlayer制作了一款播放器,耳机有声音,扬声器没声音

AVAudioEngine 播放多声道音频

如何使用Naudio分别控制耳机左右声道的音量

如何在右侧耳机播放音频,在左侧播放音乐?