как воспроизводить mp3 музыкальные файлы (более одной музыки) в Java? - PullRequest
0 голосов
/ 22 сентября 2011

Я записываю некоторый основной код Java в файл воспроизведения mp3 в формате Java. Я прошел успешно. Но я хочу воспроизводить более одного музыкального файла mp3 последовательно один за другим в Java.

это возможно? Если возможно, помогите мне.

Вот демонстрационный код,

   import java.io.BufferedInputStream;
    import java.io.FileInputStream;

    import javazoom.jl.player.Player;


    public class MP3 extends Thread{
        static int k=0;
        private String filename;
        private Player player; 

        // constructor that takes the name of an MP3 file
        public MP3(String filename) {
            this.filename = filename;
        }

        public void close() { if (player != null) player.close(); }

        // play the MP3 file to the sound card
        public synchronized void play() {
            try {
                FileInputStream fis = new FileInputStream(filename);
                BufferedInputStream bis = new BufferedInputStream(fis);
                player = new Player(bis);
            }
            catch (Exception e) {
                System.out.println("Problem playing file " + filename);
                System.out.println(e);
            }

            // run in new thread to play in background

            new Thread() {
                public void run() {
                    try { player.play();}
                    catch (Exception e) { System.out.println(e); }
                }
            }.start(); 

        }

        // test client
        public static void main(String[] args) {
            String filename = args[0];
            //StringBuffer br= new StringBuffer(filename);
            StringBuffer mp3_name = new StringBuffer();
            String arr[]=new String[3];
            String mp3temp=filename; 
            for(int i=0;i<mp3temp.length();i++) 
            {
            int count = mp3temp.indexOf(",");
            System.out.println(count);
            if(count != -1)
                 {
                    String temp = mp3temp.substring(0,count);
                    System.out.println(temp);
                    mp3_name.append(temp);
                    arr[k++] = temp;
                    mp3temp = mp3temp.substring(count+1,mp3temp.length());
                }
            if(count == -1)
                {
                    if(mp3temp.endsWith("mp3"))
                        {
                            mp3_name.append(mp3temp);
                            arr[k++] = mp3temp;
                            System.out.println(mp3temp);
                            break;
                        }

                }

            }
            StringBuffer bb=mp3_name;
            String test ="";
            String subtest ="";
            for(int s= 0;s < arr.length;s++)
            {

                System.out.println(arr[s]);

            MP3 mp3 = new MP3(arr[s]);
            mp3.play();
            System.out.println(arr[s]);

            // do whatever computation you like, while music plays
            int N = 4000;
            double sum = 0.0;
            for (int i = 0; i < N; i++) {
                for (int j = 0; j < N; j++) {
                    sum += Math.sin(i + j);
                }
            }
            System.out.println(sum);

            // when the computation is done, stop playing it
               mp3.close();

            // play from the beginning
               mp3 = new MP3(arr[s]);
             mp3.play();

            //}
            }

        }

    }

Передавайте mp3-файлы из командной строки, разделяя запятые. например: java MP3 test.mp3, a.mp3, b.mp3

Спасибо Bipin

Ответы [ 2 ]

0 голосов
/ 22 сентября 2011

Похоже на то, что Беррири сказал в своем комментарии. Вы можете изменить класс MP3, чтобы сохранить список имен файлов. Игра может затем зацикливаться на этих играх по очереди.

0 голосов
/ 22 сентября 2011

Это определенно возможно.

Если вы читаете из каталога, например, ваш C: \ Music, тогда просто прочитайте вашу программу во всех местах (я предполагаю, что вы читаете только в одном из них в данный момент).).

Затем выполните для каждого из этих файлов вызов вашего метода воспроизведения (я предполагаю, что у вас есть что-то похожее))

Вы можете зациклить этот метод или воспроизвести его в списке и т. Д. И т. Д.

Я могу уточнить, если вы опубликуете фрагмент своего кода.

РЕДАКТИРОВАТЬ: Я не знал, что вы используете аргументы командной строки, поэтому я постараюсь помочь как можно лучше,

Вы должны иметь возможность читать в каждом аргументе и выполнять его на каждом из них, пока не останется использование цикла for.

public static void main(String[] args) { 
           //declare the length of your args
           int length = args.length;

Как только это будет сделано, вы можете запустить метод play.на каждую из песен.

       //Perform your loop
       for (int i = 0; i < length; i++) {
        //Call your play method here  
       } // End Loop
        //When done you can print something
        System.out.println("All Songs have been played"); 
       }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...