【问题标题】:Saving sounds played in sequence as one audio file将按顺序播放的声音保存为一个音频文件
【发布时间】:2015-12-28 23:04:08
【问题描述】:

假设我创建了一个程序,可以播放一个接一个的声音。是否有可能在不使用 3rd 方库的情况下以某种方式将声音导出为 wav 或 mp3?

我正在尝试构建一个小音序器,但在此之前,我需要知道这是否可行。

我已经做了研究,发现了很多第三方库,最著名的似乎是 recorder.js。为了学习,我更喜欢使用纯api。

【问题讨论】:

标签: javascript html5-audio web-audio-api


【解决方案1】:

你可以使用MediaRecorder API,不幸的是is not widely supported yet..,但它不需要任何外部库。

// creates a simple oscillator, connected to a mediaStream
var ctx = new AudioContext();
var stream = ctx.createMediaStreamDestination();

var osc = ctx.createOscillator();
osc.connect(stream);
osc.type = 'square';
osc.frequency.value = 200;
osc.start();

// pass the stream of our stream destination Node
var rec = new MediaRecorder(stream.stream);
// once it's finished recording
rec.ondataavailable = function(e) {
  var audioURL = window.URL.createObjectURL(e.data);
  audio.src = audioURL;
  audio.play();
};
// start the recorder
rec.start()

btn.onclick = function(){rec.stop();};
<button id="btn"> stop the recording </button>
<audio id="audio" controls></audio>

【讨论】:

  • 由于chrome目前只支持视频录制,所以这个例子只适用于最新的FF。
  • 超级有趣!虽然,正如你所说,支持是一个问题,而且规范似乎只有几个月的历史(?)并且在早期的编辑草稿中,所以在其他浏览器中实现之前它似乎会发生变化......跨度>
  • 是的,它是相当新的,可能会发生变化,但确实很有前途,并且完全符合您的要求 :-) 但是今天,请坚持使用库。
【解决方案2】:

是的,这是可能的。虽然不是原生在 API 中,但您必须根据从 Web 音频中提取的数据自己对文件进行编码。

因此,基本上,如果您不想使用外部依赖项,则必须实现自己的 recorder.js 版本。弄清楚如何的最好方法可能是查看 recorder.js 源代码。很清晰!

【讨论】:

    【解决方案3】:

    这些可以通过 HTML 5 用户媒体 API 来完成。 Here is a intro from Eric Bidelman.

    由于此问题与您的代码中的特定问题无关,因此其范围太广而无法回答。因此,我在 github 上包含了一些项目的链接,我认为这些项目易于理解并使用标准 API 而不是 flash。应该为您指明正确的方向。

    1. julianburr/js-audiorecorder
    2. minervaproject/user-media-recorder

    【讨论】:

    • 它说我只能在22小时内奖励它:(
    • 你可能会得到更好的答案。 :) 让我们看看。
    • 不幸的是,这个答案是不正确的。 getUserMedia 仅用于访问用户麦克风和摄像头,不生成输出文件。这两个示例都以这种方式使用 getUserMedia,但随后使用手写 JavaScript 对文件进行编码 - 没有原生 API。
    • 它仍然是 JavaScript 正确的。据我了解,recorder.js 使用 flash,所以我只是尝试建议一些没有 flash 的东西。我只浏览了源代码,所以我可能会弄错。
    • @blessenm 在这里,我忘了你的赏金 :)
    猜你喜欢
    • 2017-12-21
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多