-
Notifications
You must be signed in to change notification settings - Fork 39
/
app.py
101 lines (75 loc) · 2.66 KB
/
app.py
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import os
import sys
import datetime
import openai
import dotenv
import streamlit as st
from audio_recorder_streamlit import audio_recorder
# import API key from .env file
dotenv.load_dotenv()
openai.api_key = os.getenv("OPENAI_API_KEY")
def transcribe(audio_file):
transcript = openai.Audio.transcribe("whisper-1", audio_file)
return transcript
def save_audio_file(audio_bytes, file_extension):
"""
Save audio bytes to a file with the specified extension.
:param audio_bytes: Audio data in bytes
:param file_extension: The extension of the output audio file
:return: The name of the saved audio file
"""
timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
file_name = f"audio_{timestamp}.{file_extension}"
with open(file_name, "wb") as f:
f.write(audio_bytes)
return file_name
def transcribe_audio(file_path):
"""
Transcribe the audio file at the specified path.
:param file_path: The path of the audio file to transcribe
:return: The transcribed text
"""
with open(file_path, "rb") as audio_file:
transcript = transcribe(audio_file)
return transcript["text"]
def main():
"""
Main function to run the Whisper Transcription app.
"""
st.title("Whisper Transcription")
tab1, tab2 = st.tabs(["Record Audio", "Upload Audio"])
# Record Audio tab
with tab1:
audio_bytes = audio_recorder()
if audio_bytes:
st.audio(audio_bytes, format="audio/wav")
save_audio_file(audio_bytes, "mp3")
# Upload Audio tab
with tab2:
audio_file = st.file_uploader("Upload Audio", type=["mp3", "mp4", "wav", "m4a"])
if audio_file:
file_extension = audio_file.type.split('/')[1]
save_audio_file(audio_file.read(), file_extension)
# Transcribe button action
if st.button("Transcribe"):
# Find the newest audio file
audio_file_path = max(
[f for f in os.listdir(".") if f.startswith("audio")],
key=os.path.getctime,
)
# Transcribe the audio file
transcript_text = transcribe_audio(audio_file_path)
# Display the transcript
st.header("Transcript")
st.write(transcript_text)
# Save the transcript to a text file
with open("transcript.txt", "w") as f:
f.write(transcript_text)
# Provide a download button for the transcript
st.download_button("Download Transcript", transcript_text)
if __name__ == "__main__":
# Set up the working directory
working_dir = os.path.dirname(os.path.abspath(__file__))
sys.path.append(working_dir)
# Run the main function
main()