@dschoon/react-waves

中文文档
4.0.3发布于 2020/12/01MITTypeScriptESM + CJS近 30 天下载 2183

为wasurfer.js 执行组件包装

中文使用文档
文档目录5 节
  1. 实例
  2. 安装
  3. 基本示例
  4. 可用的道具
  5. 许可证

反弹窗口

反应组件包装 Vavesurfer.js (英语)

NPM JavaScript Style Guide CircleCI

背景情况

本构成部分最初以在2008年1月1日至12月31日期间开展的工作为基础 反应波突起器 以 翻译: (和 其他人员) (中文(简体) ). 在Wowsurfer-js发布第2版后,反应-波浪预测变得无法维持后,我决定开始我自己的版本比较安全,我对这个版本有更好的控制.

版本4.x

使这个组件与底部相对应 (原始内容存档于2018-03-21). wasurfer.js 我决定跳过第二版 然后直接转到第三版 随着Wasurfer现在进入第4版,我们做了必要的更新,现在也在v4上.

问题

请报告任何 问题 你遇到,我会尽力去修理.


实例

ReactWaves

以下是一个基本演示,示例代码包含在这个repo中:

以下是我使用这个代码的个人项目的例子:

安装

npm install @dschoon/react-waves

或者说

yarn add @dschoon/react-waves

基本示例

import React from "react";
import ReactWaves from "@dschoon/react-waves";

import africa from "../audio/africa.mp3";

export default class BasicExample extends React.Component {
  state = {
    playing: false,
  };

  render() {
    return (
      <div className={"container example"}>
        <div
          className="play button"
          onClick={() => {
            this.setState({ playing: !this.state.playing });
          }}
        >
          {!this.state.playing ? "▶" : "■"}
        </div>
        <ReactWaves
          audioFile={africa}
          className={"react-waves"}
          options={{
            barHeight: 2,
            cursorWidth: 0,
            height: 200,
            hideScrollbar: true,
            progressColor: "#EC407A",
            responsive: true,
            waveColor: "#D1D6DA",
          }}
          volume={1}
          zoom={1}
          playing={this.state.playing}
        />
      </div>
    );
  }
}

可用的道具

props = {
  playing: PropTypes.bool,
  pos: PropTypes.number,
  audioFile: (props, propName, componentName) => {
    const prop = props[propName];
    if (
      prop &&
      typeof prop !== "string" &&
      !(prop instanceof window.Blob) &&
      !(prop instanceof window.File)
    ) {
      return new Error(`Invalid ${propName} supplied to ${componentName}
        expected either string or file/blob`);
    }

    return null;
  },

  mediaElt: PropTypes.oneOfType([
    PropTypes.string,
    PropTypes.instanceOf(window.HTMLElement),
  ]),
  audioPeaks: PropTypes.array,
  volume: PropTypes.number,
  zoom: PropTypes.number,
  onPosChange: PropTypes.func,
  children: PropTypes.oneOfType([PropTypes.element, PropTypes.array]),
  options: PropTypes.shape({
    audioRate: PropTypes.number,
    audioContext: PropTypes.object,
    audioScriptProcessor: PropTypes.object,
    autoCenter: PropTypes.bool,
    backend: PropTypes.oneOf([
      "WebAudio",
      "MediaElement",
      "MediaElementWebAudio",
    ]),
    barGap: positiveIntegerProptype,
    barHeight: positiveIntegerProptype,
    barRadius: positiveIntegerProptype,
    barWidth: (props, propName, componentName) => {
      const prop = props[propName];
      if (prop !== undefined && typeof prop !== "number") {
        return new Error(`Invalid ${propName} supplied to ${componentName}
          expected either undefined or number`);
      }

      return null;
    },
    closeAudioContext: PropTypes.bool,
    cursorColor: PropTypes.string,
    cursorWidth: positiveIntegerProptype,
    fillParent: PropTypes.bool,
    forceDecode: PropTypes.bool,
    height: positiveIntegerProptype,
    hideScrollbar: PropTypes.bool,
    interact: PropTypes.bool,
    loopSelection: PropTypes.bool,
    maxCanvasWidth: positiveIntegerProptype,
    mediaControls: PropTypes.bool,
    mediaType: PropTypes.oneOf(["audio", "video"]),
    minPxPerSec: positiveIntegerProptype,
    normalize: PropTypes.bool,
    partialRender: PropTypes.bool,
    pixelRatio: PropTypes.number,
    progressColor: PropTypes.string,
    removeMediaElementOnDestroy: PropTypes.bool,
    renderer: PropTypes.object,
    responsive: PropTypes.bool,
    scrollParent: PropTypes.bool,
    skipLength: PropTypes.number,
    splitChannels: PropTypes.bool,
    waveColor: PropTypes.oneOfType([
      PropTypes.string,
      PropTypes.instanceOf(window.CanvasGradient),
    ]),
    xhr: PropTypes.object,
  }),
  spectrogramOptions: PropTypes.object,
  timelineOptions: PropTypes.object,
};

许可证

麻省理工学院 丹·肖恩马克 (gi)

最后更新:2020年11月11日

版本与发布记录

@dschoon/react-waves 共发布 25 个版本,首次发布于 2018/12/13;过去 12 个月发布了 0 个版本。

版本发布日期距今
4.0.3latest2020/12/015 年前
4.0.22020/11/126 年前
4.0.12020/11/126 年前
4.0.02020/11/126 年前
3.0.32020/04/276 年前
3.0.22020/04/276 年前

关于 @dschoon/react-waves 的常见问题

@dschoon/react-waves 是什么?

为wasurfer.js 执行组件包装

如何安装 @dschoon/react-waves?

在项目目录运行 npm install @dschoon/react-waves,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:prop-types(^15.7.2)、react(^15.0.0 || ^16.0.0 || ^17.0.0)、react-dom(^15.0.0 || ^16.0.0 || ^17.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@dschoon/react-waves 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@dschoon/react-waves 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@dschoon/react-waves 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=8。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@dschoon/react-waves 可以商用吗?

@dschoon/react-waves 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@dschoon/react-waves 的下载量有多少?

根据 npm 官方下载统计,@dschoon/react-waves 在 2026/10/13 – 2026/11/11 这 30 天内被下载 2,183 次,日均约 73 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@dschoon/react-waves 还在维护吗?

最新版本 4.0.3 发布于 2020/12/01(5 年前);至今共发布 25 个版本,其中过去 12 个月发布了 0 个;首次发布于 2018/12/13。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。