T

TiAudioRecorder

Titanium MobileにはAndroid用の録音機能が実装されていないので、Twitter上で誘われたこともあって空き時間にちょちょいと作ってみました。Java初心者が引き続きなんかやってるとゆるくご笑覧ください。

TiAudioRecorder

最低限の機能しかありませんが、とりあえず録音は出来ています。ファイルは好きなところに設置できますが、フォーマットは3gpで保存します。ただ、最近のモジュール作成方法を追いかけていなかったのであんまり感じのよろしくないAPIになっています。まあ、AndroidのMediaRecorderを使用する限りはメソッドの呼び出し順が決まっているのでそこら辺の制約はJavaと一緒だからいいかと無視しています。

そうそう、Ti.Filesystem.applicationDataDirectoryに保存した音声ファイルはなぜかTi.Media.createSoundで開いて再生することができませんので、録音したデータを再生する際はご注意ください。

使い方は下の通りです:

var audio_file = Ti.Filesystem.getFile(Ti.Filesystem.externalStorageDirectory + 'test.3gp');
var tiaudiorecorder = require('org.selfkleptomaniac.ti.mod.tiaudiorecorder');
tiaudiorecorder.setPath(audio_file.nativePath);
tiaudiorecorder.prepare();

モジュールをrequireしたら、まず録音データを保存するファイルをnativePathを使ってフルパスで渡してください。それからprepareを実行すれば録音の準備が完了します。prepareを実行すると非同期でinitializedイベントが発生するので、録音を開始するときにはaddEventListenerでこのイベントをキャッチすることができます。

tiaudiorecorder.addEventListener('initialized', function(e){
  var dialog = Ti.UI.createAlertDialog({title:'Audio Recorder', message:'OK, we are ready.', buttonNames:['Start', 'Cancel']});
  dialog.addEventListener('click', function(e){
    if(e.index == 0){
      tiaudiorecorder.start();
    }else{
      tiaudiorecorder.reset();
    }
    return;
  });
  dialog.show();
  win.add(dialog);
});

イベントは他に録音開始したとき(start)、停止したとき(complete)、エラーが発生したとき(error)にfireEvnetで発火しますので、それぞれにlistenerを用意するといいでしょう。詳しくはexample/app.jsをご覧ください。

ただ、録音開始になっても冒頭が切れたりすることがあるので、Androidってそういうものだと思って工夫してください。

それから、最大録音可能時間やファイルサイズでキャップしたりそこに到達したときにcallbackを実行させたりすることも可能らしいので、時間ができたらやっておきます。またpauseも追加してみたのですが、うまく動くかよくわかりませんでした。そもそもAndroidのMediaRecorderにはpauseというメソッドはありません。

コメントを残す