Пример кода аудиозаписи Blackberry

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

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

3 ответа

Решение

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

Аудио запись

В основном это просто для записи аудио:

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

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

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

Поток с 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, Викрам Гоял

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

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

C: \ Program Files \ Eclipse \ eclipse3.4 \ plugins \ net.rim.eide.componentpack4.5.0_4.5.0.16 \ components \ samples

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

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

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

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

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

Другие вопросы по тегам