Запись звука с микрофона и его проигрывание с помощью J2ME MMAPI

В данной статье рассказывается, как с помощью MMAPI осуществить запись и воспроизведение звука в J2ME.

Запись звука с микрофона

Прежде всего, необходимо создать объект Player, который будет получать поток данных от микрофона.

Player player;
...
player=Manager.createPlayer(“capture://audio?encoding=amr”);
player.realize();

Здесь мы использовали строку видаcapture://audio?encoding=amr, это простейший путь получить запись с эффектом Микки Мауса на телефоне Nokia 6600. Если Вы собираетесь использовать другое оборудование, попробуйте использоватьcapture://audio или другие кодировки:

audio_encodings = audio_enc_param *( "&" audio_param )
audio_enc_param = "encoding=" audio_enc
audio_enc = "pcm" / "ulaw" / "gsm" / content_type
audio_param = "rate=" rate /
"bits=" bits /
"channels=" channels /
"endian=" endian /
"signed=" signed /
"type=" audio_type
rate = "96000" / "48000" / "44100" /
"22050" / "16000" / "11025" /
"8000" / other_rate
other_rate = pos_integer
bits = "8" / "16" / "24" / other_bits
other_bits = pos_integer
channels = pos_integer
endian = "little" / "big"
signed = "signed" / "unsigned"
audio_type = bitrate_variable / other_type
other_type = alphanumeric
pos_integer = 1*DIGIT


Напимер:


  • capture://audio?rate=8000&bits=16
  • capture://audio?encoding=pcm&signed=unsigned


    Чтобы определить какие из параметров захвата звука поддерживаются Вашим телефоном, попробуйте выполнить следующий код. К сожалению, он работает не на всех телефонах.

     String[] types= Manager.getSupportedContentTypes("capture");
    for( int i=0; i< types.length; i++)
    someStringItem.setText(errorItem.getText()+" "+types[i]);
     

    Для начла записи необходимо создать объект RecordControl. Обязательно создайте поток ByteArayOutputStream, куда будет писать входящие данные.

     RecordControl rc=(RecordControl)player.getControl("RecordControl");
    ByteArrayOutputStream output=new ByteArrayOutputStream();
     
    rc.setRecordStream(output);
    rc.startRecord();
    player.start();
     

    После начала записи необходимо указать время, которое Вы собираетесь записать. Для остановки записи можете использовать любое событие, например нажатие не клавишу, или просто дождитесь окончания времени записи. В приведенном ниже примере производится пятисекундная запись звука, после чего rc.commit() останавливает ее.

     Thread.currentThread().sleep(5000);
    rc.commit();
     

    Записанный звук можно легко сохранить в RMS. Если вы не собираетесь долго хранить эту запись, ее можно перенести в массив байт, а затем прослушать.

     byte[] recordedSoundArray= output.toByteArray();

    Воспроизведение записи

    Приведенный ниже код воспроизводит сделанную запись:

     ByteArrayInputStream recordedInputStream=new ByteArrayInputStream(recordedSoundArray);
    Player p2= Manager.createPlayer(recordedInputStream,"audio/x-wav");
    p2.prefetch();
    p2.start();
     

    Заключение

    Надо сказать, что рассмотренный метод будет работать только на устройствах, которые позволяют MMAPI осуществить захват входящего аудио или видео с оборудования телефона (с микрофона или камеры). К таким устройствам, например, относятся телефоны Nokia 6600 (Software version 4.09.1) и Siemens S65. Рабочий код можно найтиздесь.


    Recording and playing sounds with J2ME .
    Перевод:aRix.




  • Наши соцсети

    Подписаться Facebook Подписаться Вконтакте Подписаться Twitter Подписаться Google Подписаться Telegram

    Популярное

    Ссылки

    Новости [1] [2] [3]... Android/ iOS/ J2ME[1] [2] [3]) Android / Архив

    Рейтинг@Mail.ru Яндекс.Метрика
    MobiLab.ru © 2005-2018
    При использовании материалов сайта ссылка на www.mobilab.ru обязательна