sehatech-demo / core /voice_processor.py
larawehbe's picture
Upload folder using huggingface_hub
965ac15 verified
# 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()