java - 在Java中播放整数/双数组

标签 java arrays audio

我正在尝试在Java程序中播放数组。
到目前为止,我已经可以使用以下代码播放字节数组:

AudioFormat audioFormat = new AudioFormat(samplingFreq, bps, 1, true, true);
SourceDataLine sdline = AudioSystem.getSourceDataLine(audioFormat);
line.open(audioFormat);
sdline.start();        
sdline.write(playArray, 0, playArray.length);
sdline.drain();
sdline.close();

但是,由于write方法仅接受字节数组作为参数,因此我只能播放字节数组。我希望每个样本数组也能播放16/32位。

是否有任何方法可以使用AudioSystem(或任何其他类)播放整数数组,甚至可以播放 double 数组。

最佳答案

借助@ greg-449的评论,我得以解决该问题。要每秒播放更高的位,您只需要增加bps参数并一个接一个地发送字节即可。

例如,如果要发送1867作为样本,则需要16位,如下所示:
0000 0111 0100 1011

前8位是十进制的7,后八位是十进制的75,因此,由于我们使用的是big endian(AudioFormat参数的最后一个参数),因此字节数组的第一个元素应为7,第二个元素应为是75。因此对于16位,每个样本我们只需要两个字节。

关于java - 在Java中播放整数/双数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23857683/

相关文章:

c++ - 如何将文本更改为语音以及如何将字符插入字符数组

audio - Node-Webkit读取MP3文件

audio - 如何使用 Firefox 操作系统在后台播放音频?

c# - 使用 C# 在 ComboBox 中放置驱动器列表的最有效方法是什么?

python - 在某些数组位置查找重复数字

java - 如何在另一个 Java 类中使用枚举?

java - Eclipse 看不到 Maven 项目的 GitHub 依赖项中所做的更改

audio - 使用 ffmpeg 设置单独的音频和视频文件,同时将 rtsp 传输到 wowza

java - 在 Cpanel Server 中部署多个 Tomcat 应用程序时的内存泄漏问题

java - 在将某些内容馈送到管道 STDIN 之前,无法跟踪以管道 STDOUT 为食的运行进程