2016-09-11 9 views
4

私は電話からオーディオを録音し、Google音声非ストリーミングAPIに送信します。私はCapture.captureAudio()を使って録音することができますが、音声符号化とサンプルレートは何であるか分かりません。なぜなら、それらは必要なのですからfor the api requestです。 オーディオのエンコードとサンプルレートを取得して、私のAPIリクエストで送ることができますか?コードネームワンのGoogle Speech APIの使い方は?

答えて

1

あなたは、AMR-WBで、それが記録Android上sources

 recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
     recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
     recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_WB); 
     recorder.setOutputFile(temp.getAbsolutePath()); 

、Googleの音声APIをチェックする場合は、適切にset audio format場合AMR-WBを受け入れます。

もう一つの問題は、あなたがオーディオデータの形式3GPPを抽出するためのカスタムコードを必要とするので、あなたはそれをhere見つけることができ、ファイルを3GPPコンテナにAMR-WBとして記録されていることである。

// #!AMR\n 
private static byte[] AMR_MAGIC_HEADER = {0x23, 0x21, 0x41, 0x4d, 0x52, 0x0a}; 


public byte[] convert3gpDataToAmr(byte[] data) { 
    if (data == null) { 
     return null; 
    } 

    ByteArrayInputStream bis = new ByteArrayInputStream(data); 
    // read FileTypeHeader 
    FileTypeBox ftypHeader = new FileTypeBox(bis); 
    // You can check if it is correct here 
    // read MediaDataHeader 
    MediaDataBox mdatHeader = new MediaDataBox(bis); 
    // You can check if it is correct here 
    int rawAmrDataLength = mdatHeader.getDataLength(); 
    int fullAmrDataLength = AMR_MAGIC_HEADER.length + rawAmrDataLength; 
    byte[] amrData = new byte[fullAmrDataLength]; 
    System.arraycopy(AMR_MAGIC_HEADER, 0, amrData, 0, AMR_MAGIC_HEADER.length); 
    bis.read(amrData, AMR_MAGIC_HEADER.length, rawAmrDataLength); 
    return amrData; 
} 

はまた、AMR-ことに注意してくださいWBはわずかに低い精度を提供するので、codenameoneではなく、より詳細なAPIを使って生のオーディオキャプチャを検討することができます。

+0

Android以外のプラットフォームについてはどうですか?すべてのプラットフォームでネイティブインターフェイスを使用する必要がありますか? –

+0

iOSとBlackBerryもamrを記録します。私はあなたが興味を持っている他のプラットフォームが何であるか分かりません –

+1

iOS、Android、おそらく他のOSで動作するAMRをCodename One APIを使ってキャプチャすることができます:https://www.codenameone.com/javadoc/com/codename1/ media/MediaManager.html#createMediaRecorder-java.lang.String-java.lang.String- https://www.codenameone.com/javadoc/com/codename1/media/MediaManager.html#にOS対応のMIMEタイプを取得できますgetAvailableRecordingMimeTypes-- –

関連する問題