Spaces:
Build error
Build error
| # 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() |