1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【生成AIアプリ100チャレンジ】(5)朗読アプリ

Last updated at Posted at 2024-03-29

公開中サイト

開発環境

Server lightSail
Language Python3.11
Framework Django
DB sqlite3

ローカル環境ではPythonのvenvを使用。エディタはvs codeです。

目的

 WEB画面上でChatGPTと会話ができるアプリを作りたいと思っています。TTS(テキストを自然な音声にするAPI)とwhispar(音声をテキストにするAPI)を使えば、会話ができるはず。その第2弾として、whisparで音声を文字起こしするアプリを作りました。
これで、文字起こし機能と合わせて、同期処理すれば、ChatGPTと音声で会話ができる、はず。

コード

qiita.rb
def index(request):

    # Access the API key from the environment
    OPENAI_API_KEY = os.environ['OPENAI_API_IMAGE_KEY']
    chat_results = ""
    if request.method == "POST":
        form = TtsForm(request.POST)
        if form.is_valid():
            sentence = form.cleaned_data['sentence']
            client = OpenAI(
                api_key = OPENAI_API_KEY,
            )
            speech_file_path = settings.BASE_DIR / "uploads/tts/speech.mp3"
            response = client.audio.speech.create(
                model="tts-1",
                voice="alloy",
                input=sentence
            )
            response.stream_to_file(speech_file_path)
            chat_results = speech_file_path
    else:
        form = TtsForm()

正直思ったのが、音声を録音したファイルを保存するのが大変なんじゃないかって思っていた。
実際はこのワンラインだけで保存できる。とても楽。

 response.stream_to_file(speech_file_path)

逆に大変だったのが。保存された音声データをアプリ終了時に削除させること。JSでページ離脱時に削除するロジックをかいたのだが。文字データを送る時にもファイルが削除されてしまう。そこはPOST時の判定でクリアさせることができた。

あと、前回のミスを繰り返さないように生成されるファイルはgitignoreに追記しておくこと。これで、変なことにはならない。

アプリ画面

スクリーンショット 2024-03-29 15.31.30.png

感想

日本語と英語、どちらも発音が綺麗ですね。音声会話チャットができれば、擬似英会話もできそうですね。夢が膨らみます。
はやく作りたいです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?