问题标签 [javax.sound.sampled]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
247 浏览

java - 如何在 Java 中停止音频延迟?

我正在制作一个类似 Skype 的程序。我有一个“语音聊天”类来处理语音聊天连接。我有一个“ ClientAudio ”类来处理客户端音频输出。我还有一个“ ClientAudioRec ”来处理从服务器接收音频并播放它。在“客户端音频" 类我将音频数据存储在缓冲区中,直到它已满以尝试减少延迟。然后我将其发送到服务器。如果我有两个人在通话中,除非缓冲区为 1000,否则它会延迟。当我添加另一个人时调用它滞后太多,以至于你无法理解任何人。但我不想每次其他人加入时都延长缓冲区,因为 1000 已经像两秒延迟了。如果有人知道如何减少滞后或让它几乎是即时的,这真的很有帮助。提前谢谢你!!!

语音聊天(服务器端

客户音频

客户录音

0 投票
2 回答
353 浏览

audio - 在 Java 中交替播放 2 个不同的频率

我是 Java Sounds 的新手。我想在指定的时间内循环播放 2 个不同的频率,每个 1 秒。就像,如果我有 2 个频率 440hz 和 16000hz 并且时间段是 10 秒,那么每“偶数”秒播放 440hz,每“奇数”秒播放 16000hz,即交替播放 5 秒。

我通过一些示例学到了一些东西,并且我还制作了一个程序,该程序以单个用户指定的频率运行一段时间,该时间也由用户在这些示例的帮助下给出。

如果有人能帮助我解决这个问题,我将不胜感激。谢谢。

我还附上了那个单频代码以供参考。

}

0 投票
0 回答
147 浏览

java - 如何在java中将生成的音频写入.wav格式

我对 Java Sound 很陌生,因此我对它的概念并不那么强烈。我想了解如何将以下代码生成的音频写入 .wav 格式的文件。我也阅读了一些关于 stackoverflow 的帖子和一些问题,但我无法从中找出解决方案。所以请帮助我理解它。谢谢。

0 投票
2 回答
575 浏览

audio - 如何查找 2D 字节数组的长度以及如何在 ByteArrayInputStream 中使用该 2D 字节数组

首先,在下面的代码中,我试图做的是使用 'byteBuffer[0].length' 找到 2D 字节数组的长度,但它实际上不起作用。当我打印 'byteBuffer[0].length' 时,它给出的输出是 4 而不是 882000,根据我传递的参数,它(后者)应该是正确的输出。那么如何在我的循环中迭代它呢?

其次,我想在“ByteArrayInputStream”中传递“byteBuffer”,但在“ByteArrayInputStream”中我们不能传递二维数组。那么有没有办法附加值并在那里使用它?而且我还需要交替传递'Frequency1'和'Frequency2'的值并将它们保存为.wav格式,以便我可以在我的媒体播放器中相应地播放它们。例如:救护车的警报器。

}

0 投票
1 回答
135 浏览

java - 在将声音写入文件之前,如何在不使用 java 中的“剪辑”的情况下循环声音

首先感谢大家帮助我解决我之前的问题。

在下面的代码中,我交替采用两个频率并将它们写入 .wav 格式,以便在我的 Windows Media Player 中运行它,时间由用户指定。我想要了解如何循环这些频率以在指定的时间内交替运行,例如救护车的警报器,并且在我的程序中,两个频率只播放一次,或者。例如,如果我将时间指定为 10 秒,那么两个频率都将分别运行 5 秒。但我想要的是第一个频率运行一秒或两秒(如用户指定),然后第二个频率运行类似的秒,然后再次运行第一个频率,它应该一直持续到指定的时间.

由于我是 Java 和 JavaSounds 的新手,因此有时我可能会问一些愚蠢或不相关的问题。所以请耐心等待,因为这是我可以学习的唯一方法。谢谢。

0 投票
0 回答
169 浏览

java - SourceDataLine 缓冲区大小导致播放中的点击和停止

我正在尝试使用SourceDataLine. 打开SourceDataLinewith 时sdl.open(format),它会创建一个 32000(我的采样率)的默认缓冲区,因此有效一秒钟。但是由于我的应用程序应该是低延迟的,所以我尝试使用较小的缓冲区。( sdl.open(format, buffer);)

在生成声音时,我目前使用 512 个样本的缓冲区(还没有找到最佳值,如果您有任何见解,我将不胜感激)

我的算法的一些伪代码:

当我尝试使用自己的缓冲区大小时(我尝试了从max到的所有内容max * 2 // * 4; * 8; * 16),我得到了很多点击和噪音。

如果你们对去这里的正确方式有任何见解,我将不胜感激。我不知道我的 SourceDataLine 缓冲区应该比我写入 Line 的块大多少,如果有的话。有什么技巧可以让这个顺利吗?我很确定我的程序生成音频的速度足够快,所以这不应该是问题。

0 投票
0 回答
163 浏览

java - 安卓声音处理

我有一个 Java 应用程序,它通过将音频文件读入 AudioInputStream 对象然后将其写入字节数组来计算音频文件的 MFCC 系数。

由于 Android 不支持 Java 声音库,因此包含 AudioInputStream 对象的上述代码在 Android 应用程序中不起作用。在Android中是否有相应的方法来执行上述操作?

0 投票
1 回答
163 浏览

java - 尝试从混音器(立体声混音)读取字节时出现 ArrayIndexOutOfBoundsException

我正在尝试从给定的混音器中读取音频字节,在这种情况下,是来自 Windows 系统的立体声混音。该项目由2部分组成。一个通过套接字(引发异常的那个)将 AudioFormat 和混音器 ID 发送到第二个,该套接字从混音器打开给定的行,以便它可以读取音频字节并将它们发送到第三方软件。

执行此任务的代码如下...

具体的错误信息如下...

这个错误让我感到惊讶,因为几个月前测试了完全相同的代码,并且可以通过标准输出完美地发送字节。

更新:索引800范围是 8 位音频格式,如果我选择 16 位,超出范围异常会说1600

0 投票
1 回答
78 浏览

java - Java 音频不会使用正确的参数初始化 TargetDataLine

我有一个使用 48000 采样率、24 位和 1 个通道的麦克风。所以我将这些数据输入AudioSystem.isLineSupported()并得到一个false.

我尝试输入 8 位而不是 24 位,它可以工作。但是音频中有一个奇怪的背景嘶嘶声,所以我猜这不是我的事。

问题:我怎样才能调试发生了什么?我知道我喂食的设置是正确的,那会是什么?

我正在使用的代码(是的,它是 Kotlin):

0 投票
0 回答
745 浏览

java - How does the AudioInputStream.read(byte[] b) function work?

I have a problem with this method. In the following i have written a test code that reads an audio stream into a byte array (and does a convertion [i have mp3plugin.jar as external jar, if you should wonder why this works] and some other stuff, but i have only let that in to make the code executable). The problem is that the method seams not allways to do the same thing. Sometimes the AudioInputStream is getting smaller and sometimes it is not. My question is why?

Ok, so this is the original size of the audio stream. (Until here everything is fine)

Why is my Stream getting smaller? (in the documentation they say it is reading into the array so i kinda understand that part)

Why is my Stream not getting smaller, as it did the first time? (for this is the part i have no clue)

Why is the Stream now getting smaller every eleven times? (here I don't understand the world anymore)

Finally this is the output i get:

Thanks for your help.

John