如果我使用 Android MediaRecorder 记录我的文件,我可以像这样设置它的属性:
this.recorder.SetAudioSource(AudioSource.Mic);
this.recorder.SetOutputFormat(OutputFormat.AmrWb);
this.recorder.SetAudioEncoder(AudioEncoder.AmrWb);
this.recorder.SetAudioSamplingRate(16000);
它生成一个3gpp -File。如果我将录制的文件发送到 Google Cloud Speech API,音频会被识别并转换为文本:
var response = speech.SyncRecognize(new RecognitionConfig()
{
Encoding = RecognitionConfig.Types.AudioEncoding.AmrWb,
SampleRate = 16000,
LanguageCode ="de-DE"
}, RecognitionAudio.FromFile("test.3gpp"));
但是,如果我将 OutputFormat 更改为
this.recorder.SetOutputFormat(OutputFormat.ThreeGpp);
它还会生成一个 .3gpp 文件,但 Google Cloud API 会引发错误。这很奇怪,因为我认为 OutputFormat 无关紧要,只是定义了在两种情况下都是 AMR 编码的编码数据的容器。所以我的问题是:
AMR 和 ThreeGpp OutputFormat 之间到底有什么区别?