如何将音频 base64 字符串下载为 mp3 文件而不损坏它?

Posted

技术标签:

【中文标题】如何将音频 base64 字符串下载为 mp3 文件而不损坏它?【英文标题】:How to download audio base64 string as an mp3 file without corrupting it? 【发布时间】:2017-10-27 19:22:26 【问题描述】:

我有一个 10 秒的音频流,它被编码为 base64 字符串。当附加到音频标签时,它会在 html 元素中正常播放。在尝试下载它时,它会下载为(损坏的?)文件,持续时间为 0:00。

var audio = document.getElementById('audio-element');
var linkTag = document.getElementById('link-element');

linkTag.href = audio.src;
linkTag.download = 'audio-file';
linkTag.click();
<!DOCTYPE html>
<html>
  <head>
      
  </head>
  <body>
    <audio src="data:audio/mp3; codecs=opus;base64,GkXfo59ChoEBQveBAULy.............IiT5Q==" controls id="audio-element">
      Your browser does not support the audio element
    </audio>
    
    <a href="" id="link-element">Download audio</a>
  </body>
</html>

上述代码 sn-p 中的 base64 字符串无效,因为问题中不允许超过 30,000 个字符的限制。因此,我不得不修剪它。原字符串有效,播放正常,但因字数限制无法发到这里。

我想要的是从“audio/mp3”类型的 base64 编码字符串中下载准确的 mp3 文件。

如何使用纯 javascript / ES6 做到这一点?非常感谢您的见解。

【问题讨论】:

【参考方案1】:
audio/mp3; codecs=opus;

没有这样的事情。 Opus 是一种音频编解码器。 MP3 是一种音频编解码器。 “MP3 文件”只是一个原始的 MPEG 流。您不能将 Opus 放入原始 MPEG 流中。

浏览器可能对您很好,并将您实际拥有的任何数据解释为实际应该是的任何数据。其他玩家,可能没那么多。

【讨论】:

以上是关于如何将音频 base64 字符串下载为 mp3 文件而不损坏它?的主要内容,如果未能解决你的问题,请参考以下文章

如何将音频文件转为base64 编码

如何使用JS将音频文件如何转换成base64格式的

如何使用JS将音频文件如何转换成base64格式的

JavaScriptVUE前端实现微信版录制音频wav格式转化成mp3格式和Base64

如何将base64音频数据解码为wav格式

移动设备上的 HTML5 base64 编码音频