import React, { useMemo, useEffect } from 'react'; import { audioBufferToWav, blobFromAudioBuffer } from '../utils/utils'; import { encode } from 'base64-arraybuffer'; interface AudioPlayerProps { audioBuffer: AudioBuffer; } export const AudioPlayer: React.FC = ({ audioBuffer }) => { // Create a Blob URL from the audioBuffer. const blobUrl = useMemo(() => { const wavBlob = blobFromAudioBuffer(audioBuffer); return URL.createObjectURL(wavBlob); }, [audioBuffer]); const downloadUrl = useMemo(() => { const wavArrayBuffer = audioBufferToWav(audioBuffer, { float32: false }); const base64 = encode(wavArrayBuffer); return `data:audio/wav;base64,${base64}`; }, [audioBuffer]); // Clean up the object URL when the component unmounts or audioBuffer changes. useEffect(() => { return () => { URL.revokeObjectURL(blobUrl); }; }, [blobUrl]); return (
Download
); };