Synthesiaビデオ(および同様の)からのMidiの再構築

かつて、YouTubeに座って面白い教育メロディーを探していたときに、Synthesiaのビデオに出くわしました。そのうちいくつかは本当に好きで、ダウンロードして学習することにしました... =)







Googleに行くことは、私に合った既製のソリューションがあるかもしれないと考えましたが、悲しいことに、MIDIにオーディオコンバータしかなかったという事実から、少し動揺しました...二度考えずに、ビデオクリップのMIDIフレームレートを復元するのに十分であると決めました...、そして、私はこのビジネスを実装しようとすることに決めました....







Debian GNU / Linuxが提供する既成のコンポーネントで何を行うかを決定したのは、Pythonが最適なものからすべてを一から書きたくなかったからです。







実装の最初に、既製の(ビデオクリップから抜粋した)写真を使用することを決めましたが、最初のアップロード後は意味をなさないことに気づきました...それは非常に遅く、ネジのかなりのリソースを消費することが判明しました...それから私はOpenCV(私は長い間感じていたかったのですが)、OpenCVがビデオストリームと非常にうまく機能し、必要なすべての機能(ピクセルのカウント、フレーム、テキストの表示)を提供することがわかりました。







たとえば、ビデオファイルを開いて1つのフレームを受信することは、2行で説明できます。







vidcap = cv2.VideoCapture('test.mp4') success,image = vidcap.read()
      
      





必要に応じて、すぐにネジにフレームをダンプできます。







 cv2.imwrite("/tmp/frame%d.jpg" % frame, image)
      
      





しばらくしてから、仮想キーボードキーの位置を生成し、それらを(長方形の形で)ストリーム画像の上に表示するための関数を作成し、写真をアップロードしました。

画像







そのため、フレームごとに決定し、ビデオストリームから画像を読み取るときに、アクティブキーを仮想キーの位置から読み取ります(ピクセルが参照色と一致するか、遠く離れていないノートのみ)がアクティブと見なされ、MIDIに送信されます。 メモを登録することはできませんでした。通常のMIDIキーボードの場合、少し簡単だからです...ビデオで確認し、受け取ったメモの数を確認しました(そして、それらがたくさんありました)悪くないと思いました。ファイルにメモを書く方法を見つけて、少し探しました。 、すばらしいpython-midiutil pythonパッケージが見つかりました。 しばらくして、MIDIでメモを録音することができました。 判明したように、python-midiutilは非常にシンプルで非常に使いやすい小袋です。 たとえば、ファイルの作成とメモの追加は数行で行われます。







 mf.addTrackName(track, time, "Sample Track") mf.addTempo(track, time, 60 ) mf.addNote(track, channel, pitch, keytime, duration, volume) with open(outputmid, 'wb') as outf: mf.writeFile(outf)
      
      





LMMSで作成されたmidiをダウンロードすることは非常に成功しました。 まず、お気に入りの曲をいくつか復元しました。 次に、キー位置を生成する機能がローラーごとにあまり便利ではないことが明らかになり、それらの場所が変更され、GUIを実行することを決定し、シンプルなものを実行しましたが、キー配置機能を使用しました







画像







私はすべてをgithubに投稿したので、このプログラムは多くの人に役立つと思います








All Articles