クーの自由研究

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

計算機音楽の自由研究(実験:その2)完成したサウンドデータベースを機械学習してみる

はじめに

最近はブログの日記形式を「完全無視」して、やっているお題についてブログを2~3日もしくは1週間くらいかけて、実況で修正していくような書き方をしています。書きなぐりなので、一貫性はなくなりますが、逆にリアリティがでる感じがしています。

f:id:np2LKoo:20170730235337p:plain

さて、ボクの「サウンドデータベース」は中止となりましたが、NSynth Datasetからの「サウンドデータベース」への変換はほぼ完了しました。まだ完成品ではないですが、ドラフト版をアップしています。

np2lkoo.hatenablog.com

30万件のデータを扱ったので、大量データ特有の問題がありましたが、それなりにおもしろかったです。タグ部分が間違っているので、修正が必要ですが、自己符号化器での学習は可能なので実験を開始します。

予想/予定

(その1)と同じくらいにそこそこのサウンド、そして気持ち悪くしたような音になると予想します。元のサンプリングレートがかわりますが、結局4kHzにリサンプリングしてから学習するのでそんなに結果がかわらないとおもわれます。

とにかくできたので「使ってみたい」というそれだけの動機です。

この実験を通して、以下の2点をすすめたいです。

(1)「学習が進むと波形のゼロポイントがずれる」件の解決

(2)「音の機械学習の実験レポートフォーマット」の作成(試行と決定)

すこし歯ごたえがある内容なので、そこそこ期間がかかると思いますが、順次報告していきます。「サウンドデータベース」については「タグ情報の問題があるにせよ」ひと段落して、しばらくは上記2点に集中しようと思います。

実験結果

既にできているプログラムにつなぐだけなので、やるのは簡単なのですが、あまりうまくいってません。

・音程はそれなりに聞こえるが、正直微妙

・前回ほどには音が元の音と似ない(前回はピアノだけだったので、特徴の絞り込みがそれなりにできていたのかもしれません)

・音をまとめるのにそこそこ手間がかかるので、もう少状況がはっきりしてからまとめます。

→音が長くなったので、よりフィルタが合致しにくく、生成しにくい「感じ」。逆に現在より半分程度(0.8秒から0.4秒)程度に短くすれば、もう少しいい感じになるかも。

シンセサイザーの音が多数あるが、バリエーションに富みすぎており、、この学習がうまくいかない模様(傾向が違いすぎて、学習していかない感じ)

 →実験の結果よりも「レポートまとめ」と「ゼロ点補正」が課題ですが、そこまではいっていません。

中間考察

セロ点がずれる件について

これは完全にデータに起因するものでした。シンセサイザー系の音について、かなりとんでもないものが含まれています。(グレー部分がエンベロープ、青色が立ち上がり付近波形拡大、赤が周波数(フーリエ変換)です。f:id:np2LKoo:20170803195934p:plain

こんなのがそこそこあったりするんです。ゼロポイントがずれる学習をするのも理解できます。

 ・ゼロ点補正については「音」であることを前提に、1Hz以下について重み「W」についてフィルタをかける方向でやってみます。また、0.8secは長いので、いくつかのフレームに分割して学習するか、もっと短くして学習してみます。(今回の「波形直接学習」についてのみ)

・ただし、「自己符号化器」たるもの、最終的には「元の波形と同じ波形に戻す」ことをめざすべきなので、今後の改善によってどうればよいか考えます。この波形はgoogleからの挑戦状であると解釈しました。もしくは、「NSynth(magenta project)はこんな波形もたやすく扱える」というアピールかもしれません。どちらにせよ「受けて立ちます

実験レポートフォーマットについて(PDF編)

・レポートについてはやはりマルチメディアPDFがよさそうです。PyhonライブラリでマルチメディアPDFフォーマットに対応したライブラリは、いまのところ見つかっていないので、PDFフォーマットを解析してみます。

PDFフォーマットは(PDF)PDF Reference sixth edition – Adobe Portable Document Format Version 1.6, Adobe Systems Incorporated (ISO 32000-1:2008)の規格になっているので解読します。この1.6以降が基本的なマルチメディアフォーマットを全般的にサポートしているようです。Sound自体は1.2以降でサポートしているようなので結構古いです。規格はともかくSoundの再生は、Adobe AcrobatかFoxitReaderでできるようです。(FoxitReaderは無償版で確認。サウンドが簡単な操作で魔法のように埋め込めます。Adobe AcrobatかFoxitReaderでサウンドの再生が問題なくできるのは見つけれていません。Microsoftのブラウザプレビュアでは音再生できませんでした。)これでやってますが、いちいち操作は面倒なので、プログラムで直接PDFを作成する方法を確認します。

f:id:np2LKoo:20170801193040p:plain

レポートのフォーマットはMNISTの数字学習のレポートフォーマットをベースに変更していこうと思います。エンベロープが分かったほうがいいのか、拡大した波形がわかったほうがいいのか、あるいはフーリエ変換した周波数がわかったほうがいいのか、悩みどころです。まずはこの調整をがんばります。

昨年はMNIST版のレポート作成でmatplotlibはかなり勉強しましたが、すっかり忘れてしまいました。再入門です。エンベロープを背景画像のようにしてその前に音の立ち上がり部分を拡大して重ね、さらにフーリエ変換図形を重ねてみます。こんなに重ねて、小さい画像でちゃんと見えるか疑問ですが、まずは大きめの画像で練習でやってみます。

こんなとき大活躍するのがJupyterです。コード書いてすぐやってみて直して。。。をブラウザですぐできるのでとても便利です。PyCharmばっかりだったので、Jupyter notebook は久しぶりに使いました が、いいですね~。ベタですがどんな感じになりそうか、とある音をプロットしてみました。

Jupyter notebookでいろいろやってみてる例↓

f:id:np2LKoo:20170802222941p:plain

これをベースに作成してみます。

実際の大きさに近い領域に書くとこんな感じです。

f:id:np2LKoo:20170802224807p:plain

多少微妙ですが、意図に近い表示になっています。なんとなくどんな音かは想像できるくらいだと思います。周波数が高いと青い波がつぶれるので、自動調整も検討します。(青色は立ち上がり部分のオシロスコープ的な表示を意図しています)

次はサウンドレポート用のPDFの実験(確認)です。

PDFにサウンドを貼ってみました。再生できるか確認します。(PDFの画像をクリックすると音がでます)

サウンドを貼ったPDFサンプルのダウンロード (GoogleDriveに格納)

ダウンロードした後、Adobe ReaderかFoxit Reader(Free)で開いて、波形図形の部分をクリックすれば、音が再生できます。(ただし環境に依存します)ボクの環境ではAdobe ReaderかFoxit Reader(Free)以外ではサウンド再生できませんでた。

セキュリティの観点から必ず再生するかどうかをその都度確認してくるようです。(例えばFoxit Readerでは一度「この文書を閉じるまで選択を記録する」をチェックしてOKすれば「そのドキュメントをひらいている間は」2回目以降確認なしで再生できるようです)AdobeReaderでは文書の信頼操作が必要なようです。

確認実験のため、 実際のレポートよりかなり図形を大きくしています。

 実験レポートフォーマットについて(matplotlib編)

どのようなフォーマットにせよ、ボクの実験では一旦matplotlibでレポートを作成することになります。地道にコーディングしていきます。

今の出来具合は↓こちら(7/31の実験結果をレポート化しています)。

f:id:np2LKoo:20170805113842p:plain

 

実験内容が悪く、桁あふれしている部分がありますが、いちおうこれで仮完成にします。

 

なお、matplotlibでイベントハンドリングできるとありました。実験してのすぐの音確認はmatplotlibで出力した画像をクリックするとすぐに確認できるかもしれません。

matplotlibの画像クリックで音を出せるかやってみます。

やってみました。matplotlib描画(通常画面)では、問題なくマウスイベントを拾うことができました。(fig.canvas.mpl_connect('button_press_event', onclick) みたいなコード)また、音出力することもできました。(昨年の「準備(その5)」のみたいなコーディング)流石Python!なんでもありです。

ソースコードは改めて完成版のレポートプログラムにて公開予定です。(matplotlib描画をクリックして音を出すだけなら15行程度でした。)

レポートフォーマットの方向性

(1) 実験してすぐのレポートレベルの音確認はmatplotlibでおこなえるようにします。(該当波形の部分をクリックするとその音がでる)

(2)実験後もピクルス(アーカイブ)データがあればmatplotlibでの再描画+音出力を可能にします。

(3)最終的なサウンド実験のレポート公開は(pythonプログラムでないと確認できないのは辛いので、matplotlibではなく)マルチメディアフォーマットPDFにしてレポート公開を目指します。(ただしPDFフォーマットはおもいのほか入り組んでいるので、とても苦労する予感がしています。(ツールを介さず)PythonからPDFファイルを出力することを考えています。)

調整内容

実験結果がかなりシビアであることがわかりました。特にシンセサイザーの学習が(バリエーションに富みすぎているので)厳しいことがわかりました。この状態でレポートの調整もしにくいため、実験を調整のうえ、あらためて、レポート調整をすすめます。

ゼロポイントがずれる件は学習データ起因のようにおもわれますが、「どんな入力であっても、入力に近い値にデコードできる」のが正しい「自己符号化器」のありかただと思いますので、改善をつづけます。具体的にはフレーム分割と部分学習化による効率化を考えています。こちらは別の実験にて実施します。

考察

再生音を聞くぶんには「なんとなく、元の音を反映しているように思えましたが、結果をみるとまだまだです。」レポートのみやすさと、実験内容の両方に問題がありそうなので、一旦「準備」フェーズで調整してから改めて、考察をします。

申訳ございませんが、考察保留のまま、実験継続します。

将来ユーチュバーになりたいかえる

ボクは将来(かえる界の)ユーチューバーになりたいと思っています。「実験」と「エンターテインメント」と「最新テクノロジー」と「ゲーム」や「アニメ」の融合と、ある程度の(ほどよい)「狂気」は、マッドサイエンティストをめざしているボクにぴったりです。ボクのコミュニケーション能力の欠落はいかんともしがたいですが、そこはテクノロジーで補いたいと思います。なお、ボクはかえるなので携帯をもっていません。人類の方を2名ほどそそのかして協力をあおいで今話題の「ヒカキン【プレゼント】ニンテンドースイッチ&スプラトゥーン2 10名様!!」に応募しました。宝くじより確率が低い噂ですが、当たる気がしてなりません。

アニメをみのがしたかえる

あまりに自由研究に没頭するあまり、アニメを観れていません。Pythonのあまりは%、甘利大先生は東大名誉教授にして、理研の特別顧問な、計算論的神経科学研究者です。t取り乱しました。。。「メイドインアビス」の放送をしているのも知らないくらい、世間から離れていました。最近テレビを全くみません。(BDは見ますが)

miabyss.com

いまからでも遅くはありません!見ます!!BDも予約しなくっちゃ!!!「次期PCつみたて貯金」に手を付けでもゲットするぞぉ!こうなっら、ついでに(いやまずはこちらから!)「人類は衰退しました」の円盤もゲットだ!!!!計算なんて、紙と鉛筆で十分だ~~~勾配は分度器ではかるぞ~~~。。。お!~~~。きみにきめた!ゲットだぜ!

君の名は。」を注文し忘れていたかえる

君の名は。」発売日だけど届かないな。。。と思っていたら、注文してませんでした。あわてて注文して、明日届く予定です。(予定とおり届きました)

f:id:np2LKoo:20170731000131p:plain

もっといろんな自由研究をしたいかえる

実際に市販のもののくみあわせで可能な実験をしたいです。「光速の測定」は(すみかの廊下は短いですが)自由研究レベルでできそうな気がしています。残念ながら実験キットシリーズにはないようなので、自作になると思います。実験材料を物色中です。

ちなみに高校生でやった方がいて精度はともかく、「成功」した情報がありました。

量子力学の2重スリット実験もやってみたいです。(やりたいのは光子1個レベルでの2重スリット実験なので、こちらは市販品レベルでは無理だと思っています)

オーダレベルで計算したけど、やっぱり光は早いですね~

仮に秒速30万キロメールの場合、192kHzのオーディオインターフェースで簡易オシロスコープを作ったとしたら、192kHzの1波形で進む距離は156.25mです。鏡で折り返す方法でやるとしたら、半分の78.125mの廊下が必要です。これは無理です。

レーザーポインタなどを使って、10往復を鏡で折り返せれば(19回反射:鏡が19枚。。。)、7.8125mの廊下でできます。いくらレーザでも現実的ではありません。

100MHzのオシロスコープを買えば、3m(折り返して1.5m)あれば測定できる計算です。

ちなみに100MHzのオシロスコープは普通20万円以上する模様です。

数キロメートルはなれた反射をつかえれば、歯車を回して測定できるようです。(こちらが本家ですが。。。)

NHKの実験は見て見たかったです。

www2.nhk.or.jp

ちなみに、光は媒体によって速度がかわるそうです(そういえばそう習った気がします)。媒体を工夫すれば、秒速17mくらいまでにできるようです。なお、秒速5cmならともかく、「ゼロ」はオカルトのような気がします。

下の「話題」の「光子の形状を変化させる」という記述からして「オカルト」っぽいですがとても興味があります。(何度もいいますがオカルト大好きです)

wired.jp

それはともかくボクに↓を理解することができる日はくるのでしょうか。。。

EMANの物理学・相対性理論・光速度の変化

 なお、光速実験の自由研究は資金不足のため、あっけなく諦めます。