如何使用Codename One的Google Speech API?

我想从手机录制音频,然后将其发送到谷歌语音非流媒体API。 我可以使用Capture.captureAudio()来记录,但是我不知道什么是音频编码和采样率,因为它们是api请求所需的。 如何获取音频编码和采样率,以便我可以将它们发送给我的API请求?


如果您检查Android上的资源,它将记录在AMR-WB中

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

如果您正确设置音频格式,Google语音API将接受AMR-WB。

另一个问题是该文件在3GPP容器中记录为AMR-WB,因此您需要自定义代码才能从3GPP提取音频数据,您可以在此处找到它:

// #!AMRn
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的准确度略低,因此您可能需要考虑使用更详细的API(而非codenameone)进行原始音频捕获。

链接地址: http://www.djcxy.com/p/34455.html

上一篇: How to use Google Speech API from Codename One?

下一篇: Transcribe MP3 audio file with Bing Speech API (speech to text)