收藏
回答

如何把微软语音合成REST API返回的 buffer 数据转成 mp3 格式存储到云空间?


const headers = {
	'Ocp-Apim-Subscription-Key': subscriptionKey,
	'Content-Type': 'application/ssml+xml',
	'Host': 'eastus.api.cognitive.microsoft.com',
	'X-Microsoft-OutputFormat': 'riff-24khz-16bit-mono-pcm',
	'User-Agent': 'banluyingyu'
};


// 设置请求体
let requestBody ='<speak version="1.0" xmlns="https://www.w3.org/2001/10/synthesis" xml:lang="en-US">
  <voice name="en-US-AriaNeural">Hello, how are you today?Hello, how are you today?Hello, how are you today?</voice>
</speak>';


let voiceRes = await uniCloud.httpclient.request(endpoint, {
			method: 'POST',
			headers: headers,
			data: requestBody
			// responseType: 'arraybuffer'
		})


		// 获取返回的音频流
		const audioStream = voiceRes.data;


请问一下 如何把这个 audioStream 保存成 mp3 文件??


//上传到云存储
		let fileRes = await uniCloud.uploadFile({
			cloudPath: '123456789.mp3',
			fileContent: audioStream
		})


我直接用 uploadFile 保存确实生成了一个mp3文件,但是不能播放。

回答关注问题邀请回答
收藏

3 个回答

  • momo
    momo
    2023-03-04

    传上去的MP3不能播放,是不是因为输出格式不对?

    'X-Microsoft-OutputFormat': 'riff-16khz-16bit-mono-pcm'把这个改成'X-Microsoft-OutputFormat': 'audio-24khz-48kbitrate-mono-mp3'试试

    2023-03-04
    有用
    回复 3
    • 杜凡
      杜凡
      2023-03-04
      https://7463-tcb-ir8idej3hb7pp64-9c3iaf2ac291-1313242477.tcb.qcloud.la/1234.mp3   生成了就是这样的,也不能播放。
      2023-03-04
      回复
    • 杜凡
      杜凡
      2023-03-04
      2023-03-04
      回复
    • 杜凡
      杜凡
      2023-03-04回复杜凡
      chatGPT 说我只是把文件格式改成了 mp3 但文件本身还是 audio-24khz-48kbitrate-mono-mp3。需要转换
      2023-03-04
      回复
  • Mr.Zhao
    Mr.Zhao
    2023-03-04

    没看懂,下载图片不也是返回buffer,转成图片会做吗

    2023-03-04
    有用
    回复 16
    • 杜凡
      杜凡
      2023-03-04
      会,直接把buffer上传就行,这次的音频不行,上传了文件在,但不能播放。
      2023-03-04
      回复
    • Mr.Zhao
      Mr.Zhao
      发表于小程序端
      2023-03-04回复杜凡

      buffer转

      2023-03-04
      回复
    • Mr.Zhao
      Mr.Zhao
      发表于小程序端
      2023-03-04回复杜凡

      buffer转base64发给我,我试试

      2023-03-04
      回复
    • 杜凡
      杜凡
      2023-03-04回复Mr.Zhao
      ZXlKaGJHY2lPaUpGVXpJMU5pSXNJbXRwWkNJNkltdGxlVEVpTENKMGVYQWlPaUpLVjFRaWZRLmV5SnlaV2RwYjI0aU9pSmxZWE4wZFhNaUxDSnpkV0p6WTNKcGNIUnBiMjR0YVdRaU9pSTNNRFF3WldNek4yVTVaV0kwWVdNMVlqQTNObVpoTmpRNFlqUTVOVGhrTVNJc0luQnliMlIxWTNRdGFXUWlPaUpUY0dWbFkyaFRaWEoyYVdObGN5NUdNQ0lzSW1OdloyNXBkR2wyWlMxelpYSjJhV05sY3kxbGJtUndiMmx1ZENJNkltaDBkSEJ6T2k4dllYQnBMbU52WjI1cGRHbDJaUzV0YVdOeWIzTnZablF1WTI5dEwybHVkR1Z5Ym1Gc0wzWXhMakF2SWl3aVlYcDFjbVV0Y21WemIzVnlZMlV0YVdRaU9pSXZjM1ZpYzJOeWFYQjBhVzl1Y3k4NU56SmpaRGt5WmkwNE5EWXdMVFJtTURrdE9UazNZUzAxWXpFeE5HTXlNMlF3WldJdmNtVnpiM1Z5WTJWSGNtOTFjSE12NVkySzZMZXY2SXV4NkstdEwzQnliM1pwWkdWeWN5OU5hV055YjNOdlpuUXVRMjluYm1sMGFYWmxVMlZ5ZG1salpYTXZZV05qYjNWdWRITXZZbUZ1YkhWNWFXNW5lWFVpTENKelkyOXdaU0k2SW5Od1pXVmphSE5sY25acFkyVnpJaXdpWVhWa0lqb2lkWEp1T20xekxuTndaV1ZqYUhObGNuWnBZMlZ6TG1WaGMzUjFjeUlzSW1WNGNDSTZNVFkzTnpreU1UQXhPQ3dpYVhOeklqb2lkWEp1T20xekxtTnZaMjVwZEdsMlpYTmxjblpwWTJWekluMC5KSF9hR2pGTHBYVlgwZHlBWVYxVDJETFJzbmVLaXdmdEN1VTFDaVZyOGpRN3N2Q291ZE05NjVYSGdzaGJkRTY3WFRjUFJwZ0U0Rk9GSkhHeEdIWDdGdw==
      2023-03-04
      回复
    • 杜凡
      杜凡
      2023-03-04
      麻烦你了
      2023-03-04
      回复
    查看更多(11)
  • 杜凡
    杜凡
    2023-03-04

    数据已经返回成功。


    const subscriptionKey = 'YOUR_SUBSCRIPTION_KEY';
    const endpoint = 'https://YOUR_REGION.tts.speech.microsoft.com/cognitiveservices/v1';
    
    
    // 设置请求头
    const headers = {
      'Authorization': 'Bearer ' + subscriptionKey,
      'Content-Type': 'application/ssml+xml',
      'X-Microsoft-OutputFormat': 'riff-16khz-16bit-mono-pcm'
    };
    
    
    // 设置请求体
    const requestBody = '<speak version="1.0" xmlns="https://www.w3.org/2001/10/synthesis" xml:lang="en-US"><voice name="en-US-AriaNeural"><prosody rate="default">Hello, how are you today?</prosody></voice></speak>';
    
    
    exports.main = async (event, context) => {
      // 发送POST请求
      const res = await uni.request({
        url: endpoint,
        method: 'POST',
        data: requestBody,
        header: headers,
        responseType: 'arraybuffer'
      });
    
    
      // 获取返回的音频流
      const audioStream = res.data;
    
    
      // 将音频流转换为音频文件并下载
      const blob = new Blob([audioStream], { type: "audio/wav" });
      const url = URL.createObjectURL(blob);
      const link = document.createElement("a");
      link.href = url;
      link.download = "speech.wav";
      link.click();
    };
    
    这个是我让 chatGPT 帮我写的,但后面的 将音频流转换为音频文件并下载 不是很明白。
    
    
    
    2023-03-04
    有用
    回复
登录 后发表内容