Проблемы с воспроизведением звуков на BlackBerry - PullRequest
1 голос
/ 25 января 2010

У меня возникла следующая проблема при воспроизведении звуков на ежевике:

  • При первом воспроизведении звука приложение зависает на ~ 500 мс (не при создании проигрывателя, а только при фактическом воспроизведении звука)
  • Существует задержка между звонком и воспроизводимым звуком

Я тестировал на физическом устройстве в дополнение к симулятору. На симуляторе должна быть ошибка, потому что для запуска звуков требуется несколько секунд (я слышал, что это проблема с симулятором, так что ...).

Я также протестировал файлы .wav vs .mp3, и это дает примерно такой же результат.

Вот код, который я использую для загрузки плеера:

            stream = new Object().getClass().getResourceAsStream(fileName);
            result = javax.microedition.media.Manager.createPlayer(stream, fileName.endsWith(".wav")?"audio/x-wav":"audio/mpeg");
            if (prefetch) {
                result.prefetch();
            }

Затем я сохраняю ссылку на проигрыватель, которую позже использую для воспроизведения звука со следующим кодом:

            javax.microedition.media.Player player = (javax.microedition.media.Player)resources[soundId];
            if (player != null) {
                    //#debug
                    System.out.println("Player state: " + player.getState());
                    if (player.getState() != javax.microedition.media.Player.STARTED) {
                        player.setLoopCount(loopCount);
                        player.start();   
                    }
            }

Я уверен, что задержка вызвана воспроизведением звука, потому что у меня есть переключатель, чтобы выключить его, и задержки исчезают, когда я это делаю. Есть ли что-то, что я делаю не так?

Обновление

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

1 Ответ

1 голос
/ 11 ноября 2011

Нет хорошего решения проблемы, но вот как ее можно решить:

  • Создайте отдельный поток для воспроизведения звуков (это поток, который будет вызывать .start () для Players, так как это функция, которая зависает)
  • Если частота кадров в вашей игре слишком высока и, следовательно, вы используете 100% ЦП, у медиаплеера не будет достаточно времени для подготовки буфера между кадрами, поэтому для его запуска потребуется много времени. Чтобы помочь, понизьте частоту кадров.
  • На конференции разработчиков RIM продемонстрировал код для Wave Mixer, который должен решить проблему, оставив проигрыватель открытым, в то же время микшируя входящие звуковые файлы в поток. Однако они еще не выпустили код.
  • В OS 7 при высокой загрузке процессора midi-файлы портятся с частотой кадров, поэтому избегайте ее.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...