2014-04-21 15 views
7

Tôi vừa bắt đầu làm việc với JavaFX. Tôi biết cách cơ bản của nó hoạt động. Tôi đã cố gắng sử dụng các phương tiện truyền thông và các lớp mediaplayer để chơi một âm thanh, được gọi là "sound.mp3". Tôi đang lập trình trong nhật thực và tôi có tệp âm thanh trong thư mục src, cùng thư mục với "(gói mặc định)". Đây là mã của tôi:Cách phát âm thanh với JavaFX

import javafx.scene.media.*; 
import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 

public class Main extends Application{ 

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

@Override 
public void start(Stage primaryStage){ 
    primaryStage.setTitle("Hello World!"); 

    String ssound = "sound.mp3"; 
    Media sound = new Media(ssound); 
    MediaPlayer mediaPlayer = new MediaPlayer(sound); 
    mediaPlayer.play(); 

    StackPane root = new StackPane(); 
    primaryStage.setScene(new Scene(root, 800, 450)); 
    primaryStage.show(); 
} 
} 

Hãy cho tôi biết tôi đang làm gì sai.

Đây là điều thông báo lỗi từ giao diện điều khiển:

Exception in Application start method 
Exception in thread "main" java.lang.RuntimeException: Exception in Application start method 
    at com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source) 
    at com.sun.javafx.application.LauncherImpl.access$000(Unknown Source) 
    at com.sun.javafx.application.LauncherImpl$1.run(Unknown Source) 
    at java.lang.Thread.run(Thread.java:724) Caused by: java.lang.IllegalArgumentException: uri.getScheme() == null! 
    at com.sun.media.jfxmedia.locator.Locator.<init>(Unknown Source) 
    at javafx.scene.media.Media.<init>(Unknown Source) 
    at Main.start(Main.java:16) 
    at com.sun.javafx.application.LauncherImpl$5.run(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl$5.run(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl$4$1.run(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl$4$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl$4.run(Unknown Source) 
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source) 
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
    at com.sun.glass.ui.win.WinApplication.access$100(Unknown Source) 
    at com.sun.glass.ui.win.WinApplication$3$1.run(Unknown Source) ... 1 more 
+1

Dựa trên 'uri.getScheme() == null', tôi giả sử bạn cần cung cấp URI cho tệp âm thanh, thay vì chỉ một tên tệp. –

+1

"Nguồn phải đại diện cho một URI hợp lệ và không thay đổi được. Chỉ hỗ trợ các URL HTTP, FILE và JAR." http://docs.oracle.com/javafx/2/api/javafx/scene/media/Media.html#Media(java.lang.String) –

Trả lời

2

Đây là những gì tôi hiện đang sử dụng:

Media hit = new Media(new File(soundFilename).toURI().toString()); 
+0

đây không phải là câu trả lời hoàn chỉnh. Đây không phải là âm thanh. –

9

Chỉ cần một bộ sưu tập làm việc của những gì các câu trả lời khác nói:

String musicFile = "StayTheNight.mp3";  // For example 

Media sound = new Media(new File(musicFile).toURI().toString()); 
MediaPlayer mediaPlayer = new MediaPlayer(sound); 
mediaPlayer.play(); 

Thêm tệp nhạc vào thư mục Dự án của bạn, cùng với binsrc.

Bất kỳ IDE sẽ nhắc bạn thêm các cũng như:

import javafx.scene.media.Media; 
import javafx.scene.media.MediaPlayer; 
import java.io.File; 

trình như một say mê.

+0

Cảm ơn bạn! Tôi đã cố gắng sử dụng JOAL để chơi âm thanh, nhưng nó chơi một âm thanh popping khó chịu ở cuối mỗi tập tin wav, và cũng tỏ ra quá phức tạp chỉ để chơi âm thanh. Điều này giải quyết vấn đề của tôi. – AvaLanCS

3
mApplause = new AudioClip(this.getClass().getResource("/sounds/applause.mp3").toExternalForm()); 

Vì vậy, đây là những gì tôi được sử dụng và nó làm việc, tôi biết nó không lẽ vấn đề nữa nhưng vì nó có trong tìm kiếm google của tôi trong khi tôi đang tìm kiếm cái gì khác tôi nghĩ rằng tôi sẽ trả lời với nó. :)

Có nghĩa là Biểu mẫu bên ngoài nó nói để tạo thành một biểu mẫu url của tệp đường dẫn.

+1

Bạn chỉ nên sử dụng lớp AudioClip để phát các tệp âm thanh ngắn. Nó lưu trữ dữ liệu âm thanh thô, không nén cho toàn bộ âm thanh, có thể khá lớn đối với các clip âm thanh dài. Để biết thêm thông tin: https://docs.oracle.com/javafx/2/api/javafx/scene/media/AudioClip.html – ryuujin

Các vấn đề liên quan