2012-11-29 104 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);