Cloud Speech-to-Text API C++客户端库语音活动检测与超时处理问题
问题:Google语音识别流式转录静音超时处理异常
场景与需求
- 触发唤醒词后,将麦克风数据流式发送至Google语音识别服务
- 核心目标:激活后若用户立即沉默,停止向服务发送静音数据,计划通过
VoiceActivityTimeout实现该逻辑
当前修改代码(基于streaming_transcribe_singlethread.cc)
private: Handler(google::cloud::CompletionQueue cq, ParseResult args) : cq_(std::move(cq)), file_(args.path, std::ios::binary) { auto& streaming_config = *request_.mutable_streaming_config(); *streaming_config.mutable_config() = std::move(args.config); // 自定义修改部分 streaming_config.set_single_utterance(true); streaming_config.set_enable_voice_activity_events(true); auto& timeout = *streaming_config.mutable_voice_activity_timeout(); auto& duration = *timeout.mutable_speech_start_timeout(); duration.set_seconds(1); // 修改结束
预期与实际结果
- 预期:测试10秒静音文件时,服务在1秒内检测到无语音活动,终止转录流程
- 实际:程序连续发送3次64k数据后,输出错误:
./streaming_transcribe_singlethread silence.wav Sending 64k bytes. Sending 64k bytes. Sending 64k bytes. Error in transcribe stream: CANCELLED: The operation was cancelled. - 调整
speech_start_timeout的秒数,结果无变化
求助点
- 不熟悉Protobuf中
VoiceActivityTimeout的工作机制与正确实现方式 - 找不到相关设置与超时处理的示例,需要指出当前代码的错误,并解释正确的配置逻辑
内容的提问来源于stack exchange,提问作者Nullarity
相关产品推荐
相关产品推荐

