Tag: javasound

在没有临时文件的情况下将音频流转换为Java中的WAV字节数组

给定一个调用的InputStream in其中包含压缩格式的音频数据(如MP3或OGG),我希望创建一个包含输入数据的WAV转换的byte数组。 不幸的是,如果您尝试这样做,JavaSound会向您发出以下错误: java.io.IOException: stream length not specified 我设法通过将wav写入临时文件然后将其读回来使其工作,如下所示: AudioInputStream source = AudioSystem.getAudioInputStream(new BufferedInputStream(in, 1024)); AudioInputStream pcm = AudioSystem.getAudioInputStream(AudioFormat.Encoding.PCM_SIGNED, source); AudioInputStream ulaw = AudioSystem.getAudioInputStream(AudioFormat.Encoding.ULAW, pcm); File tempFile = File.createTempFile(“wav”, “tmp”); AudioSystem.write(ulaw, AudioFileFormat.Type.WAVE, tempFile); // The fileToByteArray() method reads the file // into a byte array; omitted for brevity byte[] bytes = fileToByteArray(tempFile); tempFile.delete(); return bytes; […]

如何计算java中音频信号的电平/幅度/ db?

我想在java中为麦克风创建一个音频电平表,以检查输入的大小。 它应该看起来像操作系统之一。 我不是在询问gui。 它只是计算出来的字节流中的音频电平 n = targetDataLine.read( tempBuffer , 0 , tempBuffer.length ); 所以我已经有了一些正在运行的东西,但它甚至都没有接近我操作系统的水平仪(窗口)它卡在中间。 我有0到100之间的值是好的,但是在中间音量,无论输入多么大,它都会在60左右。 这是我现在计算它的方式: amplitude = 0; for (int j = 0; j tempBuffer[j+1]) amplitude = amplitude + tempBuffer[j] – tempBuffer[j+1]; else amplitude = amplitude + tempBuffer[j + 1] – tempBuffer[j]; } amplitude = amplitude / tempBuffer.length * 2; 是否有更好/更精确的方法来计算音频电平来监控它? 或者我可能犯了一个重大错误? 那是我的Audioformat: public […]

转换音频格式

我在转换WAV文件的音频格式时遇到了麻烦。 我正从麦克风录制声音,声音按以下格式录制:PCM_SIGNED 44100.0 Hz,16位,单声道,2字节/帧 我想将上述格式转换为ULAW 8000.0 Hz,8位,单声道,1字节/帧 我使用以下代码, InputStream is = request.getInputStream(); AudioInputStream ais = AudioSystem.getAudioInputStream(is); AudioFormat oldFormat = ais.getFormat(); AudioFormat newFormat = new AudioFormat(AudioFormat.Encoding.ULAW, 8000, 8, 1, 1, 8000, false) ; AudioInputStream lowResAIS = AudioSystem.getAudioInputStream(newFormat, ais); //Getting the below Exception on this line 我收到以下错误, java.lang.IllegalArgumentException:不支持的转换:ULAW 8000.0 Hz,8位,单声道,1字节/帧,来自PCM_SIGNED 44100.0 Hz,16位,单声道,2字节/帧,little-endian 有人可以帮我解决这个问题! 万分感谢!!!

如何从我的wav文件中绘制声音数据?

首先,这是为家庭作业或…项目。 我无法理解如何在Java中为项目绘制声音数据波的想法。 我必须完全从头开始使用UI进行这项任务,所以基本上都是制作一个.wav文件编辑器。 我遇到的主要问题是将声音数据输入要绘制的图形中。 目前我正在绘制一个随机生成的值数组。 到目前为止,我有一个运行并validationwav文件的迷你程序,实际上它是一个wav文件。 我正在使用FileInputStream读取它并validation:RIFF字节(0-3),FileLength(4-7),WAVE字节(8-11),然后是格式块格式(从RIFF块的末尾开始) ;并将索引定位到它的末尾,并给出格式0-3,格式块4-7的长度,然后是波形文件的所有规范的下一个16字节,并将它们存储在适当的命名变量中。 一旦我到达DATA块并且它的长度超过了我的所有声音数据,这就是我不确定如何将每个字节存储为声音数据的字节,甚至将其转换为与振幅相关的值。声音。 我认为validation是相似的,所以它会是相同的,但它似乎不是那样的…要么那么,或者我一直在使一些非常简单的事情复杂化,因为我已经盯着这几天了。 任何帮助表示赞赏谢谢。

Java中的正弦波声音发生器

在Java中以任何频率生成正弦波声音的最简单方法是什么? 样本大小超过2个字节会有所帮助,但这并不重要。 谢谢

javax.sound.sampled.UnsupportedAudioFileException:加载wav文件时无法从输入文件中获取音频输入流

我正在使用java 6 ,我正在尝试加载wav文件,以获得其持续时间如下: public static double getAudioFileDuration(File file) { try { AudioInputStream stream = AudioSystem.getAudioInputStream(file); // At present, ALAW and ULAW encodings must be converted // to PCM_SIGNED before it can be played AudioFormat format = stream.getFormat(); if (format.getEncoding() != AudioFormat.Encoding.PCM_SIGNED) { format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, format.getSampleRate(), format.getSampleSizeInBits(), format.getChannels(), format.getFrameSize(), format.getFrameRate(), true); // big endian […]

如何开发屏幕截图到video应用程序

我在stackoverflow中发现了类似的问题。 但我想要具体。 我访问了一个网站screencast-o-matic 。 他们有一个java applet的web应用程序,它捕获屏幕以导出为video。 我想开发类似的应用程序。 这样做需要哪些知识和步骤? 感谢致敬。 编辑另一个网站屏幕 。

如何在Java中停止音乐片段?

我正在和一些同学一起玩游戏,我们已经编写了除音乐之外的所有内容,直到现在。 music.java类发布在下面。 我们在停止声音方面遇到了问题,所以我需要一种方法来停止播放这个片段,这样我们才能真正开始播放另一个片段,这样我们就可以在游戏过程中转换音乐(比如当你开始游戏时,这首歌应该是不同的从主菜单)。 有人可以帮我解决这个问题吗? 即使我可以摧毁对象来制作一个新对象,如果有可能,我愿意这样做,但我不知道如何做到这一点。 我宁愿有可能停止当前的剪辑文件,并用新的替换它。 package sound; import java.io.File; import java.io.IOException; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.Clip; import javax.sound.sampled.DataLine; import javax.sound.sampled.FloatControl; import javax.sound.sampled.LineEvent; import javax.sound.sampled.LineListener; import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.UnsupportedAudioFileException; public class Music implements LineListener, Runnable { private File soundFile; private Thread thread; private static Music player; private Music audio; private Clip clip; […]

我如何等待java声音片段完成播放?

我使用以下代码使用java声音API播放声音文件。 Clip clip = AudioSystem.getClip(); AudioInputStream inputStream = AudioSystem.getAudioInputStream(stream); clip.open(inputStream); clip.start(); 方法调用Clip.start()方法立即返回,系统在后台线程中播放声音文件。 我希望我的方法暂停,直到播放完成。 有没有好办法呢? 编辑:对于对我的最终解决方案感兴趣的每个人,根据Uri的答案,我使用下面的代码: private final BlockingQueue queue = new ArrayBlockingQueue(1); public void playSoundStream(InputStream stream) { Clip clip = AudioSystem.getClip(); AudioInputStream inputStream = AudioSystem.getAudioInputStream(stream); clip.open(inputStream); clip.start(); LineListener listener = new LineListener() { public void update(LineEvent event) { if (event.getType() != Type.STOP) { return; } […]

Wav文件在java中转换为字节数组

我的项目是“对阿塞拜疆语言的语音识别”。 我必须编写一个将wav文件转换为字节数组的程序。 如何将音频文件转换为byte []?