File size: 1,448 Bytes
88cc829
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
"use client";

import { useState, useCallback } from 'react';
import constants from '../constants';

const useAudioManager = () => {
    const [progress, setProgress] = useState<number | undefined>(undefined);
    const [audioData, setAudioData] = useState<{
        buffer: AudioBuffer;
        url: string;
        source: any;
        mimeType: string;
    } | undefined>(undefined);

    // Reset the audio data
    const resetAudio = useCallback(() => {
        setAudioData(undefined);
    }, []);

    // Set audio from a Blob (e.g., from recording)
    const setAudioFromRecording = useCallback(async (data: Blob) => {
        resetAudio();
        setProgress(0);
        const blobUrl = URL.createObjectURL(data);
        const audioCTX = new AudioContext({sampleRate: constants.SAMPLING_RATE, });
        const arrayBuffer = await data.arrayBuffer();
        const decoded = await audioCTX.decodeAudioData(arrayBuffer);
        setProgress(undefined);
        setAudioData({
            buffer: decoded,
            url: blobUrl,
            source: "RECORDING",
            mimeType: data.type,
        });
    }, [resetAudio]);

    // Other functionalities (e.g., setAudioFromDownload, downloadAudioFromUrl)
    // can be added similarly based on your requirements

    return {
        audioData,
        progress,
        setAudioFromRecording,
        // Export other functions as needed
    };
};

export default useAudioManager;