jaypan/web-audio-recorder.js

这是一个对 higuma/web-audio-recorder-js Github 库(https://github.com/higuma/web-audio-recorder-js)的包装器,允许通过 Composer 进行安装。

安装: 81

依赖: 0

建议: 0

安全性: 0

星标: 0

关注者: 1

分支: 0

开放问题: 0

语言:JavaScript

0.1.2 2019-05-01 06:52 UTC

This package is not auto-updated.

Last update: 2024-09-12 16:23:03 UTC


README

这是什么?

WebAudioRecorder.js 是一个 JavaScript 库,它记录音频输入(Web Audio API AudioNode 对象)并将其编码为音频文件图像(Blob 对象)。它支持三种编码格式。

  • 波形音频 (.wav)
  • Ogg Vorbis (.ogg)
  • MP3 (MPEG-1 Audio Layer III) (.mp3)

此库使用以下编码库作为底层。

演示

麦克风录音演示。

https://higuma.github.io/web-audio-recorder-js/

库文件

库由一个主脚本和几个工作脚本组成。

lib/ 包含未压缩的库文件。

  • WebAudioRecorder.js: 主脚本
  • WebAudioRecorderWav.js: 波形音频编码的工作者
  • WebAudioRecorderOgg.js: Ogg Vorbis 编码的工作者
  • WebAudioRecorderMp3.js: MP3 编码的工作者
  • WavAudioEncoder.min.js: 波形音频编码(来自 WavAudioEncoder.js
  • OggVorbisEncoder.min.js: Ogg Vorbis 编码(来自 OggVorbisEncoder.js
  • Mp3LameEncoder.min.js: MP3 编码(来自 Mp3LameEncoder.js
  • OggVorbisEncoder.min.js.mem: Ogg Vorbis 编码的内存初始化器(必须位于同一目录)
  • Mp3LameEncoder.min.js.mem: MP3 编码的内存初始化器(与上面相同)

lib-minified/ 包含压缩后的库文件。

  • WebAudioRecorder.min.js: 主脚本(压缩后)
  • WebAudioRecorderWav.min.js: 波形音频的工作者(与编码器连接并重新压缩)
  • WebAudioRecorderOgg.min.js: Ogg Vorbis 的工作者(与编码器连接并重新压缩)
  • WebAudioRecorderMp3.min.js: MP3 的工作者(与编码器连接并重新压缩)
  • OggVorbisEncoder.min.js.mem: Ogg Vorbis 编码器的内存初始化器(与上面相同)
  • Mp3LameEncoder.min.js.mem: MP3 编码器的内存初始化器(与上面相同)

使用库

首先从 HTML 中加载主脚本。

<script src="javascripts/WebAudioRecorder.js"></script>

在创建音频录音对象时(或通过 setEncoding() 更改编码)加载工作文件。您必须在对象构造函数上设置工作目录(有关详细信息,请参阅 API 参考)。

audioRecorder = new WebAudioRecorder(sourceNode, {
  workerDir: "javascripts/"     // must end with slash
});

API

构造函数

recorder = new WebAudioRecorder(sourceNode, configs)

创建音频录音对象。

  • 参数
    • sourceNode: 输入源(AudioNode 对象)
    • configs: 配置对象
      • .workerDir: 工作文件目录(默认 = "/"
      • .numChannels: 通道数(默认 = 2(立体声))
      • .encoding: 编码(默认 = "wav",有关详细信息,请参阅 .setEncoding()
      • .options: 选项(有关详细信息,请参阅 .setOptions()
      • 您还可以设置事件处理器(有关详细信息,请参阅“事件处理器”)
  • 返回
    • 音频录音对象

每个配置属性都有一个默认值(通常您只需要设置.workerDir.encoding)。您可以在构造后通过.setEncoding()更改编码,通过.setOptions()更改选项。

如果您使用MP3编码,您不能从默认值(当前MP3编码器只支持立体声2通道)更改.numChannels

事实上,configs只是深拷贝到记录对象本身。

方法

recorder.setEncoding(encoding)

构造后更改编码。

  • 参数
    • .encoding:编码
      • "wav":波形音频(默认)
      • "ogg":Ogg Vorbis
      • "mp3":MP3
  • 返回
    • (无)

当录音未运行时,您可以更改编码。如果在录音期间调用此方法,将触发.onError()事件。

recorder.setOptions(options)

设置选项。

  • 参数
    • options:选项对象
      • .timeLimit:录音时间限制(秒)(默认 = 300
      • .encodeAfterRecord:编码过程模式
        • false:在录音后台处理编码(默认)
        • true:录音完成后处理编码
      • .progressInterval:编码进度报告间隔(毫秒)(默认 = 1000
        • (仅在.encodeAfterRecordtrue时使用)
      • .bufferSize:录音缓冲区大小(默认 = undefined(使用浏览器默认值))
      • .wav.mimeType:波形音频MIME类型(默认 = "audio/wav"
      • .ogg.mimeType:Ogg Vorbis MIME类型(默认 = "audio/ogg"
      • .ogg.quality:Ogg Vorbis质量(-0.1 .. 1)(默认 = 0.5
      • .mp3.mimeType:MP3 MIME类型(默认 = "audio/mpeg"
      • .mp3.bitRate:MP3比特率(通常为64 .. 320,用于44100Hz)(默认 = 160
  • 返回
    • (无)

当录音未运行时,您可以设置选项。如果在录音期间调用此方法,将触发.onError()事件。

recorder.startRecording()

开始录音。

  • 参数
    • (无)
  • 返回
    • (无)

如果.encoderAfterRecord选项为false(默认),编码过程将在录音后台执行。

如果.encoderAfterRecordtrue,音频数据仅存储到工作线程的缓冲区。编码过程将在录音完成后执行。

recorder.isRecording()

如果录音正在运行,则返回。

  • 参数
    • (无)
  • 返回
    • false:录音未运行
    • true:录音正在运行
recordingTime = recorder.recordingTime()

报告录音时间。

  • 参数
    • (无)
  • 返回
    • 录音时间(秒)或null(未录音)
recorder.cancelRecording()

取消当前录音而不保存。

  • 参数
    • (无)
  • 返回
    • (无)
recorder.finishRecording()

完成当前录音。

  • 参数
    • (无)
  • 返回
    • (无)

如果.encoderAfterRecord选项为false(默认),它将立即完成编码并创建一个Blob对象。您可以通过.onComplete()事件获取Blob。

如果.encoderAfterRecordtrue,它将开始编码过程。编码过程可能需要几秒钟到几分钟(取决于录音时间)。您可以通过onEncodingProgress()事件获取编码进度。获取Blob的方式与上述相同。

recorder.cancelEncoding()

取消编码。

  • 参数
    • (无)
  • 返回
    • (无)

此方法用于当.encoderAfterRecordtrue且工作线程在.finishRecording()后处理编码时。您可以中断工作线程的编码过程并进行清理。

内部,它调用worker.terminate()来终止工作线程并创建另一个工作线程。

事件处理程序

编码工作线程的响应由事件处理程序处理。还提供了一些其他断点作为事件。以下是对事件的总结(第一个参数始终是记录对象)。

recorder.onEncoderLoading = function(recorder, encoding) { ... }
recorder.onEncoderLoaded = function(recorder, encoding) { ... }
recorder.onTimeout = function(recorder) { ... }
recorder.onEncodingProgress = function (recorder, progress) { ... }
recorder.onEncodingCanceled = function(recorder) { ... }
recorder.onComplete = function(recorder, blob) { ... }
recorder.onError = function(recorder, message) { ... }

您可以将事件处理程序设置为对象属性。

recorder = new WebAudioRecorder(source, { workerDir: "javascripts/" });
recorder.onComplete = function(rec, blob) {
  // use Blob
};

您还可以从构造函数参数设置事件处理程序。

recorder = new WebAudioRecorder(source, {
  workerDir: "javascripts/",
  onEncoderLoading: function(recorder, encoding) {
    // show "loading encoder..." display
  },
  onEncoderLoaded: function(recorder, encoding) {
    // hide "loading encoder..." display
  }
});

事件参考

recorder.onEncoderLoading = function(recorder, encoding) { ... }
  • 触发于
    • 记录器将加载编码工作线程(在构造或更改编码时)
  • 参数
    • recorder:音频记录对象
    • encoding:编码
  • 默认处理程序
    • 空函数

这是构造过程中唯一触发的事件。为了正确捕获第一个事件,它应该从构造函数参数设置(参见上述示例)。

recorder.onEncoderLoaded = function(recorder, encoding) { ... }
  • 触发于
    • 编码工作线程已加载完成
  • 参数
    • recorder:音频记录对象
    • encoding:编码
  • 默认处理程序
    • 空函数
recorder.onTimeout = function(recorder) { ... }
  • 触发于
    • 录音时间超过超时限制
  • 参数
    • recorder:音频记录对象
  • 默认处理程序
    • 调用recorder.finishRecording()
recorder.onEncodingProgress = function (recorder, progress) { ... }
  • 触发于
    • 工作器报告编码进度(当 .encodeAfterRecord 设置为 true 时)
  • 参数
    • recorder:音频记录对象
    • progress:进度(从 01
  • 默认处理程序
    • 空函数
recorder.onEncodingCanceled = function(recorder) { ... }
  • 触发于
    • 调用 .cancelRecording()
  • 参数
    • recorder:音频记录对象
  • 默认处理程序
    • 空函数
recorder.onComplete = function(recorder, blob) { ... }
  • 触发于
    • 工作器完成编码到 Blob
  • 参数
    • recorder:音频记录对象
    • blob:Blob 对象
  • 默认处理程序
    • 通过 recorder.onError() 重写 "您必须重写 onComplete 事件"

这是最重要的事件。您必须重写才能获取结果。

recorder.onError = function(recorder, message) { ... }
  • 触发于
    • 错误
  • 参数
    • recorder:音频记录对象
    • message:错误信息
  • 默认处理程序
    • 通过 console.log(message) 显示消息

许可证

该库的 Ogg Vorbis 编码部分使用由 JavaScript 转换的 libogglibvorbis 代码。它们在 Xiph 的类似 BSD 许可下发布。该库的 Ogg Vorbis 编码部分遵循相同的许可证(见以下链接)。

http://www.xiph.org/licenses/bsd/

该库的 MP3 编码部分使用由 JavaScript 转换的 LAME 代码。LAME 在 LGPL 许可下发布。该库的 MP3 编码部分遵循相同的许可证(见以下链接)。

http://lame.sourceforge.net/about.php

其他所有部分均在 MIT 许可证下发布(见 LICENSE.txt)。