0

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

我的失败是什么?

4

1 回答 1

0

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

于 2016-08-31T20:12:46.407 回答