使用NAudio和ASIO播放32位音频

时间:2016-08-30 05:56:07

标签: c# audio naudio asio

我尝试通过naudio和ASIO播放32位字节数组。 但我不能让它运行。输出信号失真。 对于naudio和WASAPI,相同的转换方法适用于32位。

示例转换:

var newAmp = (int)Math.Round(amp * (Math.Pow(2, 32) / 2));
var buffer = BitConverter.GetBytes(newAmp);   

通过naudio和ASIO进行播放和录制:

var waveToneClass = new WaveTone(48000, 32, playBuffer, true, 1);
var stream = new BlockAlignReductionStream(waveToneClass);

asio_outin = new AsioOut(nameOfDriver);
asio_outin.ChannelOffset = 0;               
asio_outin.InputChannelOffset = 0;
asio_outin.InitRecordAndPlayback(stream, 1, 48000);

asio_outin.AudioAvailable += ASIO_dataAvailable;
asio_outin.Play();

使用:

private AsioOut asio_outin = null;

使用16位和相同的方法,我得到一个干净的信号。 但是对于非常低的输出电平和高增益,我得到了人工制品,这就是32位的原因。

NAudio v1.7.3.0 / Windows 7 / .Net 4.0

我的失败是什么?

1 个答案:

答案 0 :(得分:0)

使用32位音频时,有许多不同的ASIO“样本类型”可用,因为通常只有24或20位音频放在32位整数的某处。所以我怀疑可能使用了错误的样本类型。或者可能是你实际上正在生成也是32位的IEEE浮点样本(并且是WASAPI喜欢使用的)。