HELLO! AI ポッドキャスト

S35E03 (前座)音のはなし、コーディング編


Listen Later



ZENKEI AI ポッドキャスト、シーズン35は2022年11月30日に開催した ZOOMライブの模様です。
この日のテーマは「最近の宿題〜数理クイズ解答編ほか」でした。

エピソード3は、前座その2「音のはなし、コーディング編」です。


  • 当日の市來の発表資料




このブラウザでは再生できません。
再生できない場合、ダウンロードは🎵こちら


















ビデオ見れる人はこちらからご覧ください。




(以下は、OpenAI の Whisper を使って文字起こししたものを修正したものです。)

** 注:以下は未編集の草稿です **

こんにちは。ZENKEI AI FORUMです。

はい。こんばんはです。2022年11月30日。11月最後ですね、今日ね。 ZENKEI AI FORUM です。

分かった分かったと そういう注意は取り入れずに脇に置いといて実際にやってみようっていうのを やってみたということで 何にも外部ライブラリを使う必要はない です だから本質的には トーチだけインポートすればいいと 今ここで サウンドファイルっていうのを入れてますのは 解析するための 音ネタとして 音声ファイルをローカルに置いてあるやつを南パイのアレイ に読み込むためのライブラリとして使ってます これ ちなみに元は僕とかも使ってたことがあるlibsndファイルっていう 古き良きCのライブラリですけども音楽ファイルを読み込む部分 それのラッパーですね Pythonのラッパーにすぎません それで音楽のファイルを読み込んどいてステレオなんだけども片方の チャンネルだけにフォーカスして今のアルゴリズム 実際に複素数のオシレーターでその複素数Zっていうパラメーター を最適化するっていうフレームワークで実際にこのシグナルをどれぐらい いけるのか実際にやってみようってやってみたと 結果ですね シグナルの幅は4096ステップをターゲットにして最適化ループを回すと ロス が ミーンスクエアロス使ってますが 0.024までここはいったかな ちなみにサイクとしてですね Zだけ Zは言っているようにさっきも言ったように振動部分がZで表現 されていて 振幅の部分ね アンプリチュードの部分は Zのほうはできれば 1近くに収まってほしいみたいな話でしたねっていうことなんで ファクターAっていうのをかけたものをフィッティングしろっていう 問題にしてます だからパラメーターZとパラメーターAっていうのがある と こいつでフリクエンシーをプレディクションを作ってシグナルの設定はここに 書いてあるな A倍してるんですね元のこのライブラリーっていう か このプログラムが提供してるこれ素朴に複数のべきでリアルパート を覗いてるっていう式そのままを実装してるわけですね それに A倍してAっていうパラメーターも含めて最適化してるっていう フレームワークで そのオシレーターの数を今2個準備してフィッティング しろっていう問題で問題を解いて今各ステップでエスティメート されたフリクエンシーのオート明瞭周波数とそのアンプリチュード のパラメーターを表示するようにしてます 5000ステップいったらロス が0.024まで下がったと そうやってシンセサイズされたシグナルと オリジナルシグナルをプロットしたものはこれで青がターゲット のシグナルでオレンジがこの2つのオシレーターだけでフィッティング した結果 結構合ってると言えば合ってるの でもオシレーター2つ だから高々知れてるんで 今度は4世でオシレーター4つで同じプログラム を使ってフィッティングさせたらっていったらもうちょっと精度 っていうかロスが落ちて こんな感じになった ふむふむと じゃあボイスを6まで増やしたらどうなるって言ったらロスが0.007 まで落ちて ここら辺ぐらいまでできて でもよく見るとフリクエンシー 6つ オシレーター6つなんだけどもアンプリチュードはマイナスの やつとか出てるね これなんか僕適当に上にaかけてるだけとかって 言うんでもしかしたら絶対値とかしたほうがいい 2乗とかにしたほう がいいの いいやと思って 実験なんでこれでいいやと思ってします が 大体音フリクエンシーが鍵盤のミディーノートからどの音が鳴 ってるっていうのを取り出してるっていう感じですけども それなり に今ここで聞いてる音は大体取れてるんかなっていう気はしてる してます が ここに書いてあるんですけどこれもうCPUタイム測ってるんですが 5000ステップ 違う5万ステップ回してやっとこれぐらいのロスになるん ですが 3分かかってるんだね 最適化 一応このマシンは2080が乗ってんだっけ それなりにGPU乗ってるマシンで走らしてるんだけども 4000サンプリングに対しての解析に3分かかる ちょっと実用的じゃない かなっていう気がしてる ついでなので これって音楽の演奏ファイル 4分ぐらいのやつなんだけども時間を順繰りにシフトしながら 各セグメントで解析して解析結果を出すっていう風にプログラムを 書いたやつ 拡張したものをこれで結果こういう風になってますが この時は収束する条件が0.0001かなんか収束条件つけて回すっていう 感じで先に進めるようにしたいんだけども これ一晩ぐらい回して まだ終わってなかったんで どっちでも止めちゃいましたけども 抽出されてる音自体の評価もちょっと時間がなくてまだ評価できる ピアノとかで弾いてないんで 後で評価してこれまたフォローアップ できたらしたいと思いますが 原理的にはなんかできてるらしいが さっきも言ったようにね フラクティカルに耳コピっていうセンスで言って これってブレイクスルーかっていうとなんか違うなっていう気が今の ところ僕はしてます 遅いってことね あと そう だからリアルタイム でトランスクリプションをすぐにオーディオからミディに変換する とかっていうのは夢のまた夢みたいな感じで ここの文脈でロングの頭とかに イントロダクションに背景とか説明当然してありますよね そこになんだっけ ディファレンシャルDSPだっけDDSPこれね ディファレンシャボー ディジタルシグナルプロセッシングDDSPのフレームワークでオシレーター の近似が難しいんで そこはなかなか難しかったんだけども これが助けてくれるよみたいな話があるらしいんだけどもDDSPっていうのはこういうアプローチ だったら結構今はめちゃくちゃ遅いのかなっていう気がして よくわかんない 僕は背景知らないので詳しい人とかですね いや僕の言ってること間違ってるよっていうのがあったらぜひ教えてほしいな 応用自体は僕この辺にすごく興味があるんで教えて 詳しい人教えてほしいです っていう論文を読みました これがどういうものかチェックしておきたいなと思った話でした でついでに そんな人のものにケチをつけるんだったらあなたはどうなのっていう部分ねさっき言ったようにあの音声ファイルから 周波数を取り出すっていうタスクは僕はもう長年やってるっていうか やり続けてるわけじゃなくて20年以上前 30年前にガーッとやってプログラムにしてその後も放置してるって感じなんだけどお手並み拝見っていうのは あれだね音楽と数理の中の一番最後にもあったね あのその時はディープラーニングで トランスクリプションやりますっていうgoogle のマジェンタティームのモデルと対決してたねあれは こういうアプローチとは違くてもうエンドとエンドの学習をやろうとしてるのはなんかあれ詳しく見てないんだけどね あれのあの後の発展とかどうなってるんですかねまあいいや そういうことで僕のプログラム和音は古き良き フリクエンシードメインでのいわゆるスペクトログラムからピークをピックアップしてその周波数が何っていうのを読み出してるだけって言えばそれだけのあの手法で音を取り出すっていうアプローチなんですけどもそれがを C で書いたんだけどね FFT はFFTW っていう MIT のライブラリを使ってましたけども Python でアルゴリズムね 書いてみようとっていうのは上でサンプルでサウンドファイルっていうので Python に普通にナンパイアレイでペンって読み込めるたんで やってみようと思ってやってみましたそれも紹介するします でねまずFFT はどうしようかとファイルの読み込みはとりあえずサウンドファイル使えばいいってのがあったけどFFTどうしようかと思ったらナンパイにも入ってるね なんでもう何も考えずにナンパイを使いましょうナンパイのFFT使いましょう ただFFT はそれぞれきちんとあの抑えとかないと足を救われるのであとライブラリによって癖があるからね まずそこを抑えとこうっていうんでナンパイのFFTを 変換して逆変換してきちんとまず元に戻っていることを確認するところから始めるとすげーエンジニアっぽいねしました これねあの青い線の上にオレンジ色のドットをプロットしてきちんとあの元に戻っていることを確認しましたFFT は再起きちんと元に戻るっていうのが 非常に重要なポイントですからねはい っていうことでそれを確認できたかじゃあこのFFTを使ってフリクエンシーアナリシスをするための何をするかというとパワースペクトルを計算する必要があるパワー計算しようって言ってもうナンパイでね二乗を計算すればパワーになるし変格っていうかねあのアングル取ればこれちなみに FFTあるあるですけども上の話にもあったよねあの複素数の話っていうのはFFTが一番効率的にあの実装できるのは複素数複素数のパターンなんですねでえっとリアルのシグナルをFFTに使おうと思ったらリアルっていうのは複素数のセンスで言うとリアルだけに信号があってイマジナリパートが全部ゼロっていうデータを突っ込めば普通に処理できるんだけどもメモリーも無駄だし計算も無駄だねっていうのがあってそこを効率化しようと思ったらサイン変換コサイン変換っていうので効率的にやるっていうのがあるんだけども応援にしてバグがね処理が失敗しちゃってとかあるんで僕とかは不合的プログラマーのセンスですねリアル実関数は使ってるけども大概普通にコンプレックスのFFTを使いまくってるんですけども注意が必要でフリクエンシービンね配列にあのフリクエンシーがアサインされますがゼロはゼロフリクエンシーが入ってるんだけどもでーって言って周期シグナルを扱うんだけども真ん中まで行くとネガティブにフリクエンシーが飛んでネガティブの最大からグーッとゼロに戻っていくっていうような配列の仕方をするそうしないとそういうふうなメモリー配列にしないとFFTの効率的な計算っていうのはうまく実装できないんでそういうふうになっているそこだけ注意が必要だけどもあのっていうことですねんで計算したの上がえっとパワースペクトラムを普通にえっとノーマルプロットしたものでしたがフェイズスペクトラムっていうのかなフェイズの方ですねだから普通は普通はっていうかなあのコンプレックスだったらリアルケースと複素ケースが出るんだけどもそれをアンプリチュードとえっとアングル変革にしたものっていう風に言ったりですねでえっとアンプリチュードの方のパワーをログログプロットで普通するように計算したものはこれですとこういうシグナルが実際にえっと例えば4000のサンプルからスペクトル周波数を取り出そうと思った時に解析するターゲットっていうのはこういう状況になっているで赤でプロットしたのが何かっていうとこれオクターブをプロットしたんですねえっとどの音ドレミファソラシドの道の音をえっとミドル c が c 4でカウントして43210からプロットしていると思うな c 0 c 1 c 2 c 3 c 4 c 5 c 6c 7 c 8 1オクターブが高田がこの範囲なんねこれログプロットですね音の 1オクターブとかっていうのはログスケールで均等割が平均率ねっていう世界になって人間の耳っていうものはこういうふうにあの 周波数を近くするんですけども皆さんご承知の通りで1オクターブの中には いわゆる僕たちが普通音楽として評価する平均率っていうのは1オクターブを12等分してるんですね どうどうシャープでレイシャープ3点点点12個12音階あるこれ見たらわかりますが c 0から c 1の間に本当はゼロはあれかピアノはどっから始まるんだ でも c 1この辺の日下の音っていうのは1オクターブの中に本当は ドレミファソラシド12コキーがあるはずなのに鍵盤のキーがあるはずなのに上見たらね 点が一つしかないと123しかないとかパンないよね これで周波数をピアノの鍵盤の音をピックアップしろっていうのは特に低音の領域よね 無理に決まっとるんですねっていうんでまぁ大変やねって話なんですけど そこに対して8は音はですねあのプログラムはあのいそうね あれちょっと待ってあその話はまだ次だこれまだ確認作業あっていわゆるね パイソンで1を実装しようと思うあのエンジニアリング的なことやってるんですけどもここだ8 平穏の分解の非常に悪いんですねっていうのは fft っていうか普通のフリーあの風鈴変換っていうのは周波数のあのたくさんの周波数の重ね合わせでシグナルを再再現しましょうっていうのは エッセンスは同じなんですけども周波数を 線形に分割してるんですねだけどさっきも言ってるように人間の耳っていうのは周波数はログで近くするので その結果何が起きるかっていうと低音領域は fft の分解のはすごく大雑把になるし高音の部分はすんごい細かく人間の耳が近くできないような細かいことまで区別して 処理しているみたいな不一致が起きてるんですね ねえ耳コピの話で困るのはfft のこのシグナルが高いって言ったしシグナルが 変番のどこに一致してしてますかっていう部分でずれちゃうのが困るわけですねで それを精度を上げるあの fft の感覚を細かくするっていうのは時間を長く取れば分解のが上がるんですけども あのその分時間の反応が遅くなるわけね なんでいたしかしなんでその他の方法で情報をうまく活用しなきゃいけないっていう意味でフェイスの情報を普段使わない奴を使って周波数の補正に入れちゃえっていう facebook オーダーの8アイディアがあってそれを実装してますとそれは 僕的にはあのきちんと定量的に検証してませんがかなり改善されているというふうに思います感覚的に耳利きいた範囲でそれを実装したの この辺の話でよしたとでパイパイソン版は音を実際に a 解析してみましたで今回 8ね新しい試みっていうかオリジナルプログラムのワンは8 オーディオファイルを入力にして出力はミディファイル 音符ファイルを出すようにしてるんだけどもパイソン版は今今回は8さっきのサンプルで作った あのシンセサイズしてるのねあのサイン派を重ね合わせてオーディオファイルにしてあのターゲット関数とマッチしてるマッチしないっていうのをプロットしたように シンセサイズしてるの音を作り出してるんですよそれを 出力してみようということをしていてですね でかい方の強度が強い方の方からえっとボイスを8個 取り出してシンセサイズした オーディオファイルっていうのを作ってみたこれ新しい心で僕僕の中でねあの ちょっと再生します エロねオリジナルはねあのみんな研究検索してくださいビルエバンスのeverything i love っていうえっと ハウマイハートシングスっていうアルバムに入ってるやつですあのググれば出てきますそれの8は音であの解析した a 8ボイスシンセサイズバージョンです企業黄色んん持ったんんんワンmebenっていう今のはテーマヘッドの部分でしたけども 音は確実に取れてるねなので後解析結果とか後でどれぐらい取れているのかね僕はコードが取りたいので そこは取れているのかどうかっていうのを確認したいなと思ってるんですけどもえっと再生してみている範囲においては結構 音取れてるなぁと思ってるんでこれ後で解析してみようと思ってますはいっていうのが今日の音ネタでした 音ネタでした結構長くなった8時になっさあということで今日のメイン 数理クイズ回答編いこうかなえ ちゃん森さん久しぶりに来ていただきましたありがとうございましたあの またねを アーレンジはあるんですご無沙汰してます忙しいあーちょっと忙しかったんですけど入ってきたんではいはいあのまた 8今のところでもコメントあればあのコメントタイムにするけどもなければ後でまとめてでもいいけどもどうしましょう ああそうですねちょっと途中で入ったんではいの数のところから入っちまってあげる わかりましたしたらあの全体の終わりね今8時だからあの口前にもう1回あの呼びかけてあの数理クイズ回答編についてコメントをしてもらおうかなと思います のでよろしくお願いしますはいはい見てないですけどすいません大丈夫ですあの 話してる範囲でいいですっていうかわかんない
...more
View all episodesView all episodes
Download on the App Store

HELLO! AI ポッドキャストBy Kengo Ichiki