我想实现一个基本的Tone Player来加载文件夹中的文件,然后按下ReactJS中的按钮来播放它。
import React, { Component, PropTypes } from 'react';
import ReactDOM from 'react-dom';
import Tone from 'tone';
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
import Slider from 'material-ui/Slider';
import RaisedButton from 'material-ui/RaisedButton';
let sound = new Tone.Player("kick.wav").toMaster();
export default class App extends Component {
render() {
return(
<MuiThemeProvider>
<div>
<Slider min={0} max={100} step={10} className = "Slider1Test1" style={{height: 400}} axis="y"/>
<RaisedButton label="A" className = "RaisedB1Test1" style={{width: 10}}/>
<Slider min={0} max={100} step={10} className = "Slider2Test1" style={{height: 400}} axis="y"/>
<RaisedButton label="B" className = "RaisedB2Test1" style={{width: 10}}/>
</div>
</MuiThemeProvider>
);
}
}
但这会产生错误:
未捕获(在承诺中)DOMException:无法解码音频数据modules.js?hash = 625032f ...:48100 Uncaught(in promise)Tone.Buffer: 无法解码音频数据:kick.wav
我尝试过“./kick.wav”,“。/ kick.ogg”,“。/ kill.mp3”。我试过给出完整的路径。我尝试通过提供XMLHTTPRequest来仅使用Web音频 - 它始终是相同的错误。
我是新手做出反应 - 如果有正确的方法,请告诉我。我需要使用componentDidMount吗? (我也尝试过使用它。请让我知道正确的方法)。 感谢
答案 0 :(得分:2)
看起来您正在使用meteor,这会以某种方式阻止您向服务器加载文件的请求。最简单的解决方案是在根目录中创建一个public
文件夹,并将样本放在那里。然后将./kick.wav
传递给您的Tone.Player
构造函数。构造函数在引擎盖下发出GET
请求,并自动找到您的文件。随着更改,我必须添加此代码以在缓冲区加载完毕后播放示例:
const x = new Tone.Player('./kick.wav').toMaster()
Tone.Buffer.on('load', () => {
x.start();
})