c# - 从多个源接收音频数据并将它们合并到波形文件中

标签 c# wav audio-recording naudio directsound

我使用 C# 和 DirectSound 来录制音频并将其通过本地网络发送到另一台计算机,该计算机接收数据并将其保存到波形文件中。

我用过类似的code for recording和类似for saving波形文件(使用 NAudio)。

将所有接收到的字节保存到波形文件中是可行的。但是,我想从多台计算机接收音频并将其合并到一个波形文件中。

我尝试录制两个单独的波形文件,每个客户端一个,然后将它们合并在一起。然而,我的天真的方法没有提供任何同步手段。生成的波形文件长度相差至少 5 秒,无法正确合并。

所以,这是我的问题:

1) 如何获取从网络接收的音频字节并将其保存到波形文件中,以便生成的文件在正确的时间播放音频?

例如,我录制 100 秒的音频并通过网络发送。但是,实际只记录了 95 秒的音频字节。缺少的 5 秒是由于我发送数据包时发生的小延迟的累积造成的。

那么,如何在 100 秒内同步这 95 秒的音频并在正确的时间播放?

2) 如何混合从多个客户端接收的音频字节以获得同步播放所有客户端音频的单个波形文件?

如果我需要澄清我的问题,请告诉我。感谢您的帮助!

最佳答案

您需要参与计算机上的高精度时间同步(以及发送数据包上的时间戳)。为了最大限度地减少时钟漂移,您可以按照预定的时间间隔重新同步(不太推荐)或在机器中安装更高质量的硬件时钟(首选)。如果这些计算机位于本地网络上,将其中一台设置为 NTP 服务器,将其他计算机设置为客户端,将产生足够同步的时钟(即,彼此相差 0.000001 秒或更好)。

关于c# - 从多个源接收音频数据并将它们合并到波形文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10272258/

相关文章:

C# Excel 生成

c# - 如何将具有动态值的 javascript 对象发布到 mvc6 Controller 操作

audio - 将多个立体声MP3文件转换为它们的Mono WAV等效文件?

python - 为什么要使用udacity gui和scipy从wav文件中提取样本,并给出不同的值?

android - 检测另一个应用程序是否正在请求麦克风

audio - WASAPI GetNextPacketSize 什么时候返回 0

c# - 从存储在不同文件夹中的程序集中映射类

c# - 没有外键的关联

android - 使用 FFmpeg Android 更改音频音量

ios - AVAssetWriter 不录制音频