機械学習で自分の歌声を色々な楽器音に変換できるTone Transfer


Googleの機械学習音楽プロジェクトMagentaから新しいウェブアプリの登場です。

Tone Transfer
https://sites.research.google/tonetransfer

Tone Transferとは

Tone Transferは、歌声や楽器音、その他あらゆるオーディオデータを他の楽器の音に変えるという、機械学習だかこそ実現できる新しいコンセプトの高度なプログラムとなっています。
文字で解説するよりもまずは動画でどんな事が行えるのか見てみましょう。
自分の歌を、フルート、サックス、トランペット、ヴァイオリンという4つの楽器音に変換してみます。

歌って変換実践してみたYouTube動画のリンクです
https://youtu.be/VILpOU5wJFI

録音はPCのマイクから行っていますが問題なく変換可能でした。
標準で用意されている入力用のサンプルでもわかりますが、歌声や楽器音だけでなく、手拍子や雑音など、音程のない音でも変換でき、それらしくもユニークな演奏になる様です。
注意点としては、入力オーディオは単音のみ認識で和音は不可です。
単音の歌などは問題ないですが、ピアノやギターで和音演奏は意図した通りの変換が行われません。
それでは実践方法を簡単に解説していきます。

1・まずは用意されているサンプルで視聴


サンプルは入力(変換元)が6種類、変換用楽器が上述したフルート、サックス、トランペット、ヴァイオリンの4種類用意されています。
どんな事ができるのか?まずは視聴をしてみてください。
自分の歌声など新たなレコーディングは入力の最下列にあるAdd your inputをクリックします。

2・自分の歌をレコーディング


Recordボタンで録音開始です。
他に既存のオーディオファイルをUploadボタンでアップロードし使用する事もできます。
気に入ったメロディー以外に、ドラムループや特殊音などをアップするのもあり得ない効果が出て面白いかもしれません。

3・変換


録音またはアップロードが完了するとTransformボタンが現れますのでクリックして変換を行います。
少し待つと変換が完了しますので左側のTransformationから楽器を選んで視聴する事ができます。
再生ボタンの脇にコントロール機能もあり、原音、変換のミックス量やオクターブなどを調整できるので色々試すと新たな楽器音を作る事などもできるかもしれません。

Pythonで希望の楽器音を使用した独自モデルの作成も可能です

今回のTone Transferはウェブアプリのため、TensorFlowおよびMagentaのjs(JavaScript)版です。
それ以外にTone Transferの元となったDDSP: Differentiable Digital Signal ProcessingというPython版プログラムのコードも公開されており、これを使用すると希望の楽器音を使用した独自モデルの作成も可能です。

DDSP: Differentiable Digital Signal Processing
https://github.com/magenta/ddsp
 

インストールのコード

sudo apt-get install libsndfile-dev
pip install --upgrade pip
pip install --upgrade ddsp

 
Process実践コード

import ddsp

# Get synthesizer parameters from the input audio.
outputs = network(audio_input)

# Initialize signal processors.
additive = ddsp.synths.Additive()
filtered_noise = ddsp.synths.FilteredNoise()
reverb = ddsp.effects.TrainableReverb()
spectral_loss = ddsp.losses.SpectralLoss()

# Generate audio.
audio_additive = additive(outputs['amplitudes'],
                          outputs['harmonic_distribution'],
                          outputs['f0_hz'])
audio_noise = filtered_noise(outputs['magnitudes'])
audio = audio_additive + audio_noise
audio = reverb(audio)

# Multi-scale spectrogram reconstruction loss.
loss = spectral_loss(audio, audio_input)

この辺りのコードの詳細は運営している音楽AIアカデミーでいずれ解説できればと思っています。
筆者は元(現役?)のギタリストでもあるのでギターに変換できるモデルの作成がまず思いつきますが、各種シンセ音などを使用し、電子音楽に実践的に使用するなども面白いと思いかもしれません。

最後に

GoogleのMagentaチームは長い時間をかけた待望のリリースである事、や、今後さらなる進化を匂わせる様なコメントをしています。
力を入れて行きたいという意思の現れでしょうか。
筆者も機械学習の音楽活用は単純な音楽生成よりも音響関連、あるいは両方の融合の方が可能性があると感じており、今後の展開を非常に楽しみにしています。