JavaFX支援以下的音訊與影像編碼:
- AAC:進階音訊編碼 (Advanced Audio Coding)。
- MP3:MPEG-1、MPEG-2、MPEG-2.5與Layer-1、Layer-2與Layer-3音訊。
- PCM:非壓縮音訊資料格式。
- H.264/AVC:H.264、MPEG-4 Part 10、AVC (Advanced Video Coding) 影像。
- VP6:TrueMotion VP6是由On2 Technologies所推出的影像壓縮編碼器,目前廣泛應用於Adobe Flash影像。
- Audio Interchange File Format (*.aif, *.aiff)
- Microsoft Windows Waveform Audio (*.wav)
- MPEG Layer-3 Audio (*.mp3)
- Flash Video (*.flv)
- FX Media (*.fxm)
- MP2T HTTP Live Streaming (*.m3u8)
- MP3 HTTP Live Streaming (*.m3u8)
- MPEG-4 Video (*.mp4, *.m4a, *.m4v)
- javafx.scene.media.AudioClip
- javafx.scene.media.Media
- javafx.scene.media.MediaPlayer
- javafx.scene.media.MediaView
- javafx.scene.media.AudioEqualizer
- javafx.scene.media.EqualizerBand
- javafx.scene.media.MediaErrorEvent
- javafx.scene.media.MediaMarkerEvent
AudioClip類別定義以下的屬性值:
- balance:音量平衡,範圍由-1.0至1.0,-1.0代表完全左音量、0.0代表左右平衡、1.0代表完全右音量。
- cycleCount:重覆播放次數,若為AudioClip.INDEFINITE,將一直重覆播放至執行stop()方法為止。
- pan:音量平移,範圍由-1.0至1.0,-1.0代表完全左聲道、0.0代表正常聲道、1.0代表完全右聲道。
- priority:音訊的優先順序。
- rate:播放速率,範圍由0.125至8.0,0.125代表1/8倍播放速率、1.0代表正常播放速率、8.0代表8倍播放速率。
- volume:音量大小,範圍由0.0至1.0,0.0代表靜音、1.0代表最大音量。
AudioClip類別的建構函式如下,其中參數source設定音訊來源,可為URL或本機檔案:
public AudioClip(String source)
AudioClip類別的方法包括:
- play():播放音訊。
- isPlaying():判斷是否正在播放音訊中。
- stop():停止播放音訊。
- getBalance():取得音量平衡,範圍由-1.0至1.0,-1.0代表完全左音量、0.0代表左右平衡、1.0代表完全右音量。
- setBalance():設定音量平衡。
- getCycleCount():取得重覆播放次數。
- setCycleCount():設定重覆播放次數,若設定為AudioClip.INDEFINITE,將一直重覆播放至執行stop()方法為止。
- getPan():取得音量平移,範圍由-1.0至1.0,-1.0代表完全左聲道、0.0代表正常聲道、1.0代表完全右聲道。
- setPan():設定音量平移。
- getPriority():取得音訊的優先順序。
- setPriority():設定音訊的優先順序。
- getRate():取得播放速率,範圍由0.125至8.0,0.125代表1/8倍播放速率、1.0代表正常播放速率、8.0代表8倍播放速率。
- setRate():設定播放速率。
- getVolume():取得音量大小,範圍由0.0至1.0,0.0代表靜音、1.0代表最大音量。
- setVolume():設定音量大小。
請參考以下範例,示範以滑動軸與核取方塊設定音量平衡、重覆播放次數、音量平移、播放速率與音量大小。當移動滑動軸時,則以滑動軸目前的值分別設定上述屬性。當點選核取方塊時,則設定重覆播放次數為AudioClip.INDEFINITE,代表無限次數:
CheckBox checkbox; Slider slider1, slider2, slider3, slider4, slider5; ... // 設定音量平衡 slider1 = new Slider(); slider1.setOrientation(Orientation.HORIZONTAL); slider1.setMin(-1.0); slider1.setMax(1.0); slider1.setValue(audioclip.getBalance()); slider1.setPrefSize(100, 25); slider1.valueProperty().addListener(new ChangeListener<Number>() { @Override public void changed( ObservableValue<? extends Number> observable, Number oldValue, Number newValue) { // 設定音量平衡 audioclip.setBalance(slider1.getValue()); lblValue1.setText(new DecimalFormat("0.0").format( slider1.getValue())); } }); // 設定重覆播放次數 slider2 = new Slider(); slider2.setOrientation(Orientation.HORIZONTAL); slider2.setMin(1); slider2.setMax(10); slider2.setValue(audioclip.getCycleCount()); slider2.setPrefSize(100, 25); slider2.valueProperty().addListener(new ChangeListener<Number>() { @Override public void changed( ObservableValue<? extends Number> observable, Number oldValue, Number newValue) { // 設定重覆播放次數 audioclip.setCycleCount((int)slider2.getValue()); lblValue2.setText(new DecimalFormat("0").format( slider2.getValue())); } }); checkbox = new CheckBox("Indefinite"); checkbox.selectedProperty().addListener(new ChangeListener<Boolean>() { @Override public void changed( ObservableValue observable, Boolean oldValue, Boolean newValue) { // 設定重覆播放次數 audioclip.setCycleCount( newValue? AudioClip.INDEFINITE : (int)slider2.getValue()); slider2.setDisable(newValue); lblValue2.setDisable(newValue); } }); |
須注意的是AudioClip類別的設定方法,其設定值並不會影響正在播放中的音訊,只有在下一次執行play()方法播放音訊時方會生效。
由以上範例可以瞭解,AudioClip類別的主要功能僅在於播放與停止播放音訊,並無法處理暫停播放、音訊時間長度、後設資料、等化器、事件等功能。
【執行結果】
除了AudioClip類別之外,亦可使用AudioClipBuilder類別處理音訊,請參考以下範例。
【程式說明】
範例示範以AudioClipBuilder類別處理音訊,首先以create()方法建立AudioClipBuilder的實體,最後再以build()方法以AudioClipBuilder物件建立AudioClip物件,其間並以上述方法設定音訊的相關屬性,各方法可為任意順序或省略:
AudioClip audioclip = null; URL source = getClass().getResource("audio/Windows.wav"); audioclip = AudioClipBuilder.create() .source(source.toString()) .balance(0.0) .cycleCount(1) .pan(0.0) .rate(1.0) .volume(1.0) .build(); |
【參考資料】
[1] 黃嘉輝,深入研究JavaFX 2。
[2] 黃嘉輝,深入研究Java Swing。
[3] Java Official Web Site:http://www.oracle.com/technetwork/java/index.html
[4] JavaFX:http://www.oracle.com/technetwork/java/javafx
[5] JavaFX 2.2 API Specification.
[6] Java Platform, Standard Edition 7 API Specification.
© Chia-Hui Huang
沒有留言:
張貼留言