在 Express 服务器中使用 Google 语音 API
Using Google Speech API in Express server
我正在尝试编写一个简单的 Web 应用程序,它使用 Google 语音 API 将音频文件转录为文本。我正确设置了 Google 语音 API 身份验证等,因此我设法 运行 Google 的节点示例。现在我想从我自己的服务器上一个名为 "audio.raw" 的本地文件调用它,该文件与以下 server.js:
位于同一目录中
const express = require("express");
const fs = require("fs");
const app = express();
app.set("port", process.env.PORT || 3001);
function syncRecognize (filename, encoding, sampleRateHertz, languageCode) {
const Speech = require('@google-cloud/speech');
const speech = Speech();
const request = {
encoding: encoding,
sampleRateHertz: sampleRateHertz,
languageCode: languageCode
};
speech.recognize(filename, request)
.then((results) => {
const transcription = results[0];
return transcription;
})
.catch((err) => {
console.error('ERROR:', err);
});
}
app.get("/api/transcribe", (req, res) => {
syncRecognize(
'./audio.raw',
'LINEAR16',
16000,
'en-US'
).then(text => {res.json(text)})
.catch((err) => {
console.error('ERROR:', err);
});
})
当我尝试这样做时,出现以下错误:
[0] TypeError: Cannot read property 'then' of undefined
[0] at /path/to/server.js:62:4 // the .then after syncRecognize(...)
...
我需要做哪些不同的事情?
编辑
好的,所以我验证了 syncRecognize 函数在某些时候确实 return 是正确的 const transcription
。问题是出于某种原因 .then 不会等待它被 returned。
我读到要使用“.then”运算符,您需要 return 一个承诺。我不确定如何执行此操作或是否有更好的选择。估计真的是我对异步知识不够了解的问题。
我们可以在函数的最后几行中看到方法调用 recognize()
确实 return 一个 Promise。您可以通过使用 f .then()
和 .catch()
轻松分辨
由于您在 app.get()
中调用此方法作为 Promise,只需 return 您方法中的 Promise:
const Speech = require('@google-cloud/speech')
const speech = Speech()
function syncRecognize (filename, encoding, sampleRateHertz, languageCode) {
const request = {
encoding,
sampleRateHertz,
languageCode,
}
return speech.recognize(filename, request)
}
我正在尝试编写一个简单的 Web 应用程序,它使用 Google 语音 API 将音频文件转录为文本。我正确设置了 Google 语音 API 身份验证等,因此我设法 运行 Google 的节点示例。现在我想从我自己的服务器上一个名为 "audio.raw" 的本地文件调用它,该文件与以下 server.js:
位于同一目录中const express = require("express");
const fs = require("fs");
const app = express();
app.set("port", process.env.PORT || 3001);
function syncRecognize (filename, encoding, sampleRateHertz, languageCode) {
const Speech = require('@google-cloud/speech');
const speech = Speech();
const request = {
encoding: encoding,
sampleRateHertz: sampleRateHertz,
languageCode: languageCode
};
speech.recognize(filename, request)
.then((results) => {
const transcription = results[0];
return transcription;
})
.catch((err) => {
console.error('ERROR:', err);
});
}
app.get("/api/transcribe", (req, res) => {
syncRecognize(
'./audio.raw',
'LINEAR16',
16000,
'en-US'
).then(text => {res.json(text)})
.catch((err) => {
console.error('ERROR:', err);
});
})
当我尝试这样做时,出现以下错误:
[0] TypeError: Cannot read property 'then' of undefined
[0] at /path/to/server.js:62:4 // the .then after syncRecognize(...)
...
我需要做哪些不同的事情?
编辑
好的,所以我验证了 syncRecognize 函数在某些时候确实 return 是正确的 const transcription
。问题是出于某种原因 .then 不会等待它被 returned。
我读到要使用“.then”运算符,您需要 return 一个承诺。我不确定如何执行此操作或是否有更好的选择。估计真的是我对异步知识不够了解的问题。
我们可以在函数的最后几行中看到方法调用 recognize()
确实 return 一个 Promise。您可以通过使用 f .then()
和 .catch()
由于您在 app.get()
中调用此方法作为 Promise,只需 return 您方法中的 Promise:
const Speech = require('@google-cloud/speech')
const speech = Speech()
function syncRecognize (filename, encoding, sampleRateHertz, languageCode) {
const request = {
encoding,
sampleRateHertz,
languageCode,
}
return speech.recognize(filename, request)
}