2017-11-26 16 views
0

JavaFX MediaPlayer를 사용하여 mp3 파일을 재생하려고합니다. 파일을로드하고 오류없이 PLAYING 상태로 전환하지만 파일을 재생하지 않으며 currentTimeProperty도 변경되지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?JavaFX MediaPlayer가 PLAYING 상태로 전환되지만 mp3를 재생하지 않습니다.

public class Test extends Application { 

    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     MediaPlayer player = new MediaPlayer(new Media(
       new File("sounds/sound.mp3").toURI().toString() 
     )); 

     Button btn = new Button("Play"); 
     btn.setOnAction(event -> player.play()); 
     VBox pane = new VBox(10, btn); 
     pane.setAlignment(Pos.CENTER); 
     Scene scene = new Scene(pane, 100, 100); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 
} 

답변

1

코드를 시도 잊어 생각 미디어를 제대로 가져 오지 못하고 mp3 파일을로드하는 중에 MediaException: MEDIA_UNAVAILABLE이 발생하지 않으면 문제의 원인은 두 가지입니다.

  • 파일 형식이 지원되지 않습니다. supported formats에 대한 Java 문서를 보면 지원되는 mp3 형식 은 다음과 같습니다. 원시 MPEG-1, 2 및 2.5 오디오; 층 I, II 및 III; 모든 은 샘플링 주파수와 비트 전송률의 조합을 지원합니다.. 따라서 파일이 지원되지 않으면 해당 파일을 재생할 수 없습니다. 이제 은 아래 코드를 사용하여 오류가 있는지 확인할 수 있습니다. player.setOnError(() -> System.out.println("Error : " + player.getError().toString()));

  • 나는 새로운 윈도우 운영 체제와 함께 과거에 비슷한 문제가 있었다. Windows를 사용하는 경우 비디오/오디오를 재생하려면 운영 체제에 필요한 코덱이 없을 수 있습니다. 이 경우 JavaFX 응용 프로그램은 오디오를 재생하려고 시도하지만 아무 소리도들을 수 없습니다. 이 문제에 익숙하지 않은 일부 오디오 코덱을 설치하려고 할 수 있지만 K-Lite 코덱 팩 (Google 검색을 사용하면 문제가되지 않을 것입니다)을 설치하려고 할 수 있습니다.
+0

대단히 고마워요! 분명히 JavaFX MediaPlayer는 MPEG ADTS를 처리 할 수 ​​없습니다. 나는 매력처럼 작동하는 AAC 인코딩을 사용하여 파일을 m4a로 변환했습니다. – Kaes3kuch3n

0

나는 당신이 나랑은 MediaPlayer를하고 MediaView 클래스와 전문가가 아니라고하지만로드하는 가정입니다 같은 부분이 잘 작동을 제공하는이이

public static void main(String[] args) { 
    launch(args); 
} 

@Override 
public void start(Stage primaryStage) throws Exception { 
    MediaPlayer player = new MediaPlayer(new Media(
      new File("sounds/sound.mp3").toURI().toString() 
    )); 

    Button btn = new Button("Play"); 
    btn.setOnAction(event -> player.play()); 
    VBox pane = new VBox(10, btn); 
    pane.setAlignment(Pos.CENTER); 
    Scene scene = new Scene(pane, 100, 100); 

    MediaView mediaView = new MediaView(player); 
    ((Group)scene.getRoot()).getChildren().add(mediaView); 

    primaryStage.setScene(scene); 
    primaryStage.show(); 
}