Пример кода аудиозаписи Blackberry - PullRequest
3 голосов
/ 28 мая 2009

Кто-нибудь знает хороший репозиторий для получения примера кода для BlackBerry? В частности, сэмплы, которые помогут мне изучить механику записи звука, возможно, даже сэмплировать его и выполнить некоторые обработки сигнала на лету?

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

Ответы [ 3 ]

11 голосов
/ 08 июня 2009

RIM API содержит JSR 135 Java Mobile Media API для обработки аудио и видео контента.
Вы исправляете беспорядок в Базе знаний BB. Единственный способ - просмотреть его, надеясь, что они больше не будут менять карту сайта.
Это Разработчики-> Ресурсы -> База знаний -> Java API и примеры -> Аудио и видео

Запись звука

В принципе, записать аудио просто:

  • создать плеер с правильной кодировкой звука
  • получить RecordControl
  • начать запись
  • остановить запись

Ссылки:
RIM 4.6.0 API ref: Пакет javax.microedition.media
How To - Запись звука на смартфоне BlackBerry
How To - Воспроизведение аудио в приложении
How To - Поддержка потокового аудио в мультимедийном приложении
How To - Указать маршрутизацию аудио пути
How To - Получить время воспроизведения мультимедиа из мультимедийного приложения
Что такое - Поддерживаемые аудиоформаты
What Is - Коды ошибок приложения мультимедиа

Образец аудиозаписи

Объявлен поток с Player, RecordControl и ресурсами:

final class VoiceNotesRecorderThread extends Thread{
   private Player _player;
   private RecordControl _rcontrol;
   private ByteArrayOutputStream _output;
   private byte _data[];

   VoiceNotesRecorderThread() {}

   private int getSize(){
       return (_output != null ? _output.size() : 0);
   }

   private byte[] getVoiceNote(){
      return _data;
   }
}

На Thread.run () начинается аудиозапись:

   public void run() {
      try {
          // Create a Player that captures live audio.
          _player = Manager.createPlayer("capture://audio");
          _player.realize();    
          // Get the RecordControl, set the record stream,
          _rcontrol = (RecordControl)_player.getControl("RecordControl");    
          //Create a ByteArrayOutputStream to capture the audio stream.
          _output = new ByteArrayOutputStream();
          _rcontrol.setRecordStream(_output);
          _rcontrol.startRecord();
          _player.start();    
      } catch (final Exception e) {
         UiApplication.getUiApplication().invokeAndWait(new Runnable() {
            public void run() {
               Dialog.inform(e.toString());
            }
         });
      }
   }

А на thread.stop () запись остановлена:

   public void stop() {
      try {
           //Stop recording, capture data from the OutputStream,
           //close the OutputStream and player.
           _rcontrol.commit();
           _data = _output.toByteArray();
           _output.close();
           _player.close();    
      } catch (Exception e) {
         synchronized (UiApplication.getEventLock()) {
            Dialog.inform(e.toString());
         }
      }
   }

Обработка и выборка аудиопотока

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

Говоря о обработке на лету, это будет более сложным. Вам нужно будет прочитать выходной поток во время записи без фиксации записи. Таким образом, будет решено несколько проблем:

  • синхронизация доступа к выходному потоку для рекордера и сэмплера - проблема с потоками
  • прочитайте правильный объем аудиоданных - углубитесь в декодирование аудиоформатов, чтобы узнать правила разметки

Также может быть полезно:
java.net: эксперименты по потоковому контенту в Java ME, Викрам Гоял

0 голосов
/ 10 декабря 2009

Я провел целую вечность, пытаясь понять это тоже. После того как вы установили пакеты компонентов BlackBerry (доступны на их веб-сайте ), вы можете найти образец кода внутри пакета компонентов.

В моем случае, после того, как я установил пакеты компонентов в Eclipse, я нашел извлеченный пример кода в этом месте:

C: \ Program Файлы \ Затмение \ eclipse3.4 \ Plugins \ net.rim.eide.componentpack4.5.0_4.5.0.16 \ Components \ образцов

К сожалению, когда я импортировал весь этот пример кода, у меня была куча ошибок компиляции. Чтобы обойти это, я просто удалил 20% пакетов с ошибками компиляции.

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

Другие ошибки:
-Правой кнопкой мыши щелкните проект в Eclipse и выберите «Активировать для BlackBerry
». -Выберите BlackBerry -> Build Configurations ... -> Edit ... и выберите ваш новый проект для сборки.
-Убедитесь, что вы поместили исходный код BlackBerry в папку «src» в проекте Eclipse, иначе вы можете столкнуться с проблемами при сборке.

0 голосов
/ 28 мая 2009

Хотя этот вопрос не относится к аудио, у него есть несколько хороших ссылок для начала работы.

Написание приложений Blackberry

...