簡體   English   中英

如何將 adpcm 數據保存到電話系統中的 wav、mp3 等文件中?

[英]How to save adpcm data to file like wav, mp3 in phone system?

有以下電話通信系統。

系統

其中,我將開發一個中繼器。 中繼器執行 tcp/ip 通信。

分別從 user1 和 user2 接收以字節為單位的 adpcm 數據。

我想將從中繼器接收到的數據保存為音頻文件。

收集來自一側(user1)的數據並將其制成字節數組后,我使用 Naudio 創建了一個 wav 文件,但它失敗了。

當我使用window10的默認播放應用程序播放它時,它會播放大約1秒並結束。 但總播放時間較長,如6秒和7秒。

下面的數據是我創建的wav文件的二進制數據開頭的一部分。

52 49 46 46 B4 65 00 00 57 41 56 45 66 6D 74 20 32 00 00 00 02 00 01 00 40 1F 00 00 00 10 00 00 00 01 04 00 20 00 F4 0 010 07 00 0 0 0 010 07 00 0 0 00 00 00 00 C0 00 40 00 F0 00 00 00 CC 01 30 FF 88 01 18 FF 66 61 63 74 04 00 00 00 C4 CA 00 00 64 61 74 61 62 65 00 00 77 77 8 77 68 08 08 08 08 08 08 08 80 08 08 9A 99 99 90 01 21 21 12 25 53 40 9A B9 91 24 34 11 8A BC AA 80 13 17 43 42 12 09 8A AB DB BB BA 9A 88 A DB 9 02 A0 BA BB 33 33 31 10 1A 0B BB BA A0 91 22 32 11 90 A9 BB BB 9B 11 23 33 41 11 19 9B AB B9 11 22 13 35 11 08 99 AA BC A1 A1 00 31 31 11 A9 1314 AB BB 9A 1 12 91 90 9B 9B B9 A0 11 13 41 29 29 09 9B AB B9 09 10 13 33 11 A9 BB BB CA 09 00 12 33 33 39 39 1A AA B9 B1 91 22 33 40 01 90 A9 BC A9 919 01 3 9A 9B 9C 9A 9A 90 01 33 33 21 01 09 9B A9 90 11 11 33 33 21 01 0A 9B 9A 99 01 03 14 10 19 99 B9 BB BA B0 90 12 33 11 201 91 A9 19 339 09 99 B0 A0 10 12 13 31 29 99 9B 9A B0 99 90 01 11 21 90 91 09 19 09 10 90 12 03 19 19 19 09 99 19 9 9 00 11 13 10 90 99 BA B9 B0 99 00 01 91 00 99 11 99 00 11 01 11 11 11 19 99 11 91 91 11 00 10 01 20 01 90 99 AA 9A 99 1 9 1 91 1990 9 11 21 11 3A 09 99 90 00 31 11 19 10 91 91 11 01 9A

這是我實現的代碼(音頻數據是 adpcmdata 的字節數組):

        var adpcmWaveFormat = new AdpcmWaveFormat(8000, 1);

        using (WaveFileWriter writer = new WaveFileWriter("D:\\test.wav", adpcmWaveFormat))
        { 
            writer.Write(audiodata, 0, audiodata.Length);
        }

如何將 adpcm 數據保存為音頻文件?

以及如何將 user1 和 user2 的聲音同時保存在一個文件中?

文件的標題(來自上面的數據塊)對於 8kHz Mono ADPCM 看起來很好。 所有這些都是由 NAudio 編寫的,所以我希望它們與代碼匹配。 這個特定文件總共有 51,908 個樣本(約 6.5 秒),與數據塊中 25,954 字節的數據相匹配。 到目前為止,一切都很好……如果數據是 Microsoft ADPCM 格式。

不幸的是,有許多 ADPCM 格式存在細微差別,無論是在編解碼器使用的系數、每個樣本的位數(從 2 到 6,盡管最常見的是 4)、支持的采樣率和塊編碼。 G723 曾經在電話中很常見,但你會發現各種各樣的。

除了支持的特性(每個樣本的位數、通道數、樣本頻率等)的差異之外,不同的格式使用不同的塊結構。 IMA/DVI ADPCM 生成帶有 4 字節 header 的樣本塊,以糾正漂移並使解碼器 state 恢復同步。

如果我不得不猜測的話,我會使用Dialogic/OKI ADPCM格式的 go 。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM