1- import React , { createContext , useCallback , useContext , useState } from 'react' ;
2- import { downsampleToWav , encodeMp3 } from './WebAudioUtils' ;
1+ import React , { createContext , useCallback , useContext , useEffect , useState } from 'react' ;
32import {
43 VOICE_MESSAGE_FILE_NAME ,
54 VOICE_MESSAGE_MIME_TYPE ,
@@ -34,11 +33,25 @@ const VoiceRecorderContext = createContext<VoiceRecorderContext>({
3433export const VoiceRecorderProvider = ( props : VoiceRecorderProps ) : React . ReactElement => {
3534 const { children } = props ;
3635 const { config } = useSendbirdStateContext ( ) ;
37- const { logger } = config ;
36+ const { logger, isVoiceMessageEnabled } = config ;
3837 const [ mediaRecorder , setMediaRecorder ] = useState < MediaRecorder > ( null ) ;
3938 const [ isRecordable , setIsRecordable ] = useState < boolean > ( false ) ;
4039
40+ const [ webAudioUtils , setWebAudioUtils ] = useState ( null ) ;
41+ useEffect ( ( ) => {
42+ if ( isVoiceMessageEnabled && ! webAudioUtils ) {
43+ import ( './WebAudioUtils' ) . then ( ( data ) => {
44+ setWebAudioUtils ( data ) ;
45+ } )
46+ }
47+ } , [ ] ) ;
48+
4149 const start = useCallback ( ( eventHandler : VoiceRecorderEventHandler ) : void => {
50+ if ( isVoiceMessageEnabled && ! webAudioUtils ) {
51+ logger . error ( 'VoiceRecorder: Recording audio processor is being loaded.' ) ;
52+ return ;
53+ }
54+
4255 logger . info ( 'VoiceRecorder: Start recording.' ) ;
4356 if ( mediaRecorder ) {
4457 stop ( ) ;
@@ -58,8 +71,8 @@ export const VoiceRecorderProvider = (props: VoiceRecorderProps): React.ReactEle
5871 lastModified : new Date ( ) . getTime ( ) ,
5972 type : VOICE_MESSAGE_MIME_TYPE ,
6073 } ) ;
61- downsampleToWav ( audioFile , ( buffer ) => {
62- const mp3Buffer = encodeMp3 ( buffer ) ;
74+ webAudioUtils ?. downsampleToWav ( audioFile , ( buffer ) => {
75+ const mp3Buffer = webAudioUtils ?. encodeMp3 ( buffer ) ;
6376 const mp3blob = new Blob ( mp3Buffer , { type : VOICE_MESSAGE_MIME_TYPE } ) ;
6477 const convertedAudioFile = new File ( [ mp3blob ] , VOICE_MESSAGE_FILE_NAME , {
6578 lastModified : new Date ( ) . getTime ( ) ,
@@ -79,7 +92,7 @@ export const VoiceRecorderProvider = (props: VoiceRecorderProps): React.ReactEle
7992 logger . error ( 'VoiceRecorder: Failed getting media stream.' , err ) ;
8093 setMediaRecorder ( null ) ;
8194 } ) ;
82- } , [ mediaRecorder ] ) ;
95+ } , [ mediaRecorder , webAudioUtils ] ) ;
8396
8497 const stop = useCallback ( ( ) : void => {
8598 // Stop recording
0 commit comments