是否有将 wav 文件读入 short[] 数组的 api?我正在尝试将 wav 文件读入短数组。
我找不到任何内置的 API
我有一个工作得很好的音乐播放器,但我想添加一个播放/暂停按钮。我已经设置了按钮等,但我不知道实际暂停剪辑的代码。
这是我的代码:
try{
File f = new File("songs/mysong.wav");
Clip clip = AudioSystem.getClip();
AudioInputStream ais = AudioSystem.getAudioInputStream(f);
clip.open(ais);
playing = true;
if(MusicPlayer.pause)
{
clip.stop(); // <- Doesnt stop the song
}
clip.loop(Clip.LOOP_CONTINUOUSLY);
}catch(Exception exception){System.out.println("Failed To Play The WAV File!");}
Run Code Online (Sandbox Code Playgroud)
提前致谢!
我每次用户按下按钮时都会尝试播放.wav声音,但会抛出异常:
Exception in thread "Thread-0" java.lang.IllegalArgumentException: Invalid format
at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.createStream(PulseAudioDataLine.java:142)
at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.open(PulseAudioDataLine.java:99)
at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.open(PulseAudioDataLine.java:283)
at org.classpath.icedtea.pulseaudio.PulseAudioClip.open(PulseAudioClip.java:402)
at org.classpath.icedtea.pulseaudio.PulseAudioClip.open(PulseAudioClip.java:453)
at Uber.play(Uber.java:534)
at Uber$5.run(Uber.java:340)
at java.lang.Thread.run(Thread.java:724)
这是代码:
//Play Audio File
public void play(String file) throws LineUnavailableException, UnsupportedAudioFileException, IOException
{
AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File(file));
Clip clip = AudioSystem.getClip();
clip.open(inputStream);
clip.start();
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试做一些简单的事情。我想在给定的声音媒体上播放声音,而不是在默认媒体上播放。
这是我最后一次尝试,迭代所有媒体的思想并播放声音。只有默认设备上的媒体播放某些内容。直接播放时,即使默认设备也不工作。
public void testSoundPLayer() throws Exception {
AudioInputStream inputStream = AudioSystem.getAudioInputStream(Main.class.getResourceAsStream(Constants.SOUND_ALERT));
Mixer.Info[] mixerInfo = AudioSystem.getMixerInfo();
for(int i = 0; i < mixerInfo.length; i++)
{
Mixer.Info info = mixerInfo[i];
System.out.println(String.format("Name [%s] \n Description [%s]\n\n", info.getName(), info.getDescription()));
System.out.println(info.getDescription());
try
{
Clip clip = AudioSystem.getClip(info);
clip.open(inputStream);
clip.start();
}
catch (Throwable t)
{
System.out.println(t.toString());
}
Thread.sleep(2000L);
}
}
Run Code Online (Sandbox Code Playgroud)
我愿意使用外部库,甚至更改默认声卡。我只想要一个“不错”的方法来在给定的声卡上播放声音(wav),而不需要依赖于操作系统的方法。
我正在尝试制作一个简单的程序来检查麦克风是否静音。Line这是我用来确定哪个麦克风的代码。
private Line getMic() throws LineUnavailableException {
Mixer.Info[] mixerInfos = AudioSystem.getMixerInfo();
for (int i = 0; i < mixerInfos.length; i++) {
Mixer mixer = AudioSystem.getMixer(mixerInfos[i]);
int maxLines = mixer.getMaxLines(Port.Info.MICROPHONE);
Port lineIn = null;
if (maxLines > 0) {
lineIn = (Port) mixer.getLine(Port.Info.MICROPHONE);
return lineIn;
}
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
然后从那里我调用以下内容:
BooleanControl muteControl = (BooleanControl)mic.getControl(BooleanControl.Type.MUTE);
System.out.println(muteControl.getValue());
Run Code Online (Sandbox Code Playgroud)
但是,我收到错误:
Unsupported control type: Mute
Run Code Online (Sandbox Code Playgroud)
我继续查看Controls可以使用Line以下内容:
for(Control c : mic.getControls()){
System.out.println(c.getType());
}
Run Code Online (Sandbox Code Playgroud)
只有一个Control,那就是Master Volume. 我不确定为什么 …
我正在用Java做一个小游戏。对于这个游戏,我只是添加了声音。所以我想把我所有的图像和音频文件放在罐子里。对于图片,这很简单:
new ImageIcon(Main.class.getResource("images/machgd2.png")).getImage()
Run Code Online (Sandbox Code Playgroud)
但是对于音频,仅当我在Eclipse中运行程序时才起作用,而不能从jar中运行。我用:
File soundFile = new File(Main.class.getResource(filename).getFile());
Run Code Online (Sandbox Code Playgroud)
那么如何从.jar文件中获取此文件?
更新:
好的,感谢Andrew!为了播放声音,我使用了一个在网上找到的类,然后发现该类仅使用File来获取AudioInputStream,因此我删除了File。
我拿一首歌样本并对样本进行FFT(快速傅里叶变换).我能够得到歌曲的频率,但我无法得到这些频率出现的时间.因此,它基本上变得无用,因为我必须将它与不同的样本匹配,除非我得到它的时间信息.
我该怎么办?
java fft javasound frequency-distribution audio-fingerprinting
我的netbeans遇到了麻烦.我制作了一个只播放背景音乐的节目.当我从netbeans IDE运行该程序时,它运行音乐没有任何错误.但是当我试图运行.jar文件时,程序正常运行而没有音乐.我已经检查了一百次路径,但它不起作用.没有错误,没有错误,音乐不是从.jar文件播放的.为什么这样?
public static synchronized void playSound(final String url) {
new Thread(new Runnable() {
public void run() {
try {
Clip clip = AudioSystem.getClip();
AudioInputStream inputStream;
inputStream = AudioSystem.getAudioInputStream(
this.getClass().getResource(url));
clip.open(inputStream);
clip.start();
} catch (Exception e) {
System.err.println(e.getMessage());
}
}
}).start(); }
Run Code Online (Sandbox Code Playgroud) 我的Java项目中有两个类
篮板球
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Rebound
{
public static void main (String[] args)
{
JFrame frame = new JFrame ("Rebound");
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new ReboundPanel());
frame.pack();
frame.setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud)
第二个是ReboundPanel
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.sound.sampled.*;
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.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineEvent;
import javax.sound.sampled.LineListener;
public class ReboundPanel extends JPanel
{
private final int WIDTH = 600, HEIGHT = 300;
private …Run Code Online (Sandbox Code Playgroud) 我有几个与Sun,音频播放器和声音输入/输出相关的问题
为什么sun.audio.AudioPlayer包不是Java API的一部分?一些信息在这里:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6b14/sun/audio/AudioPlayer.java但它仍然是默认JDK构建的一部分我我正在使用.
我已经尝试过使用JMF,花了半天时间用螺丝钉绕它,但没有真正有用.我设法导入jmf.jarEclipse我尝试了一个演示脚本,它仍然吐出像无人业务一样的错误.考虑到现在放弃了?!?然而,Java提供了一个相对较新版本的链接:http://www.oracle.com/technetwork/java/javase/download-142937.html我有点担心但是如何在页面底部写下面的内容"假,,,,,,,"?
您认为什么是用于音频I/O和操作的最佳软件包?
我只是想在一个项目上工作,虽然MP3播放器是一个很好的起点,因为我可以做一点摆动.然而它似乎相当困难,因为从我所看到的Java并不是非常热衷于制作mp3和音频操作包.
java ×10
javasound ×10
audio ×5
audio-player ×1
events ×1
fft ×1
file ×1
getresource ×1
jar ×1
jmf ×1
microphone ×1
sun ×1
wav ×1