Spaces:
Running
Running
File size: 2,782 Bytes
f2bee8a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
import React from 'react';
import PropTypes from 'prop-types';
import bindAll from 'lodash.bindall';
import RecordingStepComponent from '../components/record-modal/recording-step.jsx';
import AudioRecorder from '../lib/audio/audio-recorder.js';
import {defineMessages, injectIntl, intlShape} from 'react-intl';
import log from '../lib/log';
const messages = defineMessages({
alertMsg: {
defaultMessage: 'Could not start recording',
description: 'Alert for recording error',
id: 'gui.recordingStep.alertMsg'
}
});
class RecordingStep extends React.Component {
constructor (props) {
super(props);
bindAll(this, [
'handleRecord',
'handleStopRecording',
'handleStarted',
'handleLevelUpdate',
'handleRecordingError'
]);
this.state = {
listening: false,
level: 0,
levels: null
};
}
componentDidMount () {
this.audioRecorder = new AudioRecorder();
this.audioRecorder.startListening(this.handleStarted, this.handleLevelUpdate, this.handleRecordingError);
}
componentWillUnmount () {
this.audioRecorder.dispose();
}
handleStarted () {
this.setState({listening: true});
}
handleRecordingError (error) {
log.error(error);
alert(this.props.intl.formatMessage(messages.alertMsg)); // eslint-disable-line no-alert
}
handleLevelUpdate (level) {
this.setState({
level: level,
levels: this.props.recording ? (this.state.levels || []).concat([level]) : this.state.levels
});
}
handleRecord () {
this.audioRecorder.startRecording();
this.props.onRecord();
}
handleStopRecording () {
const {samples, sampleRate, levels, trimStart, trimEnd} = this.audioRecorder.stop();
this.props.onStopRecording(samples, sampleRate, levels, trimStart, trimEnd);
}
render () {
const {
onRecord, // eslint-disable-line no-unused-vars
onStopRecording, // eslint-disable-line no-unused-vars
...componentProps
} = this.props;
return (
<RecordingStepComponent
level={this.state.level}
levels={this.state.levels}
listening={this.state.listening}
onRecord={this.handleRecord}
onStopRecording={this.handleStopRecording}
{...componentProps}
/>
);
}
}
RecordingStep.propTypes = {
intl: intlShape.isRequired,
onRecord: PropTypes.func.isRequired,
onStopRecording: PropTypes.func.isRequired,
recording: PropTypes.bool
};
export default injectIntl(RecordingStep);
|