Аудиофайлы не воспроизводятся в Blackberry

Я пытаюсь воспроизвести записанный волновой файл. Во время игры выдается исключение для следующего оператора:

Player player = Manager.createPlayer(is, "audio/mpeg");

Весь мой код для воспроизведения волнового файла выглядит следующим образом:

if (types[cnt].equals("audio/x-wav")) {
    Class clazz = Class.forName("RecordAudio");
    InputStream is =  
        clazz.getResourceAsStream("file:///SDCard/BlackBerry/original.wav");
    //create an instance of the player from the InputStream
    Player player = Manager.createPlayer(is, "audio/mpeg");
    player.realize();
    player.prefetch();
    //start the player
    player.start();
} 

В чем может быть проблема?


person iOSDev    schedule 02.09.2009    source источник
comment
itsteju, было бы полезно, если бы вы дали больше информации в вопросах (версия rim os, модель bb) и отформатировали бы свой код. Благодарность!   -  person Maksym Gontar    schedule 02.09.2009
comment
Привет, Coldice, извините за плохое форматирование кода. Я использую устройство BB Pearl 8100 с операционной версией 4.5.0.81   -  person iOSDev    schedule 02.09.2009
comment
Спасибо Марку за форматирование кода ...   -  person iOSDev    schedule 04.09.2009


Ответы (2)


Функция getResourceAsStream предназначена для извлечения ресурсов из файла JAR / COD, а не из файловой системы. К тому же это проще, чем вы делаете. Просто передайте имя файла и путь к createPlayer, например:

try {
    String filename = "file:///SDCard/BlackBerry/original.wav";
    Player player = javax.microedition.media.Manager.Manager.createPlayer( filename );
} catch (IOException e) {
    System.out.println("Error creating player");
} catch (MediaException e) {
    System.out.println("Error media type");
}
person Fostah    schedule 02.09.2009
comment
Привет, я пробовал использовать приведенный выше код, исключение не возникает ... но медиаплеер не активирован. Консоль отладчика выводит что-то как: MN: getPlayableStreams0 (0) = 1 MN: getLength0 (0) = 0 MN: getPlayableStreams0 (0) = 1 MN: isSeekable0 (0) = 1 AR: добавить источник 10 AR: setAudioMode 32 MN: play0 (0) - звук, NO проверка активной паузы MN: play0 (0) = 0 MN: MEDIA_STOPPED получен MN: handle = 0 staticsHandle = 7fffffff AUDIOMANAGER: IOException MN: unload0 (0) = 2 pauseHandle = 7fffffff AR: удалить источник 10 AR: setAudioMode 32 - person iOSDev; 04.09.2009

Я считаю, что это из-за неправильного типа MIME. Попробуй это:

String fileName = "file:///SDCard/BlackBerry/original.wav";
String mimeType = "audio/x-wav";
String types[] = javax.microedition.media.Manager
        .getSupportedContentTypes(null);
for (int cnt = types.length - 1; cnt >= 0; --cnt) {
    if (types[cnt].equals(mimeType)) {
        InputStream is = null;
        FileConnection fconn = null;
        try {
            fconn = (FileConnection) Connector.open(
            fileName, Connector.READ);
        } catch (IOException e) {
            System.out.println("Error reading file");
        }
        try {
            is = fconn.openInputStream();
        } catch (IOException e) {
            System.out.println("Error opening stream");
        }
        Player player = null;
        try {
            player =                    
            javax.microedition.media.Manager.createPlayer(
            is, mimeType);
        } catch (IOException e) {
            System.out.println("Error creating player");
        } catch (MediaException e) {
            System.out.println("Error media type");
        }
        try {
            player.realize();
        } catch (MediaException e) {
            System.out.println("Player cannot be released");
        }
        try {
            player.prefetch();
        } catch (MediaException e) {
            System.out.println("Player cannot be prefetched");
        }
        // start the player
        try {
            player.start();
        } catch (MediaException e) {
            System.out.println("Player cannot be started");
        }
    }
}

Также посмотрите в консоли, какое исключение было сгенерировано.

person Maksym Gontar    schedule 02.09.2009
comment
выполнение остановлено на: InputStream is = clazz .getResourceAsStream (file: ///SDCard/BlackBerry/original.wav); - person iOSDev; 02.09.2009
comment
На консоли отладчика отображается сообщение FRIDG: не удалось найти файл: /SDCard/BlackBerry/original.wav. Но файл существует в указанном месте. Я также пробовал воспроизвести другие файлы, ни один из них не воспроизводится ... Пожалуйста, помогите. - person iOSDev; 02.09.2009
comment
обновлено согласно ответу Фоста. и не забудьте смоделировать SD Card;) - person Maksym Gontar; 02.09.2009