![](/img/trans.png)
[英]AcmNotPossible calling acmStreamOpen when I try to convert .WAV file to MP3
[英]ACM Stream Convert exception displaying AcmNotPossible
當從服務器解壓縮 Mp3 幀時,當 Mp3 播放了 10 到 15 秒時會發生上述異常。我的應用程序是客戶端/服務器應用程序。我通過組合 Mp3 數據包並通過網絡流對其進行序列化來發送 Mp3 幀。我正在使用NAudio 開源 API來壓縮和解壓縮幀並播放 Mp3。我在堆棧跟蹤中遇到以下異常。
NAudio.MmException.Try(MmResult 結果,字符串函數)
在 NAudio.Wave.Compression.AcmStreamHeader.Convert(Int32 bytesToConvert, Int32& sourceBytesConverted)
在 NAudio.Wave.Compression.AcmStream.Convert(Int32 bytesToConvert, Int32& sourceBytesConverted)
在 NAudio.Wave.AcmMp3FrameDecompressor.DecompressFrame(Mp3Frame frame, Byte[] dest, Int32 destOffset)
在 Client.Audio.SoundPlayer.StreamMP3(對象狀態)
AcmNotPossible 是acmStreamConvert Windows 函數返回的錯誤代碼,該函數調用 MP3 ACM 編解碼器。 此錯誤可能表示 MP3 幀無效,或者您一次傳入過多幀。 你有多確定你得到的是完整的 MP3 幀? 通過將接收到的數據寫入 MP3 文件然后檢查是否可以按預期播放來調試此類問題是一個好主意。
轉換為 mp3 需要擴展信息。
我將 mp3 編解碼器信息聲明為
const MP3Extend = chr(0)+chr(1)+chr(0)+chr(4)+chr(0)+chr(0)+chr(0)+chr(192)+chr(3)+chr(1)+chr(0)+chr(0);
然后我創建了字節的 var buffer buffer=array[0..511]
; mp3formatin:PWaveformatEx;
move(mp3formatin^,buffer[0],sizeof(pWaveformatex))
move(mp3extend,buffer[sizeof(pWaveformatex)-1],length(MP3EXTEND))
acmstreamopen(Instance, nil,pwaveformatEx(@buffer[0])^,outputwaveformatEx^,
etc當你現在參考 mp3formatin 例如 pWaveformatEx(@buffer[0]).thevalues
希望這能解決您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.