Created
November 15, 2023 23:51
-
-
Save walkingmask/af498e495a0ed015a4c6a8afa93770f8 to your computer and use it in GitHub Desktop.
try_openai_tts.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import os | |
from io import BytesIO | |
import ipywidgets as widgets | |
from openai import OpenAI | |
os.environ["OPENAI_API_KEY"] = "sk-..." # Your OpenAI API Key here. | |
client = OpenAI() | |
response = client.audio.speech.create( | |
model="tts-1", | |
input="こんにちは", | |
voice="alloy", | |
) | |
class OpenAITTS: | |
def __init__(self): | |
self.client = OpenAI() | |
self.text = "こんにちは!" | |
self.voice = "alloy" | |
self.model = "tts-1" | |
self.speed = 1.0 | |
self.audio = BytesIO().read() | |
self.text_input = widgets.Textarea( | |
value=self.text, | |
description="Text:", | |
layout=widgets.Layout(height='100px'), | |
) | |
self.text_input.observe(self.on_text_input_change, names="value") | |
self.voice_selector = widgets.Dropdown( | |
options=[ | |
("alloy", "alloy"), | |
("echo", "echo"), | |
("fable", "fable"), | |
("onyx", "onyx"), | |
("nova", "nova"), | |
("shimmer", "shimmer"), | |
], | |
value=self.voice, | |
description="Voice:", | |
) | |
self.voice_selector.observe(self.on_voice_selector_change, names="value") | |
self.model_selector = widgets.Dropdown( | |
options=[ | |
("tts-1", "tts-1"), | |
("tts-1-hd", "tts-1-hd"), | |
], | |
value=self.model, | |
description="Model:", | |
) | |
self.model_selector.observe(self.on_model_selector_change, names="value") | |
self.speed_slider = widgets.FloatSlider( | |
value=self.speed, | |
min=0.25, | |
max=4.0, | |
step=0.05, | |
description="Speed:", | |
) | |
self.speed_slider.observe(self.on_speed_slider_change, names="value") | |
self.generate_button = widgets.Button(description="Generate") | |
self.generate_button.on_click(self.on_generate_button_clicked) | |
self.audio_player = widgets.Audio( | |
value=self.audio, | |
loop=False, | |
autoplay=False, | |
) | |
def on_text_input_change(self, change): | |
self.text = change["new"] | |
def on_voice_selector_change(self, change): | |
self.voice = change["new"] | |
def on_model_selector_change(self, change): | |
self.model = change["new"] | |
def on_speed_slider_change(self, change): | |
self.speed = change["new"] | |
def on_generate_button_clicked(self, b): | |
global client, params | |
response = self.client.audio.speech.create( | |
model=self.model, | |
input=self.text, | |
voice=self.voice, | |
speed=self.speed, | |
) | |
self.audio = BytesIO(response.content) | |
self.audio.seek(0) | |
self.audio_player.value = self.audio.read() | |
def display(self): | |
display( | |
widgets.VBox( | |
[ | |
self.text_input, | |
self.voice_selector, | |
self.model_selector, | |
self.speed_slider, | |
self.generate_button, | |
self.audio_player, | |
], | |
layout=widgets.Layout( | |
display="flex", | |
flex_flow="column", | |
align_items="center", | |
width="100%", | |
) | |
) | |
) | |
tts = OpenAITTS() | |
tts.display() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment