java - 如何混合多个PCM音频包(语音流)

标签 java android audio

我正在为游戏开发Java语音聊天,当多个玩家同时讲话时,音频混合出现问题。音频仅发送到附近的播放器,因此我将每个用户的缓冲区分别存储在客户端上,并将ID和语音数据包一起发送到服务器上。要收听,我要遍历用户列表并检查现有用户的缓冲区以重现它们。但是,我在混合音频时遇到问题,可能是混合错误。我应该如何混合这些音频包?音频是16位PCM。当几个玩家一起聊天时,这些音频中有很多杂音/嘶嘶声,因此音频几乎听不到。
适用于该混音器的正确算法是什么?

最佳答案

根据我对话筒输入的有限经验,我的出发点是尝试以下步骤:

  • 将16位字节转换为PCM
  • (考虑对PCM应用低通滤波器,可能还需要增加音量)
  • 将每行混合的PCM值加在一起
  • 将PCM转换回字节

  • 根据您的描述,我无法确定您是否正确地执行了步骤1。
    可以在jitsi.org上进行进一步研究。他们的服务是用Java编写的,并且是开源的。知道他们如何处理这件事将很有趣。但是在我看来,最平常的事情是在任何一次都只选择并播放一条线。对此限制可能有充分的理由。但是我不知道这是否是技术性的(例如,噪音以淹没声音的方式积累)还是仅仅是人们同时讲话很容易造成混乱。我认为可能还有回声/反馈注意事项。我将期待看到其他人可以为此提供哪些信息。

    关于java - 如何混合多个PCM音频包(语音流),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64615307/

    相关文章:

    JavaMail mail.smtp.ssl.enable 不工作

    java - 无法从 GUI 线程获取字符串到 java 中的 'logic' 线程

    android - 如何告诉 Proguard 混淆类名

    ios - 如何在Swift中从输入音频文件生成反相音频文件?

    python - 在 Python 中实现 (Butterworth) 过滤器并创建 wav 文件

    java - 为什么我不能在 libgdx 上播放完整的歌曲

    java - 网址格式错误异常

    java - 安卓交互器测试

    Android 在广播接收器中捕获自定义架构链接

    java - 无法解析符号 'ImageReference'