【彻底解説】FFTとウェーブレット変換が実現するリアルタイムボイスチェンジャーの音声処理の秘密
あなたがオンラインゲームや配信で声を変えたいと思ったとき、遅延なく自然な音声変換を実現する裏側には高度な信号処理技術が動いています。voice-changerはリアルタイム音声変換を可能にするオープンソースプロジェクトで、その核心にはFFT(高速フーリエ変換)とウェーブレット変換という二つの基盤技術があります。この記事では、これらの技術がどのように音声をリアルタイムで変換しているのか、プロジェクト内の具体的な実装コードと共に解説します。
FFTによる音声周波数解析
FFT(高速フーリエ変換)は、時間領域の音声信号を周波数領域に変換する技術です。これにより、人の声の基本周波数(ピッチ)や倍音成分を抽出することが可能になり、voice-changerではこの技術を用いてリアルタイムに音声の特徴を分析しています。
周波数解析の実装箇所
RVC(Real-time Voice Conversion)モジュールのピッチ抽出処理では、FFTをベースとした音高検出が行われています。server/voice_changer/RVC/pitchExtractor/CrepePitchExtractor.py のコードを見てみましょう。
f0, pd = torchcrepe.predict(
audio.unsqueeze(0),
sr,
hop_length=window,
fmin=f0_min,
fmax=f0_max,
model="full",
batch_size=256,
decoder=torchcrepe.decode.weighted_argmax,
device=self.device,
return_periodicity=True,
)
このコードでは、torchcrepe.predict関数を使用してFFTに基づく音高分析を行っています。hop_lengthで設定されたウィンドウサイズにより、音声信号を小さなブロックに分割して周波数分析を実施しています。これにより、約20ms間隔でリアルタイムに音声の周波数特性を抽出することが可能になっています。
周波数からメルスケールへの変換
人間の聴覚特性に合わせて周波数をメルスケールに変換する処理も行われています。
f0_mel = 1127.0 * np.log(1.0 + f0bak / 700.0)
f0_mel = np.clip(
(f0_mel - f0_mel_min) * 254.0 / (f0_mel_max - f0_mel_min) + 1.0, 1.0, 255.0
)
この変換により、人間の聴覚が敏感な周波数帯域をより詳細に分析することができ、自然な声質変換が実現されています。
ウェーブレット変換による時間周波数解析
FFTは周波数解析に優れていますが、時間的な変化を捉えるのが難しいという欠点があります。そこでvoice-changerでは、時間と周波数の両方を同時に解析できるウェーブレット変換も活用しています。これにより、子音のような短時間で周波数が大きく変化する音声成分も正確に捉えることができます。
ウェーブレット変換の実装
DiffusionSVCモジュールでは、ウェーブレット変換を用いた音声分析が行われています。server/voice_changer/DiffusionSVC/pitchExtractor/DioPitchExtractor.py におけるピッチ抽出処理を見てみましょう。
_f0, t = pyworld.dio(
audio.astype(np.double),
sr,
f0_floor=self.f0_min,
f0_ceil=self.f0_max,
channels_in_octave=2,
frame_period=(1000 * hop_size / sr)
)
f0 = pyworld.stonemask(audio.astype(np.double), _f0, t, sr)
このコードで使用されているWORLD音声分析合成システムは、ウェーブレット変換を応用した音声分析を行っています。frame_periodで設定された時間間隔で、周波数特性の時間的変化を詳細に追跡することができます。
時間分解能と周波数分解能のバランス
ウェーブレット変換の特徴は、周波数によって時間分解能を変えることができる点です。低周波数(基本周波数に近い成分)については時間分解能を下げて周波数分解能を上げ、高周波数(倍音成分)については時間分解能を上げて周波数分解能を下げることで、音声全体の特徴を効率よく捉えています。
リアルタイム処理のための最適化技術
FFTとウェーブレット変換はともに計算量が多いため、リアルタイム処理を実現するためには様々な最適化が必要です。voice-changerでは、以下のような技術を用いて処理速度を向上させています。
GPUアクセラレーション
server/voice_changer/RVC/deviceManager/DeviceManager.py では、GPUを活用した高速な音声処理を実現しています。特にディープラーニングモデルを用いた音声変換において、GPUによる並列処理が遅延を低減する上で非常に重要です。
バッチ処理とストリーミング処理
音声信号を小さなブロックに分割し、バッチ処理で並列計算することで処理速度を向上させています。例えば、CrepePitchExtractorではbatch_size=256と設定することで、複数の音声ブロックを一度に処理しています。
また、server/MMVCServerSIO.py で実装されているWebSocket通信により、音声データをストリーミング形式で送受信し、リアルタイム性を確保しています。
Dockerによる環境最適化
開発環境の構築を簡単にし、かつ再現性の高い処理を実現するために、Dockerを活用しています。docker/Dockerfile により、GPU環境や各種ライブラリが最適化された状態で音声処理を実行することができます。
実際のGUIによる操作例
これまで解説したFFTとウェーブレット変換による音声処理技術は、最終的にはユーザーが直感的に操作できるGUIから利用することができます。tutorials/images/RVC_GUI.pngに示されているRVCのGUIインターフェースを見てみましょう。
このGUIでは、ピッチシフト量やタイムストレッチなどのパラメータを調整することができます。これらのパラメータ調整が、背後ではFFTやウェーブレット変換による周波数特性の変更として実現されています。
まとめと今後の展望
voice-changerにおけるFFTとウェーブレット変換の応用について解説してきました。これらの信号処理技術があるからこそ、リアルタイムで自然な音声変換が可能になっています。
今後は、さらなる低遅延化や高品質化を目指した技術開発が行われる予定です。特に、オンデバイス学習によるカスタムボイスの作成や、より高度なノイズ除去技術の導入などが検討されています。
voice-changerの開発は活発に行われており、README.md や各種チュートリアル (tutorials/tutorial_rvc_en_latest.md) を通じて最新の情報を確認することができます。ぜひこれらのリソースを活用して、プロジェクトに貢献してみてください。
最後に、これらの音声処理技術を実際に体験してみたい方は、start2.sh を実行してサーバーを起動し、ブラウザから音声変換を試してみてください。リアルタイム音声処理の驚異的な進化をご自身の目で確認してください。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




