Играя.mp3 и.wav в Java?
Как я могу сыграть .mp3
и .wav
файл в моем приложении Java? Я использую Swing. Я попытался поискать в Интернете что-то вроде этого примера:
public void playSound() {
try {
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File("D:/MusicPlayer/fml.mp3").getAbsoluteFile());
Clip clip = AudioSystem.getClip();
clip.open(audioInputStream);
clip.start();
} catch(Exception ex) {
System.out.println("Error with playing sound.");
ex.printStackTrace();
}
}
Но это будет играть только .wav
файлы.
То же самое с:
http://www.javaworld.com/javaworld/javatips/jw-javatip24.html
Я хочу иметь возможность играть как .mp3
файлы и .wav
файлы с тем же методом.
15 ответов
Java FX имеет Media
а также MediaPlayer
классы, которые будут воспроизводить mp3 файлы.
Пример кода:
String bip = "bip.mp3";
Media hit = new Media(new File(bip).toURI().toString());
MediaPlayer mediaPlayer = new MediaPlayer(hit);
mediaPlayer.play();
Вам понадобятся следующие операторы импорта:
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
Используя стандартный API javax.sound, единственную зависимость Maven, полностью с открытым исходным кодом (требуетсяJava 7):
pom.xml
<!--
We have to explicitly instruct Maven to use tritonus-share 0.3.7-2
and NOT 0.3.7-1, otherwise vorbisspi won't work.
-->
<dependency>
<groupId>com.googlecode.soundlibs</groupId>
<artifactId>tritonus-share</artifactId>
<version>0.3.7-2</version>
</dependency>
<dependency>
<groupId>com.googlecode.soundlibs</groupId>
<artifactId>mp3spi</artifactId>
<version>1.9.5-1</version>
</dependency>
<dependency>
<groupId>com.googlecode.soundlibs</groupId>
<artifactId>vorbisspi</artifactId>
<version>1.0.3-1</version>
</dependency>
Код
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.DataLine.Info;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.UnsupportedAudioFileException;
import static javax.sound.sampled.AudioSystem.getAudioInputStream;
import static javax.sound.sampled.AudioFormat.Encoding.PCM_SIGNED;
public class AudioFilePlayer {
public static void main(String[] args) {
final AudioFilePlayer player = new AudioFilePlayer ();
player.play("something.mp3");
player.play("something.ogg");
}
public void play(String filePath) {
final File file = new File(filePath);
try (final AudioInputStream in = getAudioInputStream(file)) {
final AudioFormat outFormat = getOutFormat(in.getFormat());
final Info info = new Info(SourceDataLine.class, outFormat);
try (final SourceDataLine line =
(SourceDataLine) AudioSystem.getLine(info)) {
if (line != null) {
line.open(outFormat);
line.start();
stream(getAudioInputStream(outFormat, in), line);
line.drain();
line.stop();
}
}
} catch (UnsupportedAudioFileException
| LineUnavailableException
| IOException e) {
throw new IllegalStateException(e);
}
}
private AudioFormat getOutFormat(AudioFormat inFormat) {
final int ch = inFormat.getChannels();
final float rate = inFormat.getSampleRate();
return new AudioFormat(PCM_SIGNED, rate, 16, ch, ch * 2, rate, false);
}
private void stream(AudioInputStream in, SourceDataLine line)
throws IOException {
final byte[] buffer = new byte[4096];
for (int n = 0; n != -1; n = in.read(buffer, 0, buffer.length)) {
line.write(buffer, 0, n);
}
}
}
Рекомендации:
Вы можете играть в.wav только с Java API:
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
код:
AudioInputStream audioIn = AudioSystem.getAudioInputStream(MyClazz.class.getResource("music.wav"));
Clip clip = AudioSystem.getClip();
clip.open(audioIn);
clip.start();
И играть.mp3 с jLayer
Прошло много времени с тех пор, как я его использовал, но JavaLayer отлично подходит для воспроизведения MP3
Я бы порекомендовал использовать BasicPlayerAPI. Это открытый исходный код, очень простой и не требует JavaFX. http://www.javazoom.net/jlgui/api.html
После загрузки и распаковки zip-файла необходимо добавить следующие jar-файлы в путь сборки проекта:
- basicplayer3.0.jar
- все банки из каталога lib (внутри BasicPlayer3.0)
Вот минималистичный пример использования:
String songName = "HungryKidsofHungary-ScatteredDiamonds.mp3";
String pathToMp3 = System.getProperty("user.dir") +"/"+ songName;
BasicPlayer player = new BasicPlayer();
try {
player.open(new URL("file:///" + pathToMp3));
player.play();
} catch (BasicPlayerException | MalformedURLException e) {
e.printStackTrace();
}
Требуемый импорт:
import java.net.MalformedURLException;
import java.net.URL;
import javazoom.jlgui.basicplayer.BasicPlayer;
import javazoom.jlgui.basicplayer.BasicPlayerException;
Это все, что вам нужно, чтобы начать играть музыку. Проигрыватель запускает и управляет собственным потоком воспроизведения и предоставляет функции воспроизведения, паузы, возобновления, остановки и поиска.
Для более продвинутого использования вы можете взглянуть на jlGui Music Player. Это клон WinAmp с открытым исходным кодом: http://www.javazoom.net/jlgui/jlgui.html
Первым классом, на который стоит обратить внимание, будет PlayerUI (внутри пакета javazoom.jlgui.player.amp). Это демонстрирует расширенные возможности BasicPlayer довольно хорошо.
Чтобы предложить читателям другую альтернативу, я предлагаю библиотеку JACo MP3 Player, кроссплатформенный java mp3-плеер.
Особенности:
- очень низкая загрузка процессора (~2%)
- невероятно маленькая библиотека (~90 КБ)
- не нуждается в JMF (Java Media Framework)
- легко интегрируется в любое приложение
- легко интегрируется в любую веб-страницу (как апплет).
Для полного списка его методов и атрибутов вы можете проверить его документацию здесь.
Образец кода:
import jaco.mp3.player.MP3Player;
import java.io.File;
public class Example1 {
public static void main(String[] args) {
new MP3Player(new File("test.mp3")).play();
}
}
Для более подробной информации я создал простое руководство, которое включает в себя загружаемый исходный код.
Самый простой способ, который я нашел, - это загрузить файл jar JLayer с http://www.javazoom.net/javalayer/sources.html и добавить его в библиотеку Jar http://www.wikihow.com/Add-JARs-to-Project-Build-Paths-in-Eclipse-%28Java%29
Вот код для класса
public class SimplePlayer {
public SimplePlayer(){
try{
FileInputStream fis = new FileInputStream("File location.");
Player playMP3 = new Player(fis);
playMP3.play();
} catch(Exception e){
System.out.println(e);
}
}
}
и вот импорт
import javazoom.jl.player.*;
import java.io.FileInputStream;
Использование MP3 Decoder / player / converter Maven Dependency.
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
public class PlayAudio{
public static void main(String[] args) throws FileNotFoundException {
try {
FileInputStream fileInputStream = new FileInputStream("mp.mp3");
Player player = new Player((fileInputStream));
player.play();
System.out.println("Song is playing");
while(true){
System.out.println(player.getPosition());
}
}catch (Exception e){
System.out.println(e);
}
}
}
Сначала необходимо установить JMF ( скачать по этой ссылке)
File f = new File("D:/Songs/preview.mp3");
MediaLocator ml = new MediaLocator(f.toURL());
Player p = Manager.createPlayer(ml);
p.start();
не забудьте добавить JAR-файлы JMF
Выполните поиск в freshmeat.net для библиотеки JAVE (расшифровывается как Java Audio Video Encoder) (ссылка здесь). Это библиотека для таких вещей. Я не знаю, есть ли в Java встроенная функция mp3.
Возможно, вам понадобится обернуть функции mp3 и wav вместе, используя наследование и простую функцию-обертку, если вы хотите, чтобы один метод запускал оба типа файлов.
Ничего не получилось. но этот отлично 👌
Google и сначала загрузите библиотеку Jlayer.
import javazoom.jl.player.Player;
import java.io.FileInputStream;
public class MusicPlay {
public static void main(String[] args) {
try{
FileInputStream fs = new FileInputStream("audio_file_path.mp3");
Player player = new Player(fs);
player.play();
} catch (Exception e){
// catch exceptions.
}
}
}
Чтобы добавить поддержку чтения MP3 в Java Sound, добавьте mp3plugin.jar
JMF к пути класса приложения во время выполнения.
Обратите внимание, что Clip
Класс имеет ограничения памяти, которые делают его непригодным для более чем нескольких секунд высококачественного звука.
У меня есть другие методы для этого, первый из них:
public static void playAudio(String filePath){
try{
InputStream mus = new FileInputStream(new File(filePath));
AudioStream aud = new AudioStream(mus);
}catch(Exception e){
JOptionPane.showMessageDialig(null, "You have an Error");
}
А второй:
try{
JFXPanel x = JFXPanel();
String u = new File("021.mp3").toURI().toString();
new MediaPlayer(new Media(u)).play();
} catch(Exception e){
JOPtionPane.showMessageDialog(null, e);
}
И если мы хотим сделать цикл для этого аудио, мы используем этот метод.
try{
AudioData d = new AudioStream(new FileInputStream(filePath)).getData();
ContinuousAudioDataStream s = new ContinuousAudioDataStream(d);
AudioPlayer.player.start(s);
} catch(Exception ex){
JOPtionPane.showMessageDialog(null, ex);
}
если мы хотим остановить этот цикл, мы добавляем эти библиотеки в попытку:
AudioPlayer.player.stop(s);
для этого третьего метода мы добавляем следующий импорт:
import java.io.FileInputStream;
import sun.audio.AudioData;
import sun.audio.AudioStream;
import sun.audio.ContinuousAudioDataStream;
Используйте эту библиотеку: import sun.audio.*;
public void Sound(String Path){
try{
InputStream in = new FileInputStream(new File(Path));
AudioStream audios = new AudioStream(in);
AudioPlayer.player.start(audios);
}
catch(Exception e){}
}