Воспроизведение .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
с тем же методом.
Ответы
Ответ 1
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 java.io.File;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
Ответ 2
Я написал чистый java mp3-плеер: mp3transform.
Ответ 3
вы можете играть .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
Ответ 4
Прошло некоторое время с тех пор, как я использовал его, но JavaLayer отлично подходит для воспроизведения MP3
Ответ 5
Использование стандартного javax.sound API, единственной зависимости 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);
}
}
}
Ссылки:
Ответ 6
Я бы рекомендовал использовать 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. Это клон WinAmp с открытым исходным кодом: http://www.javazoom.net/jlgui/jlgui.html
Первый класс, на который нужно смотреть, будет PlayerUI (внутри пакета javazoom.jlgui.player.amp).
Он очень хорошо демонстрирует расширенные функции BasicPlayer.
Ответ 7
Самый простой способ, который я нашел, - загрузить 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;
Ответ 8
Чтобы дать читателям еще одну альтернативу, я предлагаю библиотеку JACo MP3 Player, кросс-платформенный java mp3-плеер.
Особенности:
- очень низкая загрузка процессора (~ 2%)
- невероятная небольшая библиотека (~ 90KB)
- не требуется 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();
}
}
Для более подробной информации я создал простой учебник здесь, который включает загружаемый исходный код.
Ответ 9
Вам нужно сначала установить JMF (скачать с помощью этой ссылки)
File f = new File("D:/Songs/preview.mp3");
MediaLocator ml = new MediaLocator(f.toURL());
Player p = Manager.createPlayer(ml);
p.start();
не забудьте добавить JMF файлы jar
Ответ 10
Сделайте поиск freshmeat.net для JAVE (означает Java Audio Video Encoder) (ссылка здесь). Это библиотека для подобных вещей. Я не знаю, есть ли у Java встроенная mp3-функция.
Вам, вероятно, понадобится объединить функцию mp3 и функцию wav вместе, используя наследование и простую функцию обертки, если вы хотите, чтобы один из методов запускал оба типа файлов.
Ответ 11
Использование MP3-декодера/проигрывателя/конвертера 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);
}
}
}
Ответ 12
Чтобы добавить поддержку чтения MP3 в Java Sound, добавьте mp3plugin.jar
JMF к пути класса выполнения приложения.
Обратите внимание, что класс Clip
имеет ограничения памяти, которые делают его непригодным для более чем нескольких секунд высококачественного звука.
Ответ 13
Используйте эту библиотеку: 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){}
}