【发布时间】:2021-08-03 06:02:12
【问题描述】:
我的应用程序中的一个功能是记录两个人之间的对话(最多可以是 3 个),然后使用 Google Speech To Text 版本 v1p1beta1 获取该录音中包含的语音的日记版本.
细节:录音是在客户端使用此代码完成的:
navigator.mediaDevices.getUserMedia({ audio: true, video: false})
.then(function(stream) {
userMediaStreamAOnly = stream;
})
...和...
vcAudioOnlyRecorder = new MediaRecorder(userMediaStreamAOnly, { mimeType: 'audio/webm' });
上面的代码生成了一个 Base64 编码的字符串,其媒体类型为“audio/webm”。到目前为止,一切都很好。
以下是分配给RecognitionConfig 和RecognitionAudio 的值:
joConfig = new JSONObject();
joConfig.put("encoding", AudioEncoding.ENCODING_UNSPECIFIED_VALUE);
joConfig.put("sampleRateHertz", 48000);
joConfig.put("languageCode", languageCode);
joConfig.put("enableWordTimeOffsets", true);
joConfig.put("enableAutomaticPunctuation", true);
jsonObjectDiarizationConfig = new JSONObject();
jsonObjectDiarizationConfig.put("enableSpeakerDiarization", Boolean.TRUE);
jsonObjectDiarizationConfig.put("minSpeakerCount", 2);
jsonObjectDiarizationConfig.put("maxSpeakerCount", 3);
joConfig.put("diarizationConfig", jsonObjectDiarizationConfig);
jsonObjectRecognitionMetadata = new JSONObject();
jsonObjectRecognitionMetadata.put("interactionType", InteractionType.DISCUSSION);
jsonObjectRecognitionMetadata.put("industryNaicsCodeOfAudio", 512290);
jsonObjectRecognitionMetadata.put("microphoneDistance", MicrophoneDistance.NEARFIELD_VALUE);
jsonObjectRecognitionMetadata.put("originalMediaType", OriginalMediaType.AUDIO);
jsonObjectRecognitionMetadata.put("recordingDeviceType", RecordingDeviceType.PC);
jsonObjectRecognitionMetadata.put("audioTopic", "Test");
joConfig.put("metadata", jsonObjectRecognitionMetadata);
joConfig.put("model", "default");
joConfig.put("useEnhanced", Boolean.TRUE);
joAudio = new JSONObject();
joAudio.put("content", Base64AudioContents);
joPayLoad = new JSONObject();
joPayLoad.put("config", joConfig);
joPayLoad.put("audio", joAudio);
然后我调用这个 URL:
https://speech.googleapis.com/v1/speech:longrunningrecognize?key=
触发语音到文本的过程。
我有 Base64 字符串。只是不知道如何在 stackoverflow 上分享它。
作为回报,我得到一个操作实例(在数据结构的深处)包含单词的实例。
现在问题来了:有时,words 的实例包含两个speaker 标签,即 1 和 2,并且准确地包含了各自用户所说的话。
有时,文本(对应两个说话者所说的话)只归属于一个说话者,即words的实例只包含一个speaker标签,即1。
问题 1:这是我的麦克风质量问题吗?请注意,我使用的是笔记本电脑内置的麦克风。
问题 2:我应该将无损音频传递到 URL 吗?在这种情况下,我不确定 MediaDevices 是否支持无损格式。
问题 3:这项技术目前的成熟度是否足以让这些异常现象在意料之中?
评论:我对输出中始终不一致的扬声器标签感到不安。任何帮助将不胜感激。
【问题讨论】: