Spaces:
Running
Running
import React from 'react'; | |
import PropTypes from 'prop-types'; | |
import bindAll from 'lodash.bindall'; | |
import PlaybackStepComponent from '../components/record-modal/playback-step.jsx'; | |
import AudioBufferPlayer from '../lib/audio/audio-buffer-player.js'; | |
class PlaybackStep extends React.Component { | |
constructor (props) { | |
super(props); | |
bindAll(this, [ | |
'handlePlay', | |
'handleStopPlaying' | |
]); | |
} | |
componentDidMount () { | |
this.audioBufferPlayer = new AudioBufferPlayer(this.props.samples, this.props.sampleRate); | |
} | |
componentWillUnmount () { | |
this.audioBufferPlayer.stop(); | |
} | |
handlePlay () { | |
this.audioBufferPlayer.play( | |
this.props.trimStart, | |
this.props.trimEnd, | |
this.props.onSetPlayhead, | |
this.props.onStopPlaying | |
); | |
this.props.onPlay(); | |
} | |
handleStopPlaying () { | |
this.audioBufferPlayer.stop(); | |
this.props.onStopPlaying(); | |
} | |
render () { | |
const { | |
sampleRate, // eslint-disable-line no-unused-vars | |
onPlay, // eslint-disable-line no-unused-vars | |
onStopPlaying, // eslint-disable-line no-unused-vars | |
onSetPlayhead, // eslint-disable-line no-unused-vars | |
...componentProps | |
} = this.props; | |
return ( | |
<PlaybackStepComponent | |
onPlay={this.handlePlay} | |
onStopPlaying={this.handleStopPlaying} | |
{...componentProps} | |
/> | |
); | |
} | |
} | |
PlaybackStep.propTypes = { | |
sampleRate: PropTypes.number.isRequired, | |
samples: PropTypes.instanceOf(Float32Array).isRequired, | |
...PlaybackStepComponent.propTypes | |
}; | |
export default PlaybackStep; | |