Tag: audio

Java停止MIDI播放

嗨我有java应用程序播放来自序列的midi消息。 我是用jfugue库做的。 问题是,当我试图用停止按钮停止播放时(调用sequencer.stop()和sequencer.close()),最后播放的音符都是rest时间,我无法阻止它。 所以我要问关于停止所有音频和MIDI的解决方案! 从java应用程序声音播放。 注意:如果你想提出静音音量,你需要知道我希望最终用途能够再次按下播放按钮并再次听到声音,所以静音volumr将不是解决方案,或者请解释。 谢谢!

Java:混合两个WAV文件而不会引入噪音

我正在尝试将2个WAV文件混合到一个WAV文件中。 文件将始终具有完全相同的持续时间并具有相同的格式(16位,44.1 kHz,带符号,小端,单声道)。 使用AudioSystem.getAudioInputSream使用ByteArrayOutputStream将两个WAV放入字节数组,以确保我只获取PCM数据而没有标头。 在其他一些线程的帮助下,我已经能够成功地组合arrays,但不会在信号中引入大量噪声。 它肯定听起来不像剪辑或失真,但我已经尝试平均每对字节的总和以确保安全,这使得一切都更安静,噪音和所有。 任何见解将不胜感激! 我尝试了两种方法,它们应该做同样的事情,并且似乎产生相同的声音结果。 第一个更简单的方法: private byte[] mixBuffers(byte[] bufferA, byte[] bufferB) { byte[] array = new byte[bufferA.length]; for (int i=0; i<bufferA.length; i++) { array[i] = (byte) ((bufferA[i] + bufferB[i])); } return array; } 第二个更具体的方法: private byte[] mixBuffers(byte[] bufferA, byte[] bufferB) { byte[] array = new byte[bufferA.length]; for (int i=0; i<bufferA.length; i+=2) […]

剪辑有时不播放

我有一个Sound类,其中包含一个方法,当调用该方法时,使用Clip对象(在本例中为clip )播放声音。 public static void play() { clip.stop(); // The purpose of the first three lines clip.flush(); // is to restart the Clip object so it clip.setFramePosition(0); // can be played multiple times. clip.start(); } Clip对象的实例化发生在一个单独的静态方法中,该方法在此方法之前调用,这就是上述方法可以声明为静态的原因。 另一个实现KeyListener类包含以下代码: public void keyPressed(KeyEvent e) { Sound.play(); // Sound is the class that implements the previous method. } 因此,每按一次键,我的代码应播放与clip相关的声音。 […]

使用JLayer时在Java中更改卷

我正在使用JLayer播放来自互联网的mp3数据输入流。 如何更改输出的音量? 我正在使用此代码来播放它: URL u = new URL(s); URLConnection conn = u.openConnection(); conn.setConnectTimeout(Searcher.timeoutms); conn.setReadTimeout(Searcher.timeoutms); bitstream = new Bitstream(conn.getInputStream()/*new FileInputStream(quick_file)*/); System.out.println(bitstream); decoder = new Decoder(); decoder.setEqualizer(equalizer); audio = FactoryRegistry.systemRegistry().createAudioDevice(); audio.open(decoder); for(int i = quick_positions[0]; i > 0; i–){ Header h = bitstream.readFrame(); if (h == null){ return; } bitstream.closeFrame();

用Java获取音频文件的波形图案

我想知道如何从音频文件中获取振幅等音乐信息? 假设我们有一个原始音频文件,我想从文件中提取数据,这允许我生成一个曲线,如http://www1.icsi.berkeley.edu/Speech/mr/nearfar.html 。 获得此曲线后,我将执行FFT等。 我一直在尝试在Java Sound中搜索解决方案,但到目前为止我只知道我可以使用AudioInputStream将数据倒入byte[] 。 但是如何将该byte[]转换为double[] ,其中包含有关声音的实际信息? 在这种情况下, double[]的值表示幅度。 有谁能提供解决方案来解决Java中的这个问题?

mp3到java中的wav转换

我将mp3转换为wav的代码是: package audio1; import java.io.File; import javax.sound.sampled.AudioFileFormat; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; public class NewClass { public static void main(String [] args){ try{ AudioFileFormat inputFileFormat = AudioSystem.getAudioFileFormat(new File(“c:\\1.mp3”)); AudioInputStream ais = AudioSystem.getAudioInputStream(new File(“c:\\1.mp3”)); AudioFormat audioFormat = ais.getFormat(); System.out.println(“File Format Type: “+inputFileFormat.getType()); System.out.println(“File Format String: “+inputFileFormat.toString()); System.out.println(“File lenght: “+inputFileFormat.getByteLength()); System.out.println(“Frame length: “+inputFileFormat.getFrameLength()); System.out.println(“Channels: “+audioFormat.getChannels()); System.out.println(“Encoding: […]

在Java中同时播放多个字节数组

如何同时播放多个(音频)字节数组? 这个“字节数组”由TargetDataLine记录,使用服务器传输。 到目前为止我尝试过的 使用SourceDataLine: 无法使用SourceDataLine播放多个流,因为write方法会阻塞,直到写入缓冲区。 使用Threads无法修复此问题,因为只有一个SourceDataLine可以同时写入。 使用AudioPlayer类: ByteInputStream stream2 = new ByteInputStream(data, 0, data.length); AudioInputStream stream = new AudioInputStream(stream2, VoiceChat.format, data.length); AudioPlayer.player.start(stream); 这只会对客户产生噪音。 编辑我没有同时收到语音包,它不是同时,更“重叠”。

有没有任何纯java方式将.wav转换为.mp3?

我在Java方面遇到了很多困难,但无法将Java .wav的工作示例与.mp3转换器结合起来。 此转换器将在Java applet中使用,因此它应仅依赖于使用纯Java编写的库,而不依赖于底层C代码调用。 有人能提供一个完整的例子吗? 谢谢

将wav音频格式字节数组转换为浮点数

我正在使用Java AudioInputStream读取.wav音频文件。音频文件是16位PCM签名,samplerate = 44100,framesize = 2,framelength = 114048.我设法以字节数组的forms获取音频数据但是我我不确定我应该为这个字节数组分配多少大小,以便我可以将它转换为floatinf点值。 我正在使用Goertzel算法进行一些音频操作,该算法接受浮点数组的输入,例如“float [] x”。 下面是我正在使用的一些代码片段。 提前致谢。 try { AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(fileIn); } while ( numBytesRead != -1) { numBytesRead = audioInputStream.read(audioBytes); // Logic goes here floatValue = byteArrayToFloat(audioBytes); }

使用Java中的傅立叶变换处理音频数据

我正在尝试处理音频数据。 我正在使用Java。 我已将音频数据提取到数组中。 现在我应该将N个数据样本传递给计算离散傅立叶变换(或快速傅里叶变换,这样更有效)的函数。 我读过文档,但是我越来越困惑了。 我想要计算的是幅度谱(| X(k)|)。 谁能帮我? 谢谢