|
import React, { useMemo, useEffect } from 'react';
|
|
import { blobFromAudioBuffer } from '../utils/utils';
|
|
|
|
interface AudioPlayerProps {
|
|
audioBuffer: AudioBuffer;
|
|
filename?: string;
|
|
}
|
|
|
|
export const AudioPlayer: React.FC<AudioPlayerProps> = ({ audioBuffer, filename = 'podcast.wav' }) => {
|
|
|
|
const blobUrl = useMemo(() => {
|
|
const wavBlob = blobFromAudioBuffer(audioBuffer);
|
|
return URL.createObjectURL(wavBlob);
|
|
}, [audioBuffer]);
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
return () => {
|
|
URL.revokeObjectURL(blobUrl);
|
|
};
|
|
}, [blobUrl]);
|
|
|
|
return (
|
|
<div className="mt-4 flex items-center">
|
|
<audio controls src={blobUrl}>
|
|
Your browser does not support the audio element.
|
|
</audio>
|
|
|
|
<a
|
|
className="btn btn-sm btn-primary ml-2"
|
|
href={blobUrl} // Use the same blobUrl for download
|
|
download={filename}
|
|
>
|
|
Download
|
|
</a>
|
|
</div>
|
|
);
|
|
}; |