मेरे पास एक प्रोग्राम है जो उपयोगकर्ता से पूछेगा कि वे कौन से गाने उपलब्ध गीतों की सूची से बाहर खेलना चाहते हैं और जब उपयोगकर्ता गीत समाप्त होने के बाद एक का चयन करता है तो यह उपयोगकर्ता से पूछता है कि वे कौन सा गाना फिर से खेलना चाहते हैं। मेरा सवाल यह है कि मैं लूप को उपयोगकर्ता से यह पूछने से कैसे रोकूं कि वे कौन सा गाना बजाना चाहते हैं जब तक कि चयनित गीत समाप्त न हो जाए ताकि वे दोहराए न जाएं?

public class Main {
public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    String[] pathnames;
    File MusicFileChosen;
    String musicDir;
    boolean songComplete = false;

    pathnames = ProgramMap.musicDir.list();

    // Print the names of files and directories
    for (int ListNum = 0; ListNum < pathnames.length; ListNum++) {
        System.out.println(ListNum + 1 + ". " + pathnames[ListNum]);
    }


   for (int playlistLength = 0; playlistLength < pathnames.length; playlistLength++){
        if (!songComplete) {
            System.out.println("Which Song would you like to play?");
            int musicChoice = input.nextInt();
            musicDir = ProgramMap.userDir + "\\src\\Music\\" + pathnames[musicChoice - 1];
            MusicFileChosen = new File(musicDir);
            PlaySound(MusicFileChosen, pathnames[musicChoice - 1]);

        }
    }
}
public static void PlaySound(File sound, String FileName){
    try{
        // Inits the Audio System
        Clip clip = AudioSystem.getClip();

        AudioInputStream AudioInput = AudioSystem.getAudioInputStream(sound);

        //Finds and accesses the clip
        clip.open(AudioInput);

        //Starts the clip
        clip.start();

        System.out.println("Now Playing " + FileName);

        clip.drain();


    }catch (Exception e){
        System.out.println("Error playing music");
    }
}
}
0
warherolion 26 मार्च 2020, 07:48

1 उत्तर

सबसे बढ़िया उत्तर

आप एक LineListener का उपयोग कर सकते हैं। फिर, रजिस्टर करें और LineEvent के लिए सुनें। टाइप करें। बंद करें

वैसे, आप Clip की तुलना में SourceDataLine का उपयोग करना बेहतर कर सकते हैं। हो सकता है कि कोई बड़ी बात न हो, लेकिन आपने जो कोड किया है, उसे देखते हुए, फ़ाइल के आकार के आधार पर श्रव्य अंतराल हो सकता है, हर बार जब आप एक क्लिप खोलते हैं और पूरी फ़ाइल को मेमोरी में लोड करते हैं (इसे खेलने से पहले पूरा करना होगा शुरु)। SourceDataLine लगभग तुरंत खेलना शुरू कर देगा (खेलना शुरू करने से पहले केवल एक बफर लोड करता है) और संपूर्ण ध्वनि फ़ाइल के बजाय केवल एक बफर मेमोरी का उपभोग करता है।

बहुत से लोग जो javax.sound.sampled के लिए नए हैं, SourceDataLine का उपयोग करने से सावधान हैं, लेकिन वास्तव में Clip की तुलना में कोड करना अधिक कठिन नहीं है, और आपके द्वारा दिखाए जा रहे उपयोग के लिए, यह एक बेहतर फिट होगा।

1
Phil Freihofner 26 मार्च 2020, 18:54