概要
ボイスチェンジャーをpythonで作ります。
やることは、以下の2つ。
- リアルタイムで音声を処理する
- 音声を変換する
1についてはsounddeviceというライブラリを使います。
1 |
pip install sounddevice |
2はピッチシフトという技術を使います。これは入力された音声に対して、全体の長さはそのままにピッチを変化させる技術です。オクターブを上げたり下げたりするイメージです。
こちらはlibrosaを用いて簡単に書けます。librosa.effects.pitch_shiftを用います。
1 |
pip install librosa |
例えば、自然な異性の声を出したい場合や、特定の個人の声質で話したい場合などには、深層学習を用いた手法が必要になります。
その場合には処理にある程度時間がかかるので、リアルタイムな会話などはまだ難しいと思います。
プログラム
実際のプログラムは以下の通りです。
1オクターブあげて音声を変換しています。警察24時での犯人の声みたいになります。
パソコンで動かす場合は、ハウリングしないようにイヤホンを付けるなどの対策が必要です。
入力、出力ともに2チャンネルになるようにしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import sounddevice as sd import librosa fs = 48000 # Hz duration = 10 # seconds def callback(indata, outdata, frames, time, status): outdata[:] = [[_,_] for _ in librosa.effects.pitch_shift(indata.T[0], fs, 12)] # 12オクターブあげる with sd.Stream(channels=2, callback=callback, latency=0.1, samplerate=fs): sd.sleep(int(duration * 1000)) |
コメント
すごく参考になりました。
12オクターブ上げると書いてますが、正しくは1オクターブ(12半音?)だと思います。
1オクターブ=ドレミファソラシド=周波数が2倍
なので、12オクターブあげると周波数が4096倍になってしまいます
こんにちは!
指摘ありがとうございます。修正しました🙌