Как воспроизвести аудиофайл один за другим в Blackberry? - PullRequest
0 голосов
/ 28 августа 2011

Мне удалось создать приложение в Blackberry, которое воспроизводит аудиофайл, но воспроизводит только один файл. Я пытаюсь использовать цикл for для воспроизведения нескольких аудиофайлов.

Мне удалось воспроизвести его, но он не воспроизводил весь звук аудиофайлов, он просто воспроизводил первые аудиофайлы и вторые в течение нескольких секунд и прекращал воспроизведение после этого. Воспроизводимые файлы также воспроизводят звук, перекрывая друг друга, чего не должно быть.

Как воспроизвести полный звук аудио файлов один за другим в Blackberry без остановки?

Вот мой код для приложения, которое я создал с помощью цикла for:

    package mypackage;

import javax.microedition.media.Manager;
import javax.microedition.media.MediaException;
import javax.microedition.media.Player;
import java.lang.Class;
import javax.microedition.rms.RecordStore;
import java.io.InputStream;
import java.io.ByteArrayInputStream;
import net.rim.device.api.media.protocol.ByteArrayInputStreamDataSource;
import net.rim.device.api.system.*;
import net.rim.device.api.ui.*;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.extension.container.*;
import net.rim.device.api.ui.UiApplication;
import java.io.IOException;

public class PlayMedia extends UiApplication{
    /**
     * Entry point for application
     * @param args Command line arguments (not used)
     */ 
    public static void main(String[] args){

        PlayMedia theApp = new PlayMedia();
        theApp.enterEventDispatcher();
    }

    public PlayMedia()
    {

        pushScreen(new PlayMediaScreen());


    }
    /**
     * A class extending the MainScreen class, which provides default standard
     * behavior for BlackBerry GUI applications.
     */
    final class PlayMediaScreen extends MainScreen
    {
        /**
         * Creates a new PlayMediaScreen object
         */
        PlayMediaScreen()
        {
            String test1 = "Test(2seconds).mp3";
            String test2 = "Test(2seconds)2.mp3";
            String test3 = "Test(2seconds)3.mp3";
            String test4 = "Test(2seconds)4.mp3";
            String test5 = "blind_willie.mp3";
            String mp3 = null;

            for(int i=0;i<5;i++){
                if(i == 0){
                    mp3 = test1;
                }
                else if(i == 1){
                    mp3 = test2;
                }
                else if(i == 2){
                    mp3 = test3;
                }
                else if(i == 3){
                    mp3 = test4;
                }
                else if(i == 4){
                    mp3 = test5;
                }
                play(mp3);
            }
        }

        private void play(String mp3){

        Player p = null;

        InputStream stream = (InputStream)this.getClass().getResourceAsStream("/" + mp3);

            try {
                //p = Manager.createPlayer(source);
                p = Manager.createPlayer(stream, "audio/mpeg");
                p.realize();
                p.prefetch();

                //testing
                System.out.println("Creating Players!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                System.out.println("The mp3 is " + mp3 + "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();

                //testing
                System.out.println("IO Exeception!!!!!!!!!!!!!!!!1 " + e);

                //testing 
                System.out.println(p);

            } catch (MediaException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();

            //testing
            System.out.println("Media Exeception!!!!!!!!!!!!!!!!1" + e);

            //testing 
            System.out.println(p);
            }
            /*
             * Best practice is to invoke realize(), then prefetch(), then start().
             * Following this sequence reduces delays in starting media playback.
             *
             * Invoking start() as shown below will cause start() to invoke  prefetch(0),
             * which invokes realize() before media playback is started.
             */
            try {
                p.start();
            } catch (MediaException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();

                //testing
                System.out.println("Media Exeception for starting!!!!!!!!!!!!!!!!1" + e);

                //testing 
                System.out.println(p);
            }

            /*try {
                p.stop();
            } catch (MediaException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }*/
            //p.deallocate();
            //p.close();



        }
    }
} 

Ответы [ 2 ]

1 голос
/ 28 августа 2011

Мне удалось воспроизвести его, но он не воспроизводил весь звук аудиофайлов, он просто воспроизводил первые аудиофайлы и вторые в течение нескольких секунд, и после этого прекращал воспроизведение.Воспроизводимые файлы также воспроизводят звук, перекрывая друг друга, чего не должно быть.

Пожалуйста, перечитайте BB API документы для Player внимательно:

Простое воспроизведение

Игрок может быть создан изодин из методов менеджера createPlayer.После того, как Player создан, вызов start запускает воспроизведение как можно скорее.Метод вернется, когда начнется воспроизведение.Воспроизведение продолжится в фоновом режиме и остановится автоматически, когда будет достигнут конец носителя.

Простой пример воспроизведения иллюстрирует это:

try {
    Player p = Manager.createPlayer("http://abc.wav");
    p.start();
} catch (MediaException pe) {
} catch (IOException ioe) {
}

Обратите внимание, что в документах написано The method will return when the playback is started. The playback will continue in the background ..,Это причина того, что вы получаете «перекрытие звука».

Для преодоления этого вам необходимо подключить слушатель к проигрывателю Player.addPlayerListener(PlayerListener playerListener).Слушатель будет уведомлен из фонового потока «воспроизведения», когда медиа-файл будет воспроизведен до конца.И это будет подходящий момент, чтобы начать новое воспроизведение для следующего медиа-файла.Пожалуйста, не ждите от меня кода, я просто даю вам идею.

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

Наконец-то я понял, это мой код.: D

package mypackage;

import javax.microedition.media.Manager;
import javax.microedition.media.MediaException;
import javax.microedition.media.Player;
import javax.microedition.media.PlayerListener;

import java.lang.Class;
import javax.microedition.rms.RecordStore;
import java.io.InputStream;
import java.io.ByteArrayInputStream;
import net.rim.device.api.media.protocol.ByteArrayInputStreamDataSource;
import net.rim.device.api.system.*;
import net.rim.device.api.ui.*;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.extension.container.*;
import net.rim.device.api.ui.UiApplication;
import java.io.IOException;

public class PlayMedia extends UiApplication{
    /**
     * Entry point for application
     * @param args Command line arguments (not used)
     */ 
    public static void main(String[] args){

        PlayMedia theApp = new PlayMedia();
        theApp.enterEventDispatcher();
    }

    public PlayMedia()
    {

        pushScreen(new PlayMediaScreen());


    }
    /**
     * A class extending the MainScreen class, which provides default standard
     * behavior for BlackBerry GUI applications.
     */
    final class PlayMediaScreen extends MainScreen implements PlayerListener
    {
        /**
         * Creates a new PlayMediaScreen object
         */
        Player p = null;
        String mp3 = ""; 
        String test1 = "Test2seconds.mp3";
        String test5 = "Test2seconds2.mp3";
        //String test6 = "Test2seconds3.mp3";
        String test4 = "Test2seconds4.mp3";
        String test2 = "blind_willie.mp3";
        String test3 = "blind_willie2.mp3";


        PlayMediaScreen()
        {
            mp3 = test1;
            play(mp3);
        }

        private void play(String mp3){



        InputStream stream = (InputStream)this.getClass().getResourceAsStream("/" + mp3);

            try {
                //p = Manager.createPlayer(source);
                p = Manager.createPlayer(stream,"audio/mpeg");
                p.addPlayerListener(this);
                p.realize();
                p.prefetch();

                //testing
                System.out.println("Creating Players!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                System.out.println("The mp3 is " + mp3 + "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();

                //testing
                System.out.println("IO Exeception!!!!!!!!!!!!!!!!1 " + e);

                //testing 
                System.out.println(p);

            } catch (MediaException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();

            //testing
            System.out.println("Media Exeception!!!!!!!!!!!!!!!!1" + e);

            //testing 
            System.out.println(p);
            }
            /*
             * Best practice is to invoke realize(), then prefetch(), then start().
             * Following this sequence reduces delays in starting media playback.
             *
             * Invoking start() as shown below will cause start() to invoke  prefetch(0),
             * which invokes realize() before media playback is started.
             */
            try {
                p.start();
            } catch (MediaException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();

                //testing
                System.out.println("Media Exeception for starting!!!!!!!!!!!!!!!!1" + e);

                //testing 
                System.out.println(p);
            }
            /*
            try {
                p.stop();
            } catch (MediaException e) {
            // TODO Auto-generated catch block
                e.printStackTrace();
            }
            p.deallocate();
            p.close();
            */


        }

        public void playerUpdate(Player player, String event, Object eventData) {
            // TODO Auto-generated method stub
            if (event.equals(PlayerListener.END_OF_MEDIA)) {

                //String mp3 = ""; 

                if( mp3.equals(test1) ) {
                    mp3 = test2;
                    //testing
                    System.out.println("The MP3 is " + mp3 + "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");

                    play(mp3);

                    //testing
                    System.out.println("The MP3 FINISH PLAYING is " + mp3 + "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");

                }
                 else if( mp3.equals(test2) ){ 
                     mp3 = test3;
                    //testing
                    System.out.println("The MP3 is " + mp3 + "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");

                    play(mp3);

                    //testing
                    System.out.println("The MP3 FINISH PLAYING is " + mp3 + "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");

                 }
                 else if( mp3.equals(test3) ) {
                     mp3 = test4;
                     //testing
                    System.out.println("The MP3 is " + mp3 + "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");

                    play(mp3);

                    //testing
                    System.out.println("The MP3 FINISH PLAYING is " + mp3 + "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");

                 }                   
                 else if( mp3.equals(test4) ) {
                     mp3 = test5;
                    //testing
                    System.out.println("The MP3 is " + mp3 + "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");

                    play(mp3);

                    //testing
                    System.out.println("The MP3 FINISH PLAYING is " + mp3 + "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");

                 }
                 else if( mp3.equals(test5) ){
                     mp3 = null;
                     try {
                        player.stop();
                    } catch (MediaException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                     player.deallocate();
                     player.close();
                 }

              }
        }
    }
}
...