クーの自由研究

素朴な疑問を実験します。ボクと一緒に螺旋階段を頂上まで登ってみませんか?貴方の影についていきます。

計算機音楽の自由研究(準備:その4.1)データセットとデータベース、どっちが好き?

どっちもデータ

f:id:np2LKoo:20170729011358p:plain

さて、(個人的な)衝撃の発見からはや1日、さっそくNSynth Datasetを扱い易いように複数ファイルをまとめた「データベース」に変換してみます。

何度も貼っていますがNSynth Datasetはこちら。

magenta.tensorflow.org


30万ファイル近くもあると読むのにとっても時間がかかるので、ボクのサウンドデータベースのフォーマットに変形してから実験します。改変・2次加工のものを再配布するのも自由なのはとても助かります。実験のための前処理準備です。
データの「set:集まり」をメモリに収まるくらいに短くして、数ファイルの「base:基盤」にまとめるだけの作業です。

なお、機械学習向けデータセット/データベースのまとめは下記紹介が秀逸です。アイコンがとてもカッコイイです!

github.com

データセットから稲作データベースへ

ファイルが30万件もばらけているとアクセスするだけで本当に日が暮れるので、まとめます。16Bit 16kHz 4 秒のものを16Bit 16kHz 0.8秒にします。0.8秒の場合、サンプル数は12,800です。

なお、テンソルフロー利用者の方はこんなページなど見ずに、オリジナルサイトからtfrecord形式のものをダウンロードしたほうが幸せです。
末尾のサンプル数800が減衰区間で、最後の32サンプルが完全無音区間です。
訓練データは289,205音なので、145,542音と143,663音に分割します。

Database ファイル 格納音数 想定容量 総再生時間 ダウンロード(ドラフト版)
訓練データベース1 145,542音 3.72GB 32:20:33 ドラフト2017.08.15版TRAIN1
訓練データベース2 143,663音 3.70GB 31:55:30 ドラフト2017.08.15版TRAIN2
検証データベース 12,678音 326MB 2:49:02 ドラフト2017.08.15版VALID
試験データベース 4,096音 105MB 0:54:36 ドラフト2017.08.15版TEST

の4ファイルにします。すべてWaveファイルです。

※現在Googleドライブへのアップロードから大容量データのダウンロード試験中です。

リンクがあれば、ダウンロード可能です。tar.gz形式で解凍可能です。

(追記)訓練データベースは1フォルダに29万ファイル程度あるせいか、処理中盤より1件あたりの処理が異常にかかっています。訓練データベース1は89000件あたりまで処理が進んでいますが、毎秒1.5件程度のスピードまで低下しています。(原因不明:ちなみに初盤は秒速30件程度。)減衰率から数日はかかると見込んでいます。その間メインマシンが占有となるのは痛いです。メインマシンを他用途で使う場合は中断するかもしれません。ちなみにもっと非力なサブマシンでは4時間程度でブルースクリーンみたいのがでて死にました。(エラーはメモリアクセス系なので、原因はほぼメモリ不足です)また、最後にどうしてもb''.join()演算をする必要があるのですが、1GB超えのb''.join()は成功したためしがないので、この数日を棒にふる可能性は大きいです。中止して10000ファイルくらい毎に処理してから結合する2段階にするよう、停止ボタンを押すか思案中です。(追記ここまで)

(さらに追記)あ、ほれ、ぽちっとな。(さらに追記ここまで)

(さらにさらに追記)指数的に遅くなる原因を特定し、改善、リトライ中。チューニングの仕方を学習できました。(さらにさらに追記ここまで)

ファイル内容は未テストなので、ドラフト版ですが、だいたいOKだと思っています。

(さらにさらにさらに追記)と思っていたのですが、ボクのやることですから問題がありました。ドラフト版はタグ内容の順番に狂いがありました。確認ののち差し替えます。(さらにさらにさらに追記ここまで)

(さらにさらにさらにさらに追記)

2017.08.15版として問題点を修正したものをアップしました。

(さらにさらにさらに追記ここまで)

ダウンロードファイルは クリエイティブ・コモンズ CC BY 4.0 のライセンスです。
情報は汎用的なJSON形式から単純なリスト形式に変換して、Waveファイル内に格納しています。
JSON形式なので、そのままでもいいような気がしますが、非力なボクのパソコンではきついので、データベースに直接格納します。

なお、データベースは、NSynthDatabaseを「コンバーしただけ」のもので、前のブログでの「つくるのやめた」宣言とおり、ボクの「作った」データベースではありません。

データベース情報をWaveファイルの「ソース」欄(ISRC)に格納 (このタグのみJSON形式)
  {"SamplingRate": サンプルレート, "BlickSizeOfSample": 1音のサンプル数, "DecayOfSample": 減衰のサンプル数, "SilentOfDecay": ディケイ末尾部分の無音サンプル数, "TotalNoteCount": 音の数, "Instrment":{"楽器番号":["楽器名",楽器個数,音個数],...,"99":["end",0,0]},"Type":["種別文字列",...,"End"],"Quality":["品質文字列",...,"End"]}
楽器名情報をWaveファイルの「ソフトウエア」欄(ISFT)に格納
  [カテゴリ番号,ソース番号,音源名,ソース種別],...
各音情報をWaveファイルの「コメント欄」欄(ICMT)に格納
  [カテゴリ番号,ソース番号,N音階,V強さ;Q品質],...

 データベースとのマッピング(JSONデータ-リスト変換)

(例)"guitar_acoustic_001-082-050"

Koo's Sound

 DataBase項目

Goo...'s NSynth

Dataset項目

コメント
カテゴリ番号 instrument_family 番号 (ex.3 ) 3:guitar
(ソース番号)導出

ファイルの楽器順

(読み込みカウント順)

番号 (ex. 1) カテゴリ番号毎に0から連番
(絶対格納番号)導出 note 番号 (ex. 16629)
音源名 instrument_str 文字 (ex. guitar_acoustic_001)
ソース種別 instrument_source 番号 (ex. 0) 0:acoustic
N音階 pitch N番号 (ex. 82) 82:A#4
V強さ velocity V番号 (ex. 50) 0-127:Midi Velocoty 
Q品質 qualities

Q番号 (ex. 128) [0010000000]:10Bit

(番号変換:IndexをBit位置とみなす)

(フル音名)導出 note_str 文字 (ex. guitar_acoustic_001-082-050)
[カテゴリ文字列,...] instrument_family_str [bass,brass,flute,guitar,keyboard,...]
[種別文字列,...] instrument_source_str [acoustic,electronic,synthetic]
[品質文字列,...] qualities_str [bright,dark,distortion,fast_decay,...]
(相対格納番号)導出 instrument 番号 (ex.39)

データベース変換プログラムは最終的にGitHUBに貼ります。(時期未定)

Google Brain projectのmagenta teamは今後何しそう?

ボクがやりたいこととmagenta teamのやりたいことと志向のベクトルがほぼ同じ感じがしています。その「妄想想定」がただしければ、おそらく以下のことをしていくと思われます。

音のハイレゾ

画像処理のハイレゾ化はすでにGoogle Researchの「RAISR」でやっていますが、音の学習によるハイレゾ機械学習や深層学習でやると思います。RAISRの紹介論文はこちら。より高度な画像処理の紹介論文はこちら。う~ん。ブレードランナーの世界。

複数楽曲の特徴交換、かけあわせ

ゴッホ風絵画みたいな特徴掛け合わせをすると思います。だれでもまだできないのかな?と思っていることだと思います。ある曲の構成と別の曲のモチーフかけあわせジャンルの変換を行い、最近のヒット曲のトレンドにGANするみたいなことをやると思います。ビートルズモチーフ的なキングクリムゾン曲構成風ヒップポップとか(それぞれのファンから怒られそう)

特定ミュージシャンの演奏の特徴をとことん学習

自分のパートを弾けば好みのミュージシャン(風のユニット)が自動伴奏してくれるようなやつ。ギターをつまびいただけで、ジャコパストリアス(風)学習済ユニットがフレットレスベースで伴奏してくれるなんて気絶しそうです。普通に楽譜入力をしてもそのミュージシャンが演奏しているように聞こえてしまうとか。

音声、楽音のほぼ完全モーフィング

既存動画のを別の口パクや表情でリアルタイムに変形する技術はかなりのレベルまできていますが、同様に声をある特定の人に似せることをすると思います。もしくはある楽音を別の楽音に完全置き替えするなど。

曲の高度トラッキング分離と再構築、自動リミックス

トラックダウンされた既存の曲から各楽器や音声のトラックを再分離してバランスや構成をかえて好みにあわせて自動でリミックスするなど、敷居は高いですが、やってくれると思います。

特定作曲家の作曲特徴抽出と創生

特定作曲家の公開全作品を学習して、異なる時代に生まれていらどんな曲を作曲するかのシミュレーションをするでしょう。ストラビンスキーがバロック時代に生まれていたら?などトレンドを変化させて創生すると楽しそうです。ベートーベンが第10交響曲をつくったとしたらどんな感じ?など、など

市販の脳波測定装置を使ったフィードバック作曲学習

自動作曲をした結果が良いか悪いか(好みかそうでないか)を市販レベルの脳波測定装置と連動してフィードバックをかけ、その個人の好みの作曲を学習していくようなものを開発しそうです。近い将来、新Googleグラスは簡易脳波センサーを備えると予想しています。(最初はオプションアタッチメントにするはず)それにしてもGoogleグラスのデザインは酷い!あんなのだれも欲しいと思わないですよね。わざとなのかなぁ。。。

曲と画像の関連学習

この曲を聴くとどんな風景や情景を思い浮かべるか?の観点で楽曲と画像(もしくは動画)の関連学習を行い、適した画像を選択するなんていうことをやりそうです。学習がすすめば曲を入力すると情景を生成出力するとかまでやれたら結構インパクトあると思います。逆に映像入れたら音楽にするなていうこともやると思います。映画のサウンドトラックを自動生成するとか。映像でできるなら、小説でもやるでしょう。

など、こんなのを考え始めるとキリがないので、このへんで。