我正在尝试转换
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)
我在这里错过了什么吗?
任何线索将不胜感激。
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)