fix: Record audio in wav format for web/facebook (#7046)

This commit is contained in:
giquieu
2023-05-10 03:59:56 -03:00
committed by GitHub
parent 662967b5d3
commit 520bdabefe
3 changed files with 25 additions and 21 deletions

View File

@@ -13,15 +13,19 @@ import videojs from 'video.js';
import alertMixin from '../../../../shared/mixins/alertMixin'; import alertMixin from '../../../../shared/mixins/alertMixin';
import Recorder from 'opus-recorder'; import Recorder from 'opus-recorder';
// Workers to record Audio .ogg and .wav
import encoderWorker from 'opus-recorder/dist/encoderWorker.min'; import encoderWorker from 'opus-recorder/dist/encoderWorker.min';
import waveWorker from 'opus-recorder/dist/waveWorker.min'; import waveWorker from 'opus-recorder/dist/waveWorker.min';
import WaveSurfer from 'wavesurfer.js'; import WaveSurfer from 'wavesurfer.js';
import MicrophonePlugin from 'wavesurfer.js/dist/plugin/wavesurfer.microphone.js'; import MicrophonePlugin from 'wavesurfer.js/dist/plugin/wavesurfer.microphone.js';
import 'videojs-wavesurfer/dist/videojs.wavesurfer.js';
import 'videojs-wavesurfer/dist/videojs.wavesurfer.js';
import 'videojs-record/dist/videojs.record.js'; import 'videojs-record/dist/videojs.record.js';
import 'videojs-record/dist/plugins/videojs.record.opus-recorder.js';
import OpusRecorderEngine from 'videojs-record/dist/plugins/videojs.record.opus-recorder.js';
import { format, addSeconds } from 'date-fns'; import { format, addSeconds } from 'date-fns';
import { AUDIO_FORMATS } from 'shared/constants/messages'; import { AUDIO_FORMATS } from 'shared/constants/messages';
@@ -33,7 +37,7 @@ export default {
props: { props: {
audioRecordFormat: { audioRecordFormat: {
type: String, type: String,
default: AUDIO_FORMATS.WEBM, default: AUDIO_FORMATS.WAV,
}, },
}, },
data() { data() {
@@ -79,24 +83,18 @@ export default {
maxLength: 900, maxLength: 900,
timeSlice: 1000, timeSlice: 1000,
maxFileSize: 15 * 1024 * 1024, maxFileSize: 15 * 1024 * 1024,
...(this.audioRecordFormat === AUDIO_FORMATS.WEBM && { displayMilliseconds: false,
monitorGain: 0, audioChannels: 1,
recordingGain: 1, audioSampleRate: 48000,
numberOfChannels: 1, audioBitRate: 128,
encoderSampleRate: 16000, audioEngine: 'opus-recorder',
originalSampleRateOverride: 16000, ...(this.audioRecordFormat === AUDIO_FORMATS.WAV && {
streamPages: true, audioMimeType: 'audio/wav',
maxFramesPerPage: 1, audioWorkerURL: waveWorker,
encoderFrameSize: 1,
encoderPath: waveWorker,
}), }),
...(this.audioRecordFormat === AUDIO_FORMATS.OGG && { ...(this.audioRecordFormat === AUDIO_FORMATS.OGG && {
displayMilliseconds: false, audioMimeType: 'audio/ogg',
audioEngine: 'opus-recorder',
audioWorkerURL: encoderWorker, audioWorkerURL: encoderWorker,
audioChannels: 1,
audioSampleRate: 48000,
audioBitRate: 128,
}), }),
}, },
}, },
@@ -134,6 +132,11 @@ export default {
}, },
methods: { methods: {
deviceReady() { deviceReady() {
if (this.player.record().engine instanceof OpusRecorderEngine) {
if (this.audioRecordFormat === AUDIO_FORMATS.WAV) {
this.player.record().engine.audioType = 'audio/wav';
}
}
this.player.record().start(); this.player.record().start();
}, },
startRecord() { startRecord() {

View File

@@ -501,10 +501,10 @@ export default {
return `draft-${this.conversationIdByRoute}-${this.replyType}`; return `draft-${this.conversationIdByRoute}-${this.replyType}`;
}, },
audioRecordFormat() { audioRecordFormat() {
if (this.isAWebWidgetInbox) { if (this.isAWhatsAppChannel) {
return AUDIO_FORMATS.WEBM; return AUDIO_FORMATS.OGG;
} }
return AUDIO_FORMATS.OGG; return AUDIO_FORMATS.WAV;
}, },
messageVariables() { messageVariables() {
const variables = getMessageVariables({ const variables = getMessageVariables({

View File

@@ -84,6 +84,7 @@ export const CSAT_RATINGS = [
export const AUDIO_FORMATS = { export const AUDIO_FORMATS = {
WEBM: 'audio/webm', WEBM: 'audio/webm',
OGG: 'audio/ogg', OGG: 'audio/ogg',
WAV: 'audio/wav',
}; };
export const MESSAGE_VARIABLES = [ export const MESSAGE_VARIABLES = [