我正在学习如何在Java中播放声音,但要使用高级控件。
我发现了一个问题:javax.sound.sampled.AudioInputStream不支持Mp3文件,并且我已经耗尽了寻找如何控制平移的想法。
我设法使用javazoom.jl.player.advanced.AdvancedPlayer播放了Mp3文件,但是它没有平移控件,或者我还没有建立它。
我的实际代码将打开一个文件,如果该格式与AudioInputStream兼容,则它将仅播放正确的频道。如果格式不正确,则使用AdvancedPlayer播放。
您知道一种对mp3文件进行平移控制的方法吗?
我的代码在这里:
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.advanced.AdvancedPlayer;
import javax.sound.sampled.*;
import javax.swing.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class AudioPlayerExample2 {
private static final int BUFFER_SIZE = 4096;
public static void main(String[] args) throws IOException, LineUnavailableException, JavaLayerException {
JFileChooser fileChooser = new JFileChooser();
fileChooser.showOpenDialog(null);
new AudioPlayerExample2().play(fileChooser.getSelectedFile());
}
void play(File file) throws IOException, LineUnavailableException, JavaLayerException {
AudioInputStream audioStream;
try {
audioStream = AudioSystem.getAudioInputStream(file);
AudioFormat format = audioStream.getFormat();
System.err.println(format.toString());
DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
SourceDataLine audioLine = (SourceDataLine) AudioSystem.getLine(info);
audioLine.open(format);
audioLine.start();
FloatControl pan = (FloatControl) audioLine.getControl(FloatControl.Type.PAN);
byte[] bytesBuffer = new byte[BUFFER_SIZE];
int bytesRead = -1;
while ((bytesRead = audioStream.read(bytesBuffer)) != -1) {
pan.setValue((float) (1));
audioLine.write(bytesBuffer, 0, bytesRead);
}
Smart猫小萌
动漫人物
相关分类