【问题标题】:Wavesurfer.js is working fine, but react-wavesurfer has issuesWavesurfer.js 工作正常,但 react-wavesurfer 有问题
【发布时间】:2017-06-28 22:34:12
【问题描述】:

我在使用 Wavesurfer 的网络项目中遇到了障碍。我已经在我的项目中安装了 wavesurfer.js 和 react-wavesurfer 作为节点模块。 Wavesurfer.js 似乎工作正常,但 react-wavesurfer 似乎遇到了我发现难以调试的问题。以下代码:

import React from "react";
import WaveSurfer from "wavesurfer.js"
import ReactWavesurfer from "react-wavesurfer";

class Waveform extends React.Component {
  makeWave() {
    var wavesurfer = WaveSurfer.create({
      container: '#waveform',
      waveColor: 'red',
      progressColor: 'purple'
    });
    wavesurfer.load('path/to/mp3');
  };


  render() {
    this.makeWave();
    return (
      <div>
        <ReactWavesurfer
          audioFile={'path/to/mp3'}
        />
      </div>
    );
  }
}

export default Waveform;

仅生成调用 this.makeWave() 的第一个波形。尝试创建 React 波形时返回错误:Uncaught TypeError: this._wavesurfer.init is not a function。我正在使用 browserify 来捆绑我的 javascript 依赖项。

任何帮助将不胜感激!

【问题讨论】:

  • 我也遇到了同样的问题!我在这里打开了一个关于该项目的特定问题:github.com/mspae/react-wavesurfer/issues/60
  • 我正在尝试使用 react-wavesurfer。我无法导入它。你改变了配置文件吗?

标签: javascript reactjs browserify wavesurfer.js


【解决方案1】:

如果您仍然遇到此问题,您可以创建自己的 Waveform 组件来处理相同的负载。这是一个对我有用的简单示例

1.手动安装 wavesurfer.js:

# taken from here: https://wavesurfer-js.org/
npm install --save wavesurfer.js@2.0.0-beta01

2。构建自定义波形组件:

// components/waveform.js
import React from 'react'
import ReactDOM from 'react-dom'
import WaveSurfer from 'wavesurfer.js'

export default class Waveform extends React.Component {
  constructor(props) {
    super(props)
    this.state = {

    }
  }
  componentDidMount() {
    this.$el = ReactDOM.findDOMNode(this)
    this.$waveform = this.$el.querySelector('.wave')
    this.wavesurfer = WaveSurfer.create({
      container: this.$waveform,
      waveColor: 'violet',
      progressColor: 'purple'
    })
    this.wavesurfer.load(this.props.src)
  }
  componentWillUnmount() {

  }
  render() {
    return (
      <div className='waveform'>
        <div className='wave'></div>
      </div>
    )
  }
}

Waveform.defaultProps = {
  src: ""
}

3.然后,在父组件中:

// components/my-parent-component.js
import Waveform from 'path/to/components/Waveform'
...
render() {
  return <div clasName='parent-component'><Waveform src={'/path/to/audio/src.mp3'} /></div>
}

【讨论】:

  • 我可以使用mp4源吗?
  • @avocadojesus 在这个例子中如何添加插件?您的示例正在运行,但是当我在其中添加插件时。它不认识它plugins: [ WaveSurfer.Regions.add({ regions: [ { start: 5, end: 7, loop: false, color: 'hsla(200, 50%, 70%, 0.4)' } ] }) ]
  • 您知道如何使用功能组件而不是基于类的组件来做到这一点吗?
【解决方案2】:

React-wavesurfer 处理 wavesurfer 实例本身的创建。所以你可以省略makeWave 部分。

import React, { Component } from 'react';
import WaveSurfer from 'react-wavesurfer';

export default class WaveComponent extends Component {
  render() {
    return (
      <WaveSurfer audioFile="/path/to/audio.mp3" />
    );
  }
}

此代码对我有用。如果这不起作用,请发布您正在使用的 wavesurfer.js 和 react-wavesurfer 的确切版本。

另外请记住,如果您使用模块捆绑器,则需要将 wavesurfer.js 公开为全局变量。 (希望在不久的将来不再需要这样做)——更准确的说明请参见https://github.com/mspae/react-wavesurfer#prerequisites-and-common-pitfalls

【讨论】:

  • 这对我不起作用,出现与“react-wavesurfer”相同的错误:“^0.8.6”和“wavesurfer.js”:“^2.0.5”,未捕获类型错误: this._wavesurfer.init 不是函数
猜你喜欢
  • 1970-01-01
  • 2013-07-04
  • 2021-04-07
  • 1970-01-01
  • 2020-02-04
  • 2010-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多