如何在phone系统中将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的默认播放app播放时,播放了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 01 0 07 00 00 02 00 FF 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 7 8 7 00 7 08 08 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 BB2 A0 92A BB DB A9 8A 01 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 B A9 BB 9A 10 13 14 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 A 9 BC A9 9 99 01 31 41 01 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 29 0319 11 29 0319 11 02 11 33 01 10 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 9 9 19 99 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 91 9 A 09 19 91 10 11 11 21 11 3A 09 99 90 00 31 11 19 10 91 91 11 01 9A

这是我实现的代码(audiodata 是 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的声音同时保存在一个文件中?

文件的 headers(来自上面的数据块)对于 8kHz 单声道 ADPCM 看起来不错。所有这些都是由 NAudio 编写的,所以我希望它们与代码相匹配。这个特定文件总共有 51,908 个样本(约 6.5 秒),与数据块中 25,954 字节的数据相匹配。到目前为止,一切顺利...如果数据是 Microsoft ADPCM 格式。

不幸的是,有许多 ADPCM 格式存在细微差别,无论是编解码器使用的系数、每个样本的位数(从 2 到 6 不等,尽管 4 是最常见的)、支持的采样率和块编码. G723 过去在电话中很常见,但你会发现各种各样的。

除了支持的特性(每个样本的位数、通道数、采样频率等)不同之外,不同的格式使用不同的块结构。 IMA/DVI ADPCM 生成具有 4 字节 header 的样本块以纠正漂移并使解码器状态恢复同步。

如果我不得不猜测的话,我会选择 Dialogic/OKI ADPCM 格式。