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