e-mos / syabikuri

1 stars 0 forks source link

録音する方法を技術調査する。 #1

Closed tigawa closed 10 years ago

tigawa commented 10 years ago

IOSは対応してなさそう。 :-1: Androidのchromeなら対応してそう!! http://www.gcgate.jp/engineerblog/2014/03/28/874/

tigawa commented 10 years ago

iOSを対応するためには、monacaからphone Gapを使うしかなさそう http://ascii.jp/elem/000/000/640/640963/index-2.html

tigawa commented 10 years ago

monacaのドキュメントを元に実装するがエラーになる。 http://docs.monaca.mobi/1.0/ja/reference/phonegap_29/ja/media/media/#media-startrecord-ja

エラーになる箇所 ★の箇所でonErrorが呼び出されてエラーになる。

// オーディオの録音
//
function recordAudio() {
     var src = "myrecording.amr";
★     var mediaRec = new Media(src, onSuccess, onError);

原因を調査中
tigawa commented 10 years ago

問題解決!! 【原因】 録音を保存するファイルを、Adaptive Multi-Rate フォーマット(.amr)にしていたが、iosではwav形式にする必要があった。i osは録音については、wav形式しかサポートしていない。 【対応】 wav形式に変更する。 但し、androidでは、.amr形式である必要があるため、処理を切替える必要がある。

ドキュメントの注意事項にきちんと書いてあった、ドキュメントは最後まで読まないとだめね。

tigawa commented 10 years ago

サンプルソース 起動して10秒録音した後に、再生する。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">

    <title>デバイスプロパティーの使用例</title>
<script src="plugins/plugin-loader.js"></script>
    <link rel="stylesheet" href="plugins/plugin-loader.css">
    <link rel="stylesheet" href="css/style.css">

    <script type="text/javascript" charset="utf-8">

    // Cordova の読み込み完了まで待機
    //
    document.addEventListener("deviceready", onDeviceReady, false);

    // オーディオの録音
    //
    function recordAudio() {
        var src = "myrecording.wav";
        var mediaRec = new Media(src, onSuccess, onError);
        // オーディオの録音
        mediaRec.startRecord();
        // 10秒後に録音を停止
        var recTime = 0;
        var recInterval = setInterval(function() {
            recTime = recTime + 1;
            setAudioPosition(recTime + " sec");
            if (recTime >= 10) {
                clearInterval(recInterval);
                mediaRec.stopRecord();
                mediaRec.play();
            }
        }, 1000);
    }

    // Cordova 準備完了
    //
    function onDeviceReady() {
        recordAudio();
    }

    // 成功時のコールバック関数
    //
    function onSuccess() {
        console.log("recordAudio():Audio Success");
    }

    // エラー時のコールバック関数
    //
    function onError(error) {
        alert('コード: '        + error.code    + '\n' +
              'メッセージ: '    + error.message + '\n');
    }

    // 再生位置をセット
    //
    function setAudioPosition(position) {
        document.getElementById('audio_position').innerHTML = position;
    }

    </script>
  </head>
  <body>
    <p id="media">オーディオを録音...</p>
    <p id="audio_position"></p>
  </body>
</html>