播放 UDP 数据包中收到的原始 PCM 音频

2024-02-19

远程设备正在 UDP 数据包中发送实时原始 PCM 音频(不包含标头),我需要在 java 中实现一个程序来接收这些数据包并在 PC 上实时播放它们。 据我所知,原始 PCM 的属性是 16 位、单声道、采样率 24KHz,因此我尝试向该原始 PCM 音频添加 wav 标头并播放,但问题是我没有音频的文件大小。

我还实现了一个基于这个链接 http://www.wikijava.org/wiki/Play_a_wave_sound_in_Java但它只会在输出中产生噪音。

我必须使用 UDP,并且只能从远程设备获取原始 PCM,那么他们有任何库或 API 可以让我在 PC 上播放此原始音频吗?


这是一个获取输出线并在其上播放 PCM 的简单示例。运行时,它会发出大约第二声长而烦人的蜂鸣声。

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.SourceDataLine;

public class RawAudioPlay {

    public static void main(String[] args) {
        try {
            // select audio format parameters
            AudioFormat af = new AudioFormat(24000, 16, 1, true, false);
            DataLine.Info info = new DataLine.Info(SourceDataLine.class, af);
            SourceDataLine line = (SourceDataLine) AudioSystem.getLine(info);

            // generate some PCM data (a sine wave for simplicity)
            byte[] buffer = new byte[64];
            double step = Math.PI / buffer.length;
            double angle = Math.PI * 2;
            int i = buffer.length;
            while (i > 0) {
                double sine = Math.sin(angle);
                int sample = (int) Math.round(sine * 32767);
                buffer[--i] = (byte) (sample >> 8);
                buffer[--i] = (byte) sample;
                angle -= step;
            }

            // prepare audio output
            line.open(af, 4096);
            line.start();
            // output wave form repeatedly
            for (int n=0; n<500; ++n) {
                line.write(buffer, 0, buffer.length);
            }
            // shut down audio
            line.drain();
            line.stop();
            line.close();
        } catch (Exception e) {
            throw new RuntimeException(e.getMessage(), e);
        }
    }

}

你看,它大约有十行用于处理该行,一半的代码是“生成PCM”部分,如果你从其他地方获取PCM,你可以忽略它。您需要注意创建正确的音频格式,搞乱有符号和/或字节序的布尔值,PCM 听起来会非常乱码,甚至可能无法识别。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

播放 UDP 数据包中收到的原始 PCM 音频 的相关文章

  • Hibernate注解放置问题

    我有一个我认为很简单的问题 我见过两种方式的例子 问题是 为什么我不能将注释放在字段上 让我举一个例子 Entity Table name widget public class Widget private Integer id Id G
  • 如何在android上的python kivy中关闭应用程序后使服务继续工作

    我希望我的服务在关闭应用程序后继续工作 但我做不到 我听说我应该使用startForeground 但如何在Python中做到这一点呢 应用程序代码 from kivy app import App from kivy uix floatl
  • SAML 服务提供商 Spring Security

    当使用预先配置的服务提供者元数据时 在 Spring Security 中 是否应该有 2 个用于扩展元数据委托的 bean 定义 一份用于 IDP 元数据 一份用于 SP 元数据
  • Java:如何从转义的 URL 获取文件?

    我收到了一个定位本地文件的 URL 事实上我收到的 URL 不在我的控制范围内 URL 按照 RFC2396 中的定义进行有效转义 如何将其转换为 Java File 对象 有趣的是 URL getFile 方法返回一个字符串 而不是文件
  • OpenCV 中的 Gabor 内核参数

    我必须在我的应用程序中使用 Gabor 过滤器 但我不知道这个 OpenCV 方法参数值 我想对虹膜进行编码 启动 Gabor 过滤器并获取特征 我想对 12 组 Gabor 参数值执行此操作 然后我想计算 Hamming Dystans
  • OSGi:如果不取消服务会发生什么

    这是我获取 OSGi 服务的方式 ServiceReference reference bundleContext getServiceReference Foo class getName Foo foo Foo bundleContex
  • java中如何连接字符串

    这是我的字符串连接代码 StringSecret java public class StringSecret public static void main String args String s new String abc s co
  • wait() 在游戏中如何工作?

    在 playframework 的文档中here http www playframework org documentation 1 2 1 asynchronous已写 public static void loopWithoutBlo
  • JavaFX 中具有自定义内容的 ListView

    How i can make custom ListView with JavaFx for my app I need HBox with image and 2 Labels for each line listView 您可以通过查看
  • 我可以使用子接口重新编译公共 API 并保持二进制兼容性吗?

    我有一个公共 API 在多个项目中多次使用 public interface Process
  • Hazelcast 分布式锁与 iMap

    我们目前使用 Hazelcast 3 1 5 我有一个简单的分布式锁定机制 应该可以跨多个 JVM 节点提供线程安全性 代码非常简单 private static HazelcastInstance hInst getHazelcastIn
  • 将 SignedHash 插入 PDF 中以进行外部签名过程 -workingSample

    遵循电子书第 4 3 3 节 PDF 文档的数字签名 https jira nuxeo com secure attachment 49931 digitalsignatures20130304 pdf 我正在尝试创建一个工作示例 其中 客
  • 在 Spring 中重构这个的最佳方法?

    private final ExecutorService executorParsers Executors newFixedThreadPool 10 public void parse List
  • 测试弱引用

    在 Java 中测试弱引用的正确方法是什么 我最初的想法是执行以下操作 public class WeakReferenceTest public class Target private String value public Targe
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • 如何使用 JSch 将多行命令输出存储到变量中

    所以 我有一段很好的代码 我很难理解 它允许我向我的服务器发送命令 并获得一行响应 该代码有效 但我想从服务器返回多行 主要类是 JSch jSch new JSch MyUserInfo ui new MyUserInfo String
  • Trie 数据结构 - Java [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 是否有任何库或文档 链接提供了在 java 中实现 Trie 数据结构的更多信息 任何帮助都会很棒 Thanks 你可以阅读Java特里树
  • ServletContainer 类未找到异常

    我无法再编译我的球衣项目 并且出现以下异常 GRAVE Servlet Project API threw load exception java lang ClassNotFoundException com sun jersey spi
  • 调整添加的绘制组件的大小和奇怪的摆动行为

    这个问题困扰了我好几天 我正在制作一个特殊的绘画程序 我制作了一个 JPanel 并添加了使用 Paint 方法绘制的自定义 jComponent 问题是 每当我调整窗口大小时 所有添加的组件都会 消失 或者只是不绘制 因此我最终会得到一个
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置

随机推荐

  • 在某些版本的 Oracle 中,相关子查询是否有嵌套限制?

    这是可以帮助您理解我的问题的代码 create table con content id number create table mat material id number content id number resolution num
  • C# 自动启动自动将应用程序添加到启动文件夹

    C 自动启动是否有可能自动将应用程序添加到启动文件夹 现在我可以下载并安装具有自动启动功能的 C 应用程序 但当我重新启动 Windows 时 应用程序不会自动评级 怎么做 你可以使用它 RegistryKey rkey Registry
  • Android:将图像存储到项目目录(文件)中?

    我想将我的位图图像存储到项目目录中 我如何访问我的项目文件夹或者我的项目文件夹的地址是什么 您必须将图像放入res drawable文件夹 然后 您可以使用以下方式访问它们 R drawable name of image for name
  • 在样式组件 ReactJS 上导入 font-face

    I use styled component用于我的 ReactJS 应用程序上的库 css 我想要 font face但不工作 code on GlobalStyle js import createGlobalStyle from st
  • WPF Datagrid - 强制单行行

    我正在 WPF 中处理数据网格 但遇到了问题 将多行字符串添加到我的 DataGridTextColumn 时 该行的高度会扩展以适合整个文本 我希望行高始终保持不变 即仅显示第一行 有谁知道解决方案吗 似乎是一个足够简单的任务 但我还没有
  • 来自数组 HTML Javascript 的图像

    这是一个基本问题 但我发现的大多数例子都有点过于复杂 我正在尝试创建一组照片 然后仅显示选定的一张 这是我的数组 var imgArray new Array imgArray 0 new Image imgArray 0 src imag
  • 使用 Python 自动填写 Web 浏览器表单

    问题 你好 我是一名初学者 正在尝试学习 Python 这是我的第一个项目我想编写一个脚本来自动填写调查问卷 我熟悉编码 并且我编写的大部分代码都是为了解决这个问题 我正在努力编写一个方法 该方法将点击问题 1中的按钮 1 或者按下任何给定
  • 我的 Android 应用程序中由 Theme.AppCompat 引起的 IllegalStateException

    当我尝试启动该应用程序时 出现 NPE 我不知道是什么原因造成的 该应用程序应在网站上显示地图 然后用户可以轻松地将他的位置输入到编辑文本中并将其提交到网页 这是我的代码 package com timbremer iimv import
  • 如何使用jquery在标题属性中添加换行符

    请在下面找到我的代码 该代码将鼠标悬停事件的工具提示添加到我的调查引擎中的字段中 我想要实现的是在工具提示中添加换行符 任何帮助是极大的赞赏 var j jQuery noConflict j choice31QID405 mouseove
  • 标准机器学习中的部分总和?

    我是函数式编程的新手 我有一项任务来计算列表的部分和 例如 psum 1 1 1 1 1 val it 1 2 3 4 5 整数列表 这是到目前为止我的代码 然而 在函数 psum2 L 中 我不知道如何遍历每个值并将它们相加 所以我只是打
  • C++:检查括号和方括号在字符串中是否平衡(逻辑问题)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 检查字符串中的每个 是否都满足 或 检查字符串中的每个 是否与 或 匹配 例如 您永远不能拥有像这样的字符串 a a a a a 但是
  • 创建和连接 SQL Server 数据库的代码:有什么问题吗?

    我是 C 新手 或者我正在尝试以编程方式创建和打开 SQL Server 数据库 我有一个正在创建的 ASP NET Web 应用程序 在页面加载时它应该从数据库中提取一些数据 如果数据库不存在 则应该创建它并使用默认数据填充 PS C 的
  • 如何使用 Angular2 路由

    我正在尝试编写一个单页应用程序 但无法使路由正常工作 我尝试使用许多教程 但考虑到 Angular2 仍处于测试阶段 它们似乎很快就过时了 似乎只要我添加对路由器指令或路由器配置或路由器提供程序的任何引用 该应用程序就会停止工作 并且浏览器
  • 虚拟内存的最大大小可以是多少?

    我看到这个问题 虚拟内存 和 交换空间 有什么区别 https stackoverflow com questions 4970421 difference between virtual memory and swap space 这里提
  • Python - 列出函数值的组合对

    我有四个坐标的组合 我试图找到每个坐标之间的距离 我已经能够完成此操作 但是我无法让我的程序列出与每个距离相对应的坐标对 import itertools import math point1 1 1 0 5 point2 3 3 1 po
  • Android 按钮以 Java(而非 XML)编程方式显示状态

    如何为 state pressed 定义 Android 按钮图像 Java 中的 android state focused 例如 如何在 Java 中完成对来自 XML 的等效操作 http developer android com
  • 按最高值对 n 个项目进行多维自定义排序

    我目前可以使用自定义排序方法对多维数组进行排序 每个数组lineupSet has an n物品数量 功能sort points将对每个进行排序lineupSet从最高到最低totalPoints然后它会给我lineupSet总数最高tot
  • 防伪令牌无法解密

    我在 Azure 中部署了一个身份服务器 asp net core 项目 我还有两个使用我的身份服务器作为 SSO 的 asp net 5 mvc 客户端 并且不断出现 保存在日志中 异常 防伪令牌无法解密 今天我们遇到了类似的问题 我们能
  • 如何中止宏

    我有一个宏可以遍历目录并查看其所有文件 不幸的是 该目录位于映射的网络驱动器上 因此该过程非常慢 我怎样才能杀死宏 You can stop a macro by pressing the keys ctrl alt break
  • 播放 UDP 数据包中收到的原始 PCM 音频

    远程设备正在 UDP 数据包中发送实时原始 PCM 音频 不包含标头 我需要在 java 中实现一个程序来接收这些数据包并在 PC 上实时播放它们 据我所知 原始 PCM 的属性是 16 位 单声道 采样率 24KHz 因此我尝试向该原始