使用NAudio和ASIO播放32位音频

本文关键字:32位 音频 播放 ASIO NAudio 使用 | 更新日期: 2023-09-27 18:04:34

我尝试通过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

我的失败是什么?

使用NAudio和ASIO播放32位音频

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