2012-11-29 69 views
2

我尝试转换AcmNotPossible调用acmStreamOpen,n音讯

PCM S16 LE (araw) 
Mono, Sample rate 22050, Bit pr. sample 16 

PCM mulaw (PCM MU-LAW) 
Mono, Sample rate 8000hz, Bit pr. sample is 8. 

WaveFormat.CreateMuLawFormat(8000,1)甚至在那里我已经指定了相同WaveFormatEncoding的源流是扔一个更通用WaveFormat.CreateCustomFormat同样的例外。

AcmNotPossible calling acmStreamOpen 

我在这里错过了什么吗?

任何线索将不胜感激。

+0

它确实意味着“不可能转换”。忘了ulaw,这是古老的。 –

+1

@HansPassant它可能是古老的,但它仍然在使用全国各地 –

回答

2

ACM mu-law encoder期望其输入是16位。如果您正在处理mu或a-law,则采样率可能也很低。以下两行代码将创建一个零长度的PCM 16位流,并将其传递到WaveFormatConversionStream中以将其转换为A律。除非由于某些原因,您的计算机上没有安装G.711编码器,否则不应出现“转换不可能”的错误。

var s = new RawSourceWaveStream(new MemoryStream(), new WaveFormat(8000,16,1)); 
var c = new WaveFormatConversionStream(WaveFormat.CreateALawFormat(8000,1), s);