azure - 如何创建使用 azure tts 将音频发送到 Web 应用程序的 expressjs 端点?
问题描述
我试图弄清楚如何公开使用 azure tts sdk (microsoft-cognitiveservices-speech-sdk) 生成 some_word 的音频版本的快速路由(即:获取 api/word/:some_word)(以任何可播放的格式通过浏览器),并且 res.send() 是生成的音频,以便前端 javascript Web 应用程序可以使用 api 来播放单词的音频发音。
我有 azure sdk 'working' - 它在我的 expressjs 代码中创建一个'ArrayBuffer'。但是,我不知道如何将这个 ArrayBuffer 中的数据发送到前端。我一直在遵循这里的说明:https ://docs.microsoft.com/en-us/azure/cognitive-services/speech-service/get-started-text-to-speech?tabs=import%2Cwindowsinstall&pivots=programming-语言-javascript#get-result-as-an-in-memory-stream
表达我的问题的另一种方式是'明确地说,我有一个 ArrayBuffer,其内容是一个 .mp3/.ogg/.wav 文件。如何通过快递发送该文件?我是否需要将其转换为其他数据类型(如 Base64 编码字符串?缓冲区?)我是否需要设置一些特定的响应标头?
解决方案
在问了这个问题后,我终于想通了
我对这个领域很陌生,所以任何关于如何改进的指针都将不胜感激。
app.get('/api/tts/word/:word', async (req, res) => {
const word = req.params.word;
const subscriptionKey = azureKey;
const serviceRegion = 'australiaeast';
const speechConfig = sdk.SpeechConfig.fromSubscription(
subscriptionKey as string,
serviceRegion
);
speechConfig.speechSynthesisOutputFormat =
SpeechSynthesisOutputFormat.Ogg24Khz16BitMonoOpus;
const synthesizer = new sdk.SpeechSynthesizer(speechConfig);
synthesizer.speakSsmlAsync(
`
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
xmlns:mstts="https://www.w3.org/2001/mstts" xml:lang="zh-CN">
<voice name="zh-CN-XiaoxiaoNeural">
${word}
</voice>
</speak>
`,
(resp) => {
const audio = resp.audioData;
synthesizer.close();
const buffer = Buffer.from(audio);
res.set('Content-Type', 'audio/ogg; codecs=opus; rate=24000');
res.send(buffer);
}
);
});
推荐阅读
- java - XML 中的空标签导致我的解析器出现问题
- php - 运行迁移后出现 EndyJasmi\Cuid::random() 错误
- openlayers - 获取要素样式属性 - openlayers
- php - Symfony 在哪里初始化 Doctrine 的默认事务隔离级别?
- node.js - 我的 webpack 配置中的错误/缺少加载程序引用在哪里?
- .net - 无法使用 .Net SDK 从 Microsoft Graph 获取 MailboxSettings
- python - Flask - 使用 OOP 进行多用户访问
- django - 如何在 Django REST 框架中使用 RelatedField?
- jquery - 在 Ionic 3 中,Div 没有在屏幕上打开
- ionic-framework - 如何在ionic4中延迟加载模态