AcmNotPossible 调用 acmStreamOpen,naudio

use*_*505 5 c# wav naudio

我正在尝试转换

PCM S16 LE (araw)
Mono, Sample rate 22050, Bit pr. sample 16 
Run Code Online (Sandbox Code Playgroud)

PCM mulaw (PCM MU-LAW)
Mono, Sample rate 8000hz, Bit pr. sample is 8. 
Run Code Online (Sandbox Code Playgroud)

WaveFormat.CreateMuLawFormat(8000,1)或者甚至是更通用的WaveFormat.CreateCustomFormat,我指定WaveFormatEncoding与源流相同的内容会抛出相同的异常。

AcmNotPossible calling acmStreamOpen
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么吗?

任何线索将不胜感激。

Mar*_*ath 3

ACM mu-law 编码器期望其输入为 16 位。如果您使用 mu 或 a-law,采样率也可能很低。以下两行代码将创建 PCM 16 位的零长度流,并将其传递到 WaveFormatConversionStream 以将其转换为 a-law。它不应该抛出“无法转换”错误,除非由于某种原因您的计算机上没有安装 G.711 编码器。

var s = new RawSourceWaveStream(new MemoryStream(), new WaveFormat(8000,16,1));
var c = new WaveFormatConversionStream(WaveFormat.CreateALawFormat(8000,1), s);
Run Code Online (Sandbox Code Playgroud)