Skip to content

Instantly share code, notes, and snippets.

@walkingmask
Created November 15, 2023 23:51
Show Gist options
  • Save walkingmask/af498e495a0ed015a4c6a8afa93770f8 to your computer and use it in GitHub Desktop.
Save walkingmask/af498e495a0ed015a4c6a8afa93770f8 to your computer and use it in GitHub Desktop.
try_openai_tts.py
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