こんにちは、今日は初心者の方々にも使いやすい、話した言葉をテキストに変換し、さらにText to speech(テキストを音声に変換)するプログラムについてご紹介します。特に注目すべき点は、このプログラムが中国語、韓国語、英語のスピーチも生成できることです。この機能により、多言語でのコミュニケーションが可能になります。
・話した言葉をテキストに変換する簡単な方法を探している。
・多言語でのテキストから音声への変換方法がわからない。
・プログラミング初心者でも扱える音声認識・音声合成の方法を知りたい。
こんな疑問を解決します。
・音声認識を使って簡単に言葉をテキストに変換する方法を習得できる。
・中国語、韓国語、英語など多言語でのテキストから音声への変換が可能になる。
・StreamlitとEdge TTSを使用した初心者向けのプログラムで音声合成技術を学べる。
下記動画でもこの内容を紹介しているので、興味がありましたら見てください。
簡単にこういうアプリが作成できるようになります。
第1章: プログラムの概要とセットアップ
このプログラムは、Streamlitを使用して音声認識と音声合成を行うウェブアプリを作成します。必要なライブラリにはStreamlit、Edge TTS、OS、asyncio、speech_recognitionが含まれています。これらのライブラリは、Python環境で簡単にインストールできます。
プログラム全文がこちらになります。コメントアウトに内容を記載しています。
import streamlit as st # Streamlitライブラリをインポート
import edge_tts # Edge TTSライブラリをインポート
import os # OSライブラリをインポート(ファイル操作用)
import asyncio # 非同期処理を行うためのライブラリ
import speech_recognition as sr # 音声認識のためのライブラリ
# Streamlitウェブアプリのタイトルを設定
st.title('音声作成アプリ')
# 音声認識を行う関数の定義
def recognize_speech():
r = sr.Recognizer() # 音声認識器のインスタンスを作成
mic = sr.Microphone() # マイクロフォンのインスタンスを作成
with mic as source: # マイクロフォンを音声入力ソースとして使用
audio = r.listen(source) # 音声を聞いて、オーディオデータを取得
try:
# Googleの音声認識サービスを使用して日本語のテキストに変換
return r.recognize_google(audio, language="ja-JP")
except sr.UnknownValueError:
# 音声が認識できなかった場合
return ""
except sr.RequestError:
# 音声認識サービスへのリクエストに失敗した場合
return ""
# 音声認識を実行するボタンを追加
if st.button('Record Speech'):
recognized_text = recognize_speech() # 音声認識関数を呼び出し、結果を取得
else:
# セッション状態から以前の認識テキストを取得
recognized_text = st.session_state.get('recognized_text', "")
# テキスト入力フィールドを追加。認識されたテキストをデフォルト値として設定
text = st.text_area('Text', recognized_text)
# 音声の声質を選択するためのドロップダウンメニューを追加
voice = st.selectbox(
'Voice',
['ja-JP-KeitaNeural', 'ja-JP-NanamiNeural', 'en-US-JessaNeural',
'zh-CN-XiaoxiaoNeural', 'zh-CN-YunyangNeural', 'ko-KR-SunHiNeural']
)
# 音声の速度を調整するためのスライダーを追加
rate = st.slider('Rate', -100, 100, 20)
# 音声のピッチを調整するためのスライダーを追加
pitch = st.slider('Pitch', -100, 100, 0)
# 音声ファイルの出力名を設定
output_file = 'output.mp3'
# 音声生成を実行するボタンを追加
if st.button('Generate Speech'):
rate_str = f"{rate:+}%" # 速度の設定を文字列に変換
pitch_str = f"{pitch:+}Hz" # ピッチの設定を文字列に変換
# 音声合成の設定を行い、ファイルに保存
communicate = edge_tts.Communicate(text, voice, rate=rate_str, pitch=pitch_str)
asyncio.run(communicate.save(output_file))
# 生成された音声をウェブアプリ上で再生
st.audio(output_file)
# 音声ファイルが存在する場合、削除ボタンを追加
if os.path.exists(output_file):
if st.button('Delete File'):
os.remove(output_file) # ファイルを削除
# 認識されたテキストをセッション状態に保存
st.session_state['recognized_text'] = recognized_text
1.1 プログラムの基本構成
このプログラムは、Streamlit、Edge TTS、OS、asyncio、speech_recognitionという5つの主要なライブラリを使用して構築されています。Streamlitはウェブアプリのフロントエンドを簡単に作成できるライブラリで、ユーザーインターフェースの構築に役立ちます。Edge TTSは高品質なテキストから音声への変換を可能にするライブラリで、多言語対応が特徴です。OSライブラリはファイル操作やシステムコマンドの実行をサポートし、asyncioは非同期処理を効率的に行うために使用されます。最後に、speech_recognitionライブラリは音声認識機能を提供し、話された言葉をテキストに変換します。
1.2 セットアップと環境構築
プログラムを実行する前に、必要なライブラリをインストールする必要があります。Pythonを使用しているため、通常はpipコマンドを使ってこれらのライブラリをインストールできます。例えば、以下のようなコマンドを使用します:
pip install streamlit edge_tts asyncio speech_recognition
これにより、Streamlit、Edge TTS、asyncio、speech_recognitionがインストールされます。OSライブラリはPythonの標準ライブラリの一部であるため、別途インストールの必要はありません。
インストールしたものをプログラムの中でimportしています。
import streamlit as st
import edge_tts
import os
import asyncio
import speech_recognition as sr
- import streamlit as st: Streamlitライブラリをインポートします。これはウェブアプリのインターフェースを作成するために使用されます。
- import edge_tts: Edge TTSはテキストから音声への変換を行うライブラリです。これにより、高品質な音声合成が可能になります。
- import os: OSライブラリはファイル操作やシステム関連の機能を提供します。
- import asyncio: 非同期処理を行うためのライブラリです。これは音声合成時の処理効率を高めるために使用されます。
- import speech_recognition as sr: 音声認識機能を提供するライブラリです。これにより、マイクロフォンからの入力をテキストに変換します。
1.3 プログラムの初期設定
プログラムの冒頭では、まず必要なライブラリをインポートします。次に、Streamlitを使ってウェブアプリの基本的な構造を設定します。これには、アプリのタイトルの設定や、テキストエリア、ボタン、スライダーなどのウィジェットの追加が含まれます。これらのウィジェットはユーザーの入力を受け取り、プログラムのさまざまな機能をトリガーするために使用されます。
1.4 プログラムの実行
Streamlitアプリケーションは、コマンドラインから簡単に実行できます。プログラムが保存されているディレクトリで以下のコマンドを実行することにより、ローカルサーバー上でアプリが起動します。コマンドプロンプト上で下記入力しエンターを押します。
streamlit run [ファイル名].py
これにより、ブラウザでアプリが開き、ユーザーは音声認識や音声合成の機能を利用できるようになります。
1.5 プログラムの機能概要
このプログラムの核となる機能は、マイクロフォンを使用した音声認識と、テキストを音声に変換する機能です。ユーザーはウェブアプリ上で音声を録音し、それをテキストに変換することができます。さらに、変換されたテキストはさまざまな言語の音声に変換され、調整可能な声質、速度、ピッチで再生できます。
作成したWebアプリが下記のような構成で表示されます。IPアドレスが表示されますので、自動で移動しない場合はアクセスしてください。
第2章: 音声認識機能の実装
この章では、マイクロフォンを使用して話した言葉をテキストに変換する方法について説明します。音声はGoogleの音声認識サービスを使用して日本語のテキストに変換され、エラー処理も含まれています。これにより、ユーザーは自分の話した言葉をすぐにテキストとして確認できます。
コードの説明は下記のとおりです。関数でrecognize_speech()を作成し、音声認識を実施しています。
def recognize_speech():
r = sr.Recognizer()
mic = sr.Microphone()
with mic as source:
audio = r.listen(source)
try:
return r.recognize_google(audio, language="ja-JP")
except sr.UnknownValueError:
return ""
except sr.RequestError:
return ""
- def recognize_speech(): 音声認識を行う関数です。
- sr.Recognizer(): 音声認識器のインスタンスを生成します。
- sr.Microphone(): マイクロフォンを音声入力ソースとして使用します。
- r.listen(source): マイクロフォンを介して音声をキャプチャします。
- r.recognize_google(audio, language=”ja-JP”): Googleの音声認識サービスを使用して日本語のテキストに変換します。
- except sr.UnknownValueError: 音声が認識できなかった場合のエラー処理です。
- except sr.RequestError: 音声認識サービスへのリクエスト失敗時のエラー処理です。
2.1 音声認識のプロセス
この章では、プログラムにおける音声認識のプロセスに焦点を当てます。音声認識は、ユーザーの話した言葉をテキストに変換するプロセスです。このプログラムでは、speech_recognitionライブラリを使用しています。主な流れは以下の通りです
マイクロフォンの準備:音声認識の最初のステップは、マイクロフォンを使用してユーザーの音声をキャプチャすることです。このために、speech_recognitionライブラリのMicrophoneクラスをインスタンス化します。
音声のキャプチャ:ユーザーが「Record Speech」ボタンをクリックすると、マイクロフォンを介して音声がキャプチャされます。この段階で、周囲のノイズを低減するために、一定時間の「聞き取り」が行われます。
音声の解析と変換:キャプチャされた音声は、Recognizerクラスのrecognize_googleメソッドを使用してテキストに変換されます。このメソッドはGoogleの音声認識サービスを活用しており、高い精度のテキスト変換を提供します。
2.2 エラー処理
音声認識プロセスでは、いくつかのエラーが発生する可能性があります。例えば、音声が不明瞭であったり、マイクロフォンに問題があったりする場合です。このプログラムでは、sr.UnknownValueErrorとsr.RequestErrorを捕捉し、それぞれ「音声が認識できない」と「音声認識サービスへのリクエストに失敗した」場合の処理を行います。これにより、ユーザーはエラー発生時のフィードバックを受け取り、適切な対応を取ることができます。
2.3 言語設定と柔軟性
このプログラムでは、デフォルトで日本語の音声認識が設定されていますが、recognize_google
メソッドのlanguage
パラメータを変更することで、さまざまな言語に対応させることが可能です。これは、多言語環境や外国語学習において非常に有用です。ユーザーは必要に応じて言語設定をカスタマイズすることができ、より幅広い用途でプログラムを利用することが可能になります。
voice = st.selectbox(
'Voice',
['ja-JP-KeitaNeural', 'ja-JP-NanamiNeural', 'en-US-JessaNeural',
'zh-CN-XiaoxiaoNeural', 'zh-CN-YunyangNeural', 'ko-KR-SunHiNeural']
)
2.4 ユーザーインタラクション
Streamlitを使用することで、この音声認識プロセスは直感的でユーザーフレンドリーなインターフェースを提供します。ユーザーは単に「Record Speech」ボタンをクリックするだけで音声認識を開始でき、認識されたテキストは即座に画面上のテキストエリアに表示されます。このインタラクティブなアプローチは、初心者にとっても理解しやすく、効率的な音声入力の方法を提供します。
例えば、Record Spechのボタンを配置するには下記プログラムで配置できます。ここでは、st.buttonを押された場合、recognize_speech()の関数が実行されるように設定しています。
if st.button('Record Speech'):
recognized_text = recognize_speech() # 音声認識関数を呼び出し、結果を取得
else:
# セッション状態から以前の認識テキストを取得
recognized_text = st.session_state.get('recognized_text', "")
2.5 実践的な応用例
実際の応用として、この音声認識機能はビジネスミーティングや講義のメモ取り、さらには言語学習の発音練習などに有効です。たとえば、会議中に発言をリアルタイムでテキスト化し、記録として保存することができます。また、外国語の発音を練習し、即時フィードバックを得るためにも使用できます。このような使い方は、効率的なコミュニケーションや学習プロセスに大きく貢献します。
さらには、テキストを翻訳のライブラリであるGoogletransを使用することで、テキストを英語に変換し、この言葉の音声を再生することもできます。
第3章: 多言語テキストから音声への変換
このプログラムの最大の特徴は、中国語、韓国語、英語を含む多言語でのテキストから音声への変換機能です。ユーザーは音声の声質、速度、ピッチを調整することができ、これにより自然な音声を生成することが可能です。さらに、生成された音声はウェブアプリ上で直接再生することができます。
コードの説明はこのようになります。
if st.button('Generate Speech'):
rate_str = f"{rate:+}%"
pitch_str = f"{pitch:+}Hz"
communicate = edge_tts.Communicate(text, voice, rate=rate_str, pitch=pitch_str)
asyncio.run(communicate.save(output_file))
st.audio(output_file)
- if st.button(‘Generate Speech’): 「Generate Speech」ボタンが押された時の処理です。
- rate_str = f”{rate:+}%”: 音声の速度設定を文字列に変換します。
- pitch_str = f”{pitch:+}Hz”: 音声のピッチ設定を文字列に変換します。
- edge_tts.Communicate(…): 音声合成を行うための設定をします。
- asyncio.run(…): 非同期処理で音声ファイルを生成し保存します。
- st.audio(output_file): 生成された音声ファイルをウェブアプリ上で再生します。
3.1 多言語テキストから音声への変換
この章では、プログラムにおけるテキストから音声への変換機能、特に多言語対応の側面に焦点を当てます。Edge TTSライブラリを使用して、このプログラムは日本語だけでなく、中国語、韓国語、英語など複数の言語でのテキストから音声への変換をサポートしています。この多言語対応は、グローバルなコミュニケーションや言語学習において非常に価値があります。
今回のプログラムではVOICEを選択することで、日本語・英語・中国語、韓国語を選択可能です。また、男性・女性なども選択することができます。
Command promptで下記コードを実行することで、声のリストを確認することができます。
!edge-tts --list-voices
3.2 音声合成のカスタマイズ
ユーザーは、声の質、話速、ピッチを調整することができます。これにより、生成される音声をより自然に聞こえさせたり、特定のニーズや好みに合わせてカスタマイズすることが可能です。たとえば、落ち着いたナレーション用の音声、明るく活発なキャラクターの声、または特定のアクセントを持つ声など、さまざまな種類の音声を作成できます。
3.3 音声生成のプロセス
音声生成のプロセスは、ユーザーがテキストエリアに入力したテキストを基に行われます。テキストが入力された後、「Generate Speech」ボタンを押すと、選択された言語と声質設定に基づいて音声が生成されます。このプロセスでは、rate(速度)とpitch(ピッチ)のパラメータも考慮され、これらはスライダーを動かすことで調整できます。
下記のRate, Pitchを変化させることで、音声の種類を変えることもできます。
Rate20, Pitch=20の”ja-JP-KeitaNeura”の音声
Rate20, Pitch=-60の”ja-JP-KeitaNeura”の音声
このように、大きく音声を変えることができます。
3.4 多言語サポートの重要性
多言語サポートは、多様なユーザーのニーズに対応するために重要です。例えば、英語を母国語としないユーザーが自分の言語でテキストを入力し、英語の音声を生成して発音を学ぶことができます。また、異なる言語圏の視聴者に向けたプレゼンテーションや、言語教育ツールとしても有用です。
第4章: 実践的な使い方と応用
最後に、このプログラムをどのように実用的に使うかについて紹介します。例えば、外国語学習の際に発音練習のために使ったり、多言語でのプレゼンテーション資料を作成する際に役立ちます。また、初心者でも簡単にカスタマイズできるため、さまざまなシナリオでの活用が可能です。
4.1 実践的な使い方の探求
第4章では、StreamlitとEdge TTSを用いたこのプログラムの実践的な使い方に焦点を当てます。このプログラムは、言語学習、ビジネスプレゼンテーション、パーソナルアシスタントの開発など、多岐にわたる用途に応用できます。具体的には、言語学習者が発音を練習するために使ったり、多言語でのプレゼンテーション資料を作成する際に役立ったりします。
4.2 プログラムのカスタマイズと拡張
このプログラムの美点は、そのカスタマイズ性と拡張性にあります。初心者でも基本的なプログラミング知識があれば、このプログラムを特定のニーズに合わせて調整することが可能です。例えば、異なる言語オプションの追加、ユーザーインターフェースのデザイン変更、あるいは追加機能の組み込みなどが考えられます。
4.3 多言語コミュニケーションの促進
このプログラムは、多言語を扱う環境でのコミュニケーションを促進します。例えば、国際的な会議やイベントで、参加者が各自の言語で発言し、プログラムを使用してリアルタイムで他の言語に変換することが可能です。これにより、言語の壁を越えたスムーズなコミュニケーションが実現されます。
4.4 個人用途での活用
個人的な用途においても、このプログラムは大いに役立ちます。例えば、自分の日記を異なる言語で音声化して楽しむ、趣味のポッドキャストを多言語で制作する、あるいは家族や友人への多言語でのメッセージ作成などが可能です。これにより、個人の創造性や表現力が豊かになります。
4.5 教育分野での応用
教育分野では、このプログラムを使用して言語学習の教材を作成したり、多言語での授業資料を準備したりすることができます。生徒たちは実際の発音を聞きながら、異なる言語の学習に取り組むことができ、より効果的な言
語習得が期待できます。また、教師はこのツールを活用して、授業の内容をさまざまな言語で生徒に提供することができ、多文化教育の推進に寄与します。
4.6 経験と知恵を生かしたアドバイス
音声合成技術を活用する際には、聞き手の文化や言語の特性を考慮することが重要です。例えば、教育目的で使用する際には、対象言語の発音やイントネーションを正確に表現することが求められます。また、ビジネス用途では、プロフェッショナルで聞き取りやすい音声を選択することが望ましいでしょう。私の経験から言うと、聞き手のニーズに合わせた音声設定を行うことで、より効果的なコミュニケーションが実現されます。
4.7 プログラムの将来性と拡張
このプログラムは、現在の技術を基にしていますが、将来的にはさらなる進化が期待されます。例えば、より自然な音声合成技術の導入、追加言語のサポート、AIによるコンテキスト理解の統合などが考えられます。これにより、より多くのユーザーがこのプログラムを利用して、さまざまな目的でのコミュニケーションや表現活動を行うことができるようになるでしょう。
このプログラムは、言語の壁を越えてコミュニケーションする手段を提供するだけでなく、テクノロジーの進歩を通じて人々の生活を豊かにする可能性を秘めています。初心者から上級者まで、幅広いユーザーがこのツールを利用して、それぞれの目的やニーズに合わせた創造的な作業を行うことが可能です。