मैं जावाएफएक्स एसडीके 2.0.1 का उपयोग कर जावाएफएक्स 2.0 एप्लिकेशन में लूप में पृष्ठभूमि ऑडियो चलाने की कोशिश कर रहा हूं। मैं एक MediaPlayer कोड का निम्न भाग द्वारा बनाई उपयोग करने का फैसला:JavaFX 2.0 में समानांतर में क्लीन ऑडियो लूप और एक-शॉट ध्वनियां कैसे खेलें?
MediaPlayerBuilder
.create().media(BACKGROUND_MEDIA)
.cycleCount(MediaPlayer.INDEFINITE);
यह मूलतः काम करता है, लेकिन जब एक नया चक्र शुरू होता है एक छोटे से (विलंबता?) है अंत और ऑडियो की शुरुआत के बीच की खाई। तो यह मेरे लिए एक कामकाजी विकल्प नहीं है क्योंकि यह एक साफ पाश नहीं खेल रहा है।
मैंने एक नया मीडियाप्लेयर ऑब्जेक्ट बनाने और मीडिया समाप्त होने पर प्लेबैक शुरू करने का निर्णय लिया। यह अब तक ठीक काम करता है। इसके अतिरिक्त, मैं क्लिक करते समय एक लघु ऑडियोक्लिप खेलने वाला बटन उपयोग करता हूं। मैंने पाया कि इस बटन पर लगातार और तेजी से क्लिक करने से पृष्ठभूमि ऑडियो में बाधा आती है। जब बटन एक बार क्लिक किया जाता है तो मैंने वॉल्यूम 0 के साथ ऑडियो क्लिप को अनिश्चित काल तक इस व्यवहार को पुन: उत्पन्न करने के लिए एक उदाहरण बनाया है। उदाहरण स्वयं निहित नहीं है, क्योंकि आवश्यक ऑडियो फाइलें गायब हैं। (300 मि.से एक बहुत कम क्लिक ध्वनि ~)
- click.wav: यह परियोजना के स्रोत निर्देशिका में 2 ऑडियो फ़ाइलें डालना होता है, जब मैं एक-शॉट ऑडियो ध्वनियां बजायी जाती हूं तो इन इंटरप्ट्स के बिना पृष्ठभूमि में एक साफ ऑडियो लूप कैसे खेल सकता हूं? क्या यह सिर्फ एक प्रदर्शन मुद्दा है?
उदाहरण:
package mediatest; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.media.AudioClip; import javafx.scene.media.Media; import javafx.scene.media.MediaPlayer; import javafx.scene.media.MediaPlayerBuilder; import javafx.stage.Stage; public class MediaTest extends Application { private static final AudioClip CLICK_AUDIOCLIP = new AudioClip(MediaTest.class.getResource("/click.wav").toString()); private static final Media BACKGROUND_MEDIA = new Media(MediaTest.class.getResource("/background.wav").toString()); private MediaPlayerBuilder builder; public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage primaryStage) { Group root = new Group(); Scene scene = new Scene(root, 300, 250); this.builder = MediaPlayerBuilder .create() .media(BACKGROUND_MEDIA) .onEndOfMedia(new Runnable() { public void run() { MediaPlayer player = MediaTest.this.builder.build(); player.play(); } }); MediaPlayer player = this.builder.build(); player.play(); Button btn = new Button(); btn.setText("Repeat playing short audio clip"); btn.setOnAction(new EventHandler<ActionEvent>() { public void handle(ActionEvent event) { //Simulation of many button clicks MediaTest.CLICK_AUDIOCLIP.setCycleCount(AudioClip.INDEFINITE); MediaTest.CLICK_AUDIOCLIP.play(0); } }); root.getChildren().add(btn); primaryStage.setScene(scene); primaryStage.show(); } }
पृष्ठभूमि ऑडियो के लिए 'javax.sound.sampled.SourceDataLine' का उपयोग करते समय कोई समस्या नहीं है। 'Javafx.scene.media.Media' के साथ ऑडियो प्लेबैक अलग काम करता प्रतीत होता है। – pmoule