[英]acmStreamConvert - destination buffer is always empty
我有一個編碼的 adpcm 文件(采樣率為 9600,位深度為 4),我想用 NAudio 播放它。
我使用 RawSourceWaveStream 讀取文件,然后執行以下操作:
var reader = new RawSourceWaveStream(new MemoryStream(File.ReadAllBytes(path)), new AdpcmWaveFormat(9600,1));
var convert = WaveFormatConversionStream.CreatePcmStream(reader);
waveOut.Init(new BlockAlignReductionStream(convert));
PS 如果它有什么不同,我實際上也用 SampleProvider 包圍了流。
當我嘗試播放文件時,在 acmStreamConvert 中,目標緩沖區始終為空,因此沒有緩沖區填充到 waveOut 緩沖區。
我在所有 acm 函數中都沒有錯誤,包括轉換函數,所以我知道格式(來源和建議)是正確的,那么為什么從 acmConvert 返回的緩沖區是空的?
編輯
我添加了一些可能會有所幫助的信息。
我嘗試播放的那個 adpcm 文件是我通過以下步驟創建的文件:
所有步驟都是用 NAudio 完成的。
我檢查了所有輸出文件(raw、wav、adpcm)的信號,信號看起來是正確的。 通過 Audacity 完成的檢查。
我還嘗試使用 WaveFileReader 讀取 adpcm 但隨后在 WavFormatConversionStream 的讀取方法中,“計數”始終為零(因為塊對齊檢查)。
原始采樣率為 9600 會出問題嗎?
還有一件事,我剛剛看到 WaveFileWriter 無法創建每個樣本位 = 4 的文件,所以我的編碼文件實際上是用每個樣本 16 位而不是 4 位創建的。
該文件很可能是由第三方打包程序壓縮的。 如果您正在嘗試解碼游戲音頻,請嘗試在啟動期間挖掘游戲的轉儲。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.