播放 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 音频 的相关文章

  • 如何将 javax.persistence.Column 定义为 Unsigned TINYINT?

    我正在基于 MySQL 数据库中的现有表创建 Java 持久性实体 Bean 使用 NetBeans IDE 8 0 1 我在这个表中遇到了一个字段 其类型为 无符号 TINYINT 3 我发现可以执行以下操作将列的类型定义为 unsign
  • Kotlin 未解决的参考:CLI 上 gradle 的 println

    放一个printlnkotlin 函数返回之前的语句会崩溃 堆栈跟踪 thufir dur NetBeansProjects kotlin thufir dur NetBeansProjects kotlin gradle clean bu
  • 如何根据运行的 jar 的结果让我的 ant 任务通过或失败?

    我正在运行 CrossCheck 无浏览器 js 单元测试 作为 ant 脚本的一部分 如果 CrossCheck 测试失败 我希望 ant 报告失败 这是 build xml 中的相关部分
  • 使用PHP套接字发送和接收数据

    我正在尝试通过 PHP 套接字发送和接收数据 一切正常 但是当我尝试发送数据时 PHP 不发送任何内容 Wireshark 告诉我发送的数据长度为 0 我正在使用这段代码
  • 来自十六进制代码的 Apache POI XSSFColor

    我想将单元格的前景色设置为十六进制代码中的给定颜色 例如 当我尝试将其设置为红色时 style setFillForegroundColor new XSSFColor Color decode FF0000 getIndexed 无论我在
  • Spring Security SAML2 使用 G Suite 作为 Idp

    我正在尝试使用 Spring Security 5 3 3 RELEASE 来处理 Spring Boot 应用程序中的 SAML2 身份验证 Spring Boot 应用程序将成为 SP G Suite 将成为 IDP 在我的 Maven
  • 需要使用 joda 进行灵活的日期时间转换

    我想使用 joda 解析电子邮件中的日期时间字符串 不幸的是我得到了各种不同的格式 例如 Wed 19 Jan 2011 12 52 31 0600 Wed 19 Jan 2011 10 15 34 0800 PST Wed 19 Jan
  • Chromium 嵌入式框架支持 HTML5 音频吗?

    我一直在玩 CefSharp 但似乎无法播放任何音频 我可以让音频控件出现 但它们保持冻结状态 这些是我使用的版本 Chromium 21 0 1180 0 CEF r728 CefSharp 0 12 4596 50 我先尝试了 mp3
  • 如何检测 Java 字符串中的 unicode 字符?

    假设我有一个包含 的字符串 我如何找到所有这些 un icode 字符 我应该测试他们的代码吗 我该怎么做呢 例如 给定字符串 A X 我想将其转换为 AYXY 我想对其他 unicode 字符做同样的事情 并且我不想将它们存储在某种翻译映
  • Java Swing For mac 中的 DJ Native Swing 浏览器

    我有一个用 Swing 制作的 Java 应用程序 并且使用了一个 DJ Native Swing 浏览器 当我尝试在 OS X 上使用它时 它抛出了一个NoClassDefFoundError尽管我添加了 swt jar 但始终如此 有人
  • 如何避免 ArrayIndexOutOfBoundsException 或 IndexOutOfBoundsException? [复制]

    这个问题在这里已经有答案了 如果你的问题是我得到了java lang ArrayIndexOutOfBoundsException在我的代码中 我不明白为什么会发生这种情况 这意味着什么以及如何避免它 这应该是最全面的典范 https me
  • 了解joda时间PeriodFormatter

    我以为我明白了 但显然我不明白 你能帮我通过这些单元测试吗 Test public void second assertEquals 00 00 01 OurDateTimeFormatter format 1000 Test public
  • 读取电子邮件的文本文件转换为 Javamail MimeMessage

    我有一个电子邮件原始来源的文本文件 直接从 gmail 复制 如果您单击 查看原始文件 您就会看到它 我想读入该文件并将其转换为 MimeMessage 如果您好奇为什么 我设置了 JavaMaildir 并且需要用电子邮件填充它的收件箱以
  • 使用 Mockito 模拟某些方法,但不模拟其他方法

    有没有办法使用 Mockito 模拟类中的某些方法 而不模拟其他方法 例如 在这个 诚然是人为的 Stock我想嘲笑的班级getPrice and getQuantity 返回值 如下面的测试片段所示 但我想要getValue 执行乘法 如
  • 流中的非终结符 forEach() ?

    有时 在处理 Java Stream 时 我发现自己需要一个非终端 forEach 来触发副作用但不终止处理 我怀疑我可以用 map item gt f item 之类的方法来做到这一点 其中方法 f 执行副作用并将项目返回到流中 但这似乎
  • JMenu 中的文本居中

    好吧 我一直在网上寻找有关此问题的帮助 但我尝试的任何方法似乎都不起作用 我想让所有菜单文本都集中在菜单按钮上 当我使用setHorizontalTextPosition JMenu CENTER 没有变化 事实上 无论我使用什么常量 菜单
  • Android:无法发送http post

    我一直在绞尽脑汁试图弄清楚如何在 Android 中发送 post 方法 这就是我的代码的样子 public class HomeActivity extends Activity implements OnClickListener pr
  • 洪水填充优化:尝试使用队列

    我正在尝试创建一种填充方法 该方法采用用户指定的初始坐标 检查字符 然后根据需要更改它 这样做之后 它会检查相邻的方块并重复该过程 经过一番研究 我遇到了洪水填充算法并尝试了该算法 它可以工作 但无法满足我对 250 x 250 个字符的数
  • Java EE 目录结构

    我对以下教程有疑问 http www mkyong com jsf2 jsf 2 internationalization example http www mkyong com jsf2 jsf 2 internationalizatio
  • 在java中使用多个bufferedImage

    我正在 java 小程序中制作游戏 并且正在尝试优化我的代码以减少闪烁 我已经实现了双缓冲 因此我尝试使用另一个 BufferedImage 来存储不改变的游戏背景元素的图片 这是我的代码的相关部分 public class QuizApp

随机推荐

  • 在某些版本的 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 因此我尝试向该原始