Node.js中将微软语音SDK返回的ArrayBuffer写入MP3或上传至S3的方法
写入本地MP3文件
- 核心是将SDK返回的
ArrayBuffer转为Node.js原生Buffer类型,直接调用Buffer.from()方法转换即可 - 再通过fs模块写入本地路径,示例代码如下:
const fs = require('fs/promises'); async function saveAsMp3(speechArrayBuffer, outputPath) { // ArrayBuffer转Node Buffer const audioBuffer = Buffer.from(speechArrayBuffer); await fs.writeFile(outputPath, audioBuffer); } // 调用示例 // saveAsMp3(你的SDK返回的ArrayBuffer, './output.mp3')
直接上传到S3存储
无需先写入本地文件,转换后的Buffer可直接作为S3上传的请求体,以AWS官方的aws-sdk v3版本为例:
- 第一步安装依赖:
npm install @aws-sdk/client-s3 - 上传示例代码如下:
const { S3Client, PutObjectCommand } = require("@aws-sdk/client-s3"); // 初始化S3客户端,替换为你自己的配置 const s3Client = new S3Client({ region: "你的S3服务区域", credentials: { accessKeyId: "你的AccessKeyId", secretAccessKey: "你的SecretAccessKey" } }); async function uploadAudioToS3(speechArrayBuffer, bucketName, s3FilePath) { const audioBuffer = Buffer.from(speechArrayBuffer); const params = { Bucket: bucketName, Key: s3FilePath, // 示例:'audio/2024/test.mp3' Body: audioBuffer, ContentType: 'audio/mpeg' // 明确指定MP3格式,避免后续播放异常 }; await s3Client.send(new PutObjectCommand(params)); } // 调用示例 // uploadAudioToS3(你的SDK返回的ArrayBuffer, '你的bucket名称', 'audio/test.mp3')
注意:请提前确认微软语音SDK的输出格式配置为MP3编码,可在
SpeechConfig实例中设置speechSynthesisOutputFormat参数为对应MP3的枚举值(比如Audio16Khz128KBitRateMonoMp3),否则生成的文件后缀为mp3但编码不匹配会无法正常播放。
内容的提问来源于stack exchange,提问作者Vikas Roy
相关产品推荐
相关产品推荐

