Google cloud functions 如何将音频文件从Firebase存储发送到Google语音到文本?
我正在尝试使用Firebase云函数将一个小音频文件(几秒钟)从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
//导入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现在使用什么音频编码器。很遗憾,谷歌演讲无法解决这个问题