Play / pause audio

pull/1102/head
Vincent 5 years ago
parent bf749b4e0b
commit 9b7f47d49f

@ -47,7 +47,8 @@ export class SessionRecording extends React.Component<Props, State> {
this.handleHoverActions = this.handleHoverActions.bind(this); this.handleHoverActions = this.handleHoverActions.bind(this);
this.handleUnhoverActions = this.handleUnhoverActions.bind(this); this.handleUnhoverActions = this.handleUnhoverActions.bind(this);
this.playRecording = this.playRecording.bind(this); this.playAudio = this.playAudio.bind(this);
this.pauseAudio = this.pauseAudio.bind(this);
this.stopRecording = this.stopRecording.bind(this); this.stopRecording = this.stopRecording.bind(this);
this.onSendVoiceMessage = this.onSendVoiceMessage.bind(this); this.onSendVoiceMessage = this.onSendVoiceMessage.bind(this);
@ -92,16 +93,40 @@ export class SessionRecording extends React.Component<Props, State> {
clearInterval(this.state.updateTimerInterval); clearInterval(this.state.updateTimerInterval);
} }
public componentDidUpdate() {
const { audioElement, isPlaying } = this.state;
if (audioElement){
if (isPlaying) {
audioElement.play();
} else {
audioElement.pause();
}
}
}
render() { render() {
const actionPause = (this.state.actionHover && this.state.isRecording); const {
const actionPlay = (!this.state.isRecording || this.state.isPaused); actionHover,
const actionDefault = !actionPause && !actionPlay; isPlaying,
const { isRecording, startTimestamp, nowTimestamp } = this.state; isPaused,
isRecording,
startTimestamp,
nowTimestamp,
} = this.state;
const actionStopRecording = actionHover && isRecording;
const actionPlayAudio = !isRecording && !isPlaying;
const actionPauseAudio = !isRecording && !isPaused && isPlaying;
const actionDefault = !actionStopRecording && !actionPlayAudio && !actionPauseAudio;
const elapsedTimeMs = 1000 * (nowTimestamp - startTimestamp); const elapsedTimeMs = 1000 * (nowTimestamp - startTimestamp);
const displayTimeString = moment.utc(elapsedTimeMs).format('m:ss'); const displayTimeString = moment.utc(elapsedTimeMs).format('m:ss');
const actionPauseFn = isPlaying ? this.pauseAudio : this.stopStream;
return ( return (
<div className="session-recording"> <div className="session-recording">
<div <div
@ -109,20 +134,29 @@ export class SessionRecording extends React.Component<Props, State> {
onMouseEnter={this.handleHoverActions} onMouseEnter={this.handleHoverActions}
onMouseLeave={this.handleUnhoverActions} onMouseLeave={this.handleUnhoverActions}
> >
{actionPause && ( {actionStopRecording && (
<SessionIconButton <SessionIconButton
iconType={SessionIconType.Pause} iconType={SessionIconType.Pause}
iconSize={SessionIconSize.Medium} iconSize={SessionIconSize.Medium}
// FIXME VINCE: Globalise constants for JS Session Colors // FIXME VINCE: Globalise constants for JS Session Colors
iconColor={'#FF4538'} iconColor={'#FF4538'}
onClick={this.stopStream} onClick={actionPauseFn}
/>
)}
{actionPauseAudio && (
<SessionIconButton
iconType={SessionIconType.Pause}
iconSize={SessionIconSize.Medium}
// FIXME VINCE: Globalise constants for JS Session Colors
iconColor={'#FFFFFF'}
onClick={actionPauseFn}
/> />
)} )}
{actionPlay && ( {actionPlayAudio && (
<SessionIconButton <SessionIconButton
iconType={SessionIconType.Play} iconType={SessionIconType.Play}
iconSize={SessionIconSize.Medium} iconSize={SessionIconSize.Medium}
onClick={this.playRecording} onClick={this.playAudio}
/> />
)} )}
@ -161,8 +195,6 @@ export class SessionRecording extends React.Component<Props, State> {
</div> </div>
)} )}
<div className="session-recording--status"> <div className="session-recording--status">
{ isRecording ? ( { isRecording ? (
<SessionButton <SessionButton
@ -222,7 +254,7 @@ export class SessionRecording extends React.Component<Props, State> {
}); });
} }
private playRecording() { private playAudio() {
const { mediaBlob, streamParams } = this.state; const { mediaBlob, streamParams } = this.state;
if (!mediaBlob){ if (!mediaBlob){
@ -232,22 +264,28 @@ export class SessionRecording extends React.Component<Props, State> {
return; return;
} }
this.setState({
isRecording: false,
isPaused: false,
isPlaying: true,
});
// Start playing recording // Start playing recording
const audioURL = window.URL.createObjectURL(mediaBlob.data); const audioURL = window.URL.createObjectURL(mediaBlob.data);
const audioElement = new Audio(audioURL); const audioElement = new Audio(audioURL);
this.setState({audioElement});
audioElement.play();
console.log(`[vince][stream] Audio: `, audioURL); console.log(`[vince][stream] Audio Element: `, audioElement);
console.log(`[vince][stream] AudioURL: `, audioURL); console.log(`[vince][stream] AudioURL: `, audioURL);
this.setState({
audioElement,
isRecording: false,
isPaused: false,
isPlaying: true,
});
}
private pauseAudio() {
this.state.audioElement?.pause();
this.setState({
isPlaying: false,
isPaused: true,
});
} }
private initSendVoiceRecording(){ private initSendVoiceRecording(){

Loading…
Cancel
Save