File size: 2,304 Bytes
965ac15
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# audio_handler.py
import streamlit as st
import wave
import pyaudio
import tempfile
import os
from datetime import datetime
import openai



class AudioRecorder:
    def __init__(self, openai_api_key):
        self.audio = pyaudio.PyAudio()
        self.frames = []
        self.recording = False
        self.stream = None
        self.openai_client = openai.OpenAI(api_key=openai_api_key)
        
    def start_recording(self):
        self.recording = True
        self.frames = []
        self.stream = self.audio.open(
            format=pyaudio.paInt16,
            channels=1,
            rate=44100,
            input=True,
            frames_per_buffer=1024,
            stream_callback=self._callback
        )
        self.stream.start_stream()
    
    def _callback(self, in_data, frame_count, time_info, status):
        if self.recording:
            self.frames.append(in_data)
        return (in_data, pyaudio.paContinue)
    
    def stop_recording(self):
        if self.stream:
            self.recording = False
            self.stream.stop_stream()
            self.stream.close()
            
            # Create temporary file
            timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
            audio_file = os.path.join(tempfile.gettempdir(), f"audio_{timestamp}.wav")
            
            # Save audio file
            with wave.open(audio_file, 'wb') as wf:
                wf.setnchannels(1)
                wf.setsampwidth(self.audio.get_sample_size(pyaudio.paInt16))
                wf.setframerate(44100)
                wf.writeframes(b''.join(self.frames))
            
            return audio_file
        return None
    
    def transcribe_audio(self, audio_file_path):
        """Transcribe audio file using OpenAI Whisper API"""
        try:
            with open(audio_file_path, "rb") as audio_file:
                transcript = self.openai_client.audio.transcriptions.create(
                    model="whisper-1",
                    file=audio_file, 
                    language="en",
                    response_format="text"
                )
                return transcript
        except Exception as e:
            st.error(f"Transcription error: {str(e)}")
            return None
    def __del__(self):
        self.audio.terminate()