eightban's memo

残しておきたい記事をまとめてみました。このブログに書いてあるドキュメントやブログで配布しているファイルの使用によって発生するいかなる損害に対してもこのブログの管理者は責任を負いません。使用する場合は自己責任のもとに使用してください。

Python

openjtalkをインストールして日本語のtext-to-speechを行う

更新日:

Build Tools for Visual Studio 2022インストール

Microsoft C++ Build Tools - Visual Studio

pyopenjtalkのインストール

pip install pyopenjtalk

playsoundのインストール

pip install playsound==1.2.2
指定されたデバイスが開かれていないか、または MCI で認識されません。のエラーが出るのでバージョンを下げます

コード

import numpy as np
import pyopenjtalk
from scipy.io import wavfile
from playsound import playsound

x, sr = pyopenjtalk.tts("おめでとうございます", speed=1.0, half_tone=0.0, run_marine=False)
wavfile.write("test.wav", sr, x.astype(np.int16))
playsound('test.wav')

pydudのインストール

pip install git+https://github.com/jiaaro/pydub.git@master
pip install simpleaudio

コート

import numpy as np
import pyopenjtalk
from scipy.io import wavfile
from pydub import AudioSegment
from pydub.playback import play
x, sr = pyopenjtalk.tts("ございます")
wavfile.write("test.wav", sr, x.astype(np.int16))

voice = AudioSegment.from_file("test.wav", format="wav")
play(voice)

gui を使ってサンプル

import tkinter as tk
from tkinter import messagebox, scrolledtext
import pyopenjtalk
import numpy as np
from scipy.io import wavfile
from pydub import AudioSegment
from pydub.playback import play

def generate_audio(text_input, label, scrollbar):
    try:
        # 読み仮名を取得してラベルに表示
        kana = pyopenjtalk.g2p(text_input, kana=True)
        label.config(state="normal")
        label.delete(1.0, "end")
        label.insert("end", "読み仮名: " + kana)
        label.config(state="disabled")
        
        # スクロールバーを最下部に移動
        scrollbar.set(0.0, 1.0)
        
        # テキストを音声に変換
        x, sr = pyopenjtalk.tts(text_input)
        wavfile.write("output.wav", sr, x.astype(np.int16))
        
        # 生成された音声を再生
        voice = AudioSegment.from_file("output.wav", format="wav")
        play(voice)
        
    except Exception as e:
        # エラーメッセージを表示
        messagebox.showerror("Error", str(e))

def create_gui():
    # Tkinterウィンドウの作成
    root = tk.Tk()
    root.title("Text to Speech Converter")
    
    # テキストボックスの作成
    text_box = scrolledtext.ScrolledText(root, width=70, height=10, font=('Arial', 14))
    text_box.pack()
    
    # ラベルの作成
    kana_label = tk.Text(root, width=70, height=5, font=('Arial', 14))
    
    # スクロールバーの作成
    scrollbar = tk.Scrollbar(root, command=kana_label.yview)
    scrollbar.pack(side="right", fill="y")
    kana_label.config(yscrollcommand=scrollbar.set)
    kana_label.pack(fill="both", expand=True)
    kana_label.configure(state="disabled")
    
    # ボタンの作成
    button = tk.Button(root, text="音声生成", command=lambda: generate_audio(text_box.get("1.0", "end-1c"), kana_label, scrollbar))
    button.pack(fill="x")
    
    # ウィンドウを表示
    root.mainloop()

# GUIを作成して表示
create_gui()

-Python

Copyright© eightban's memo , 2024 All Rights Reserved Powered by STINGER.