Google cloud functions 如何将音频文件从Firebase存储发送到Google语音到文本?

Google cloud functions 如何将音频文件从Firebase存储发送到Google语音到文本?,google-cloud-functions,firebase-storage,google-cloud-speech,Google Cloud Functions,Firebase Storage,Google Cloud Speech,我正在尝试使用Firebase云函数将一个小音频文件(几秒钟)从Firebase存储发送到Google云语音到文本。用户建议对小音频文件使用此同步代码: //导入Google云客户端库 const speech=require(“@googlecloud/speech”); //创建一个客户端 const client=new speech.SpeechClient(); /** *TODO(开发人员):在运行示例之前取消注释以下行。 */ //const gcsUri='gs://my buc

我正在尝试使用Firebase云函数将一个小音频文件(几秒钟)从Firebase存储发送到Google云语音到文本。用户建议对小音频文件使用此同步代码:

//导入Google云客户端库
const speech=require(“@googlecloud/speech”);
//创建一个客户端
const client=new speech.SpeechClient();
/**
*TODO(开发人员):在运行示例之前取消注释以下行。
*/
//const gcsUri='gs://my bucket/audio.raw';
//常量编码='音频文件的编码,例如LINEAR16';
//恒采样频率=16000赫兹;
//常量语言代码='BCP-47语言代码,例如en-US';
常量配置={
编码:编码,
sampleRateHertz:sampleRateHertz,
languageCode:languageCode,
};
常量音频={
uri:gcsUri,
};
常量请求={
config:config,
音频:音频,
};
//检测音频文件中的语音
const[response]=等待客户端识别(请求);
常量转录=响应。结果
.map(result=>result.alternations[0]。转录本)
.join('\n');
log(`Transcription:`,Transcription);
该代码没有运行,因为它有
wait
而没有
async

这段代码的另一个问题是它不能捕获错误。修复这些问题,并加入Firebase云函数触发器,我有以下代码:

exports.Google\u Speech\u to\u Text=functions.firestore.document('Users/{userID}/发音测试/下载URL').onUpdate((更改,上下文)=>{
返回异步函数syncRecognizeGCS(){
//[开始语音\u转录\u同步\u gcs]
//导入Google云客户端库
const speech=require(“@googlecloud/speech”);
//创建一个客户端
const client=new speech.SpeechClient();
const gcsUri='gs://my app.appspot.com/my file';
常量编码='Opus';
恒采样频率=48000赫兹;
常量语言代码='en US';
常量配置={
编码:编码,
sampleRateHertz:sampleRateHertz,
languageCode:languageCode,
};
常量音频={
uri:gcsUri,
};
常量请求={
config:config,
音频:音频,
};
//检测音频文件中的语音
const[response]=等待客户端识别(请求)
.catch((err)=>{console.error(err);});
常量转录=响应。结果
.map(result=>result.alternations[0]。转录本)
.join('\n');
log(`Transcription:`,Transcription);
//[结束讲话\u转录\u同步\u gcs]
}
}); // 关闭谷歌语音到文本
该函数执行,返回
ok
,而不返回其他内容:

没有错误消息。我没有发现存储中的文件有任何问题:

我尝试了一个不同的文件,这次是一个
mp3
。结果相同,但函数执行时间为17ms,因为文件较小

我很难计算出
mediaDevices.getUserMedia()
在Chrome中使用的音频编码和采样赫兹频率。这意味着音频编码是Opus,采样率是48000。有时我会遇到一个错误
INVALID_参数:无效的识别'config':错误的编码。
您的音频数据可能没有正确编码,或者编码的编解码器与您在识别配置中声明的编解码器不同。
可以将
编码
采样赫兹
保留为空并使用谷歌搜索从语音到文本的转换能解决这个问题吗


有什么不对的建议吗?

问题是谷歌提供的代码没有捕捉到错误。当我重构代码以使用承诺而不是
wait
时,我收到了一条错误消息

exports.Google\u Speech\u to\u Text=functions.firestore.document('Users/{userID}/发音测试/下载URL').onUpdate((更改,上下文)=>{
//导入Google云客户端库
const speech=require(“@googlecloud/speech”);
//创建一个客户端
const client=new speech.SpeechClient();
const gcsUri='gs://my app.appspot.com/my file';
常量编码='Opus';
恒采样频率=48000赫兹;
常量语言代码='en US';
常量配置={
编码:编码,
sampleRateHertz:sampleRateHertz,
languageCode:languageCode,
};
常量音频={
uri:gcsUri,
};
常量请求={
config:config,
音频:音频,
};
//检测音频文件中的语音
返回响应=client.recognize(请求)
.然后(功能(响应){
控制台日志(响应);
})
.catch((err)=>{console.error(err);});
});
错误是
无效\u参数:无效识别“配置”:编码错误..
换句话说,音频编码器不是
Opus

删除行
const encoding='Opus'导致错误消息
未定义编码

使用
const编码=“”导致错误消息
无效参数:无效识别“配置”:编码错误..

我需要弄清楚Chrome现在使用什么音频编码器。很遗憾,谷歌演讲无法解决这个问题