Пример кода аудиозаписи 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, иначе вы можете столкнуться с проблемами при сборке.
Хотя этот вопрос не является специфичным для аудио, у него есть хорошие ссылки для начинающих.