# 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()