[TTS] Mel-spectrogram出力 → vocoder変換 のサンプル

「波形への復元」には、数学的な近似アルゴリズムである Griffin-Lim法 を使う

import librosa
import numpy as np
import soundfile as sf

# 1. アップロードされたファイルの読み込み
# path は実行環境に合わせて調整してください(通常はカレントディレクトリ)
file_path = 'speech.mp3' 
y, sr = librosa.load(file_path, sr=None) # sr=None で元のサンプリングレートを維持

# 2. Mel-spectrogram への変換
S = librosa.feature.melspectrogram(y=y, sr=sr, n_mels=128)
S_dB = librosa.power_to_db(S, ref=np.max)

# 3. 復元 (Griffin-Lim)
S_inv = librosa.db_to_power(S_dB)
y_inv = librosa.feature.inverse.mel_to_audio(S_inv, sr=sr)

# 4. 保存
sf.write('output_speech.wav', y_inv, sr)
print(f"'{file_path}' の処理が完了し、'output_speech.wav' として保存しました。")


output

Mel-spectrogramとは?: 音の強さを「時間」と「周波数」の2軸で表したものですが、周波数軸を人間の耳の特性に近いメル尺度に変換したものです。

Vocoder(ボコーダー)の役割: スペクトログラムから音声を復元する際、元の波形が持っていた「位相(Phase)」の情報が失われています。このサンプルで使った mel_to_audio(Griffin-Lim)は、その位相を推測して補完する簡易的なボコーダーの役割を果たしています。

より高品質にするには: 実用的なAI(TTSや声質変換)では、Griffin-Limの代わりに HiFi-GAN や BigVGAN といったディープラーニングベースのボコーダーを使って、より肉声に近い高品質な復元を行います。

位相推論に限界があるということですね。