対象読者
- スマホアプリに挑戦したいと思っているWeb開発者
- アプリ開発をもっと楽にしたいと思っている方
- 業務スマホアプリを作る開発者
Mediaプラグインを使ったマイクからの音声を録音する
前回の続きでMediaプラグインを使って録音を行うサンプルで、図1のようなマイクの音声を録音するサンプルを作成します。
このサンプルで利用するAPIを表1に示します。
関数 | 説明 |
---|---|
startRecord() | 録音を開始する |
stopRecord() | 録音を停止する |
getCurrentAmplitude(callback) | 現在のマイクから取得する振幅(音の大きさ)を取得する |
これらのAPIを使ったサンプルコードがリスト1のようになります。
function RecordController($scope) { var isRec = false; var timer; // : 省略 this.mediaStatus = function (status) { if(status == Media.MEDIA_RUNNING){ if(isRec) { timer = setInterval(function () { //(1)録音時の振幅値を取得する media.getCurrentAmplitude(function (sec) { $scope.$apply(function () { $scope.current = sec; }); }); }, 200); } } else if(status == Media.MEDIA_STOPPED){ } }; var src; //(2)iOSの時のファイル名 if(device.platform == 'iOS'){ src = "record.wav"; } else { //(3)Androidの時のファイル名 ( aacもAndroidのバージョンによって使えるようです ) src = "record.amr"; } var media = new Media(src, this.mediaSuccess, this.mediaError, this.mediaStatus); $scope.current = 0; $scope.start = function () { isRec = true; //(4)録音スタート media.startRecord(); }; $scope.stop = function () { //(5)録音ストップ media.stopRecord(); }; // : ( 省略 ) };
おおよその流れは再生の時と同様です。(1)では録音時の振幅つまり、マイクが拾う音の大きさをgetCurrentAmplitude関数を使って取得します。この値が取得できるのは録音中のため、MEDIA_RUNNINGのステータスに変わったときにタイマー処理で定期的に処理をします。
そして、録音するファイルはiOSの場合には(2)のように必ずwavフォーマットになり、Androidの場合にはamrフォーマットという形式になります。拡張子もそれに併せて、必ずwavもしくはamrにします。Androidの場合にはドキュメントには明記されていないものの、aac形式も使えるようです。ただし、ドキュメントにはamrのみと記載があるので、そのように指定したほうが良いでしょう。
録音の開始は(4)のようにstartRecord関数で、停止は(5)のようにstopRecord()関数で行います。
少々、ファイル名のルールに癖があることと、具体的にパスの指定方法に記載がなく、ファイルが保存される場所がわかりにくいのですが、Androidの場合には、cordova.file.externalRootDirectoryのパスに、iOSの場合には、cordova.file.tempDirectoryに指定したファイル名で保存されるようです。