Pythonで楽曲のスペクトルの動画の作成 のメモ
以下が構成するモジュールとかアプリケーション
・matplotlib
・imagemagick
・FFmpeg
・PyAudio
・NumPy
以下のページのサンプルが素敵
Frequency spectrum of sound using PyAudio, NumPy, and Matplotlib · GitHub
matplotlibがmp4が描き出せるというのが、
楽曲のスペクトルでなくとも、手軽そうで素敵です
matplotlib でアニメーションを作る - Qiita
しかし、悲しいことにこれだけだとうまくいきませんでした
Mac特有の問題と記事の時期とのズレが問題かと
まず、Macだとmatplotlibがいうことを聞いてくれないので、
以下のページを参考に、設定ファイルmatplotlibrcを書き換えました
matplotlibで簡単にアニメーションをつくる(mp4, gif) - Qiita
pyenvとvirtualenvで環境構築した時にmatplotlib.pyplotが使えなかった時の対処法 - Qiita
次に、FFmpegです
サンプルだと -acodec libmp3lame となっていますが、これが通らず
mp3のエンコーダー lame が未インストールだからだろうと推測しつつ
以下のページに倣って、 -acodec aac としたら通りました
Pythonでプロトタイプするときはモジュール化しておこう...
Pythonでプロトタイプするときはモジュール化しておこう...
と思った
とりあえず、main でも test でもなんでもいいから関数化しておくだけでも
随分違いそうなことがわかった
今、PythonでMIDIをいじってみています
ちょっとしたパターンを生成するソースは、まぁ、すぐにできました
となれば、それを再利用したり、ガリガリ大量生産してみて、
「ふむ」と言ってみたくなります
ここで、じゃあそれをせっかくだからPythonでやろうと思ったわけです
スクリプトファイルとモジュール化 — PyCon JP 2012 Pythonプログラミングハンズオン(初級者向け) documentation
シェルでスクリプトそのものを動かす、引数入れ替えるだけー...よりは、
ちょっと面倒だけれども、モジュールとして関数をガリガリ再利用できるのは、
ソースコードさえ、再利用に耐えうる書き方をしておけば、全然素晴らしいですね!
Pythonの利点もイマイチわからないし、
そもそもPythonがなんなのかわからないけれども
身近なPythonianからは、シェルを使っていると「Pythonはスクリプトだから、もともとそういうのもPythonが得意なはずだから、Pythonでやりなよー」と啓蒙されてきました
その良さの一端を垣間見た気分です
Canvas関係のグラフを描くライブラリを使ってみた
<概要>
Canvasの練習です.
前回、"Canvasで、任意長の配列で折れ線を描いてみる"してみました.
次は、軸を描いてみて、グラフにしたいと思ったわけです.
そういえば、ライブラリが無いわけがないと思いまして、探して使ってみました.
今回使ってみたのは、次の2つ.
・Chart.js
・CanvasJS
他にも色々ある中でこれらに目をつけたのは、とりあえずはフリーだから.
それでいて、比較的データ自体の入力以外が少なそう...と思ったから.
しかし、いざやってみると細々としたオプションを設定したくなってしまったのでした.
↓とりあえず、同じデータで同じようなオプションを設定してみました↓
・Chart.js
・CanvasJS
Chart.jsは、凡例をクリックしたらそのデータの表示がトグルできるんですね!デフォルトで!これは素敵です.
しかし、デフォルトで表示時のアニメーションと線の下の塗りつぶしがついているのはイマイチです、チャーミングですけれども。
また、デフォルトで折れ線部分が丸くなるんです.これを外すのにしばらく悩みました.
CanvasJSは、とりあえず凝ったことをやろうとしたら有料らしいです.怖くて使いづらいです.
データ入力が単純な配列じゃなくて、{y:value}って具合にいちいち格納しないといけません.特定の値だけにlabelをつけられるのは良さそうですが.
今回はまだ使っていませんが、Spline Chartが用意されているのが気になるところです.
<結論>
どちらを使っていくのか全然悩む程度には、どちらも今ひとつでした.
<参考文献>
Chart.js | Open source HTML5 Charts for your website
Canvasで、任意長の配列で折れ線を描いてみるテスト
<概要>
Canvasの練習です.
任意長の配列で折れ線を描く.これを関数したら楽にならないかな、と思っている次第であるためです.
やってみた事は単純です.
1.座標点の配列を定義
2.配列の各点を、canvasの折れ線の終点として次々に設定 : context.lineTo
3.ついでに各点の座標点に、塗りつぶした円を点として設定
やってみて意外だったのが、起点の座標の設定 context.moveTo が省けてしまった事です.
起点を設定せず、最初の終点として起点を設定しています.
<参考文献>
canvasを使ってグラフを描く - Webサイト制作最新トレンドの傾向と対策 | Webデザインとグラフィックの総合情報サイト - MdN Design Interactive
PythonでMIDIをいじってみる準備 とりあえず、pretty_midi
Python で MIDI をいじってみようとしています。
とりあえず、pretty_midi にしました。
・なぜ pretty_midiか
理由1:ノートのon/offを1回の関数呼び出し(?)でできる。
理由2:和音できそう。
理由3:TensorFlow製音楽生成プロジェクト「Magenta」で用いられている。
理由4:わかりやすそうなサンプルコードの記事があった。
↓こちらがその記事です
pretty_midiを使って、PythonでMIDIファイルを作成する - Qiita
・参考にした記事
PythonでMIDIを扱うパッケージ midiとpretty_midi - Qiita
・つまづいた
pretty_midi のインストール以前の pip のインストールでつまづきました。
Python、むずい。
いつの間にかpipのインストールが楽になってた件 - Qiita
pipのインストールにハマって悲しい思いをしているたぶんEl Capitanなあなたへ - Qiita
Pythonで音信号処理する環境づくり on Mac のメモ
<経緯>
メインPCがMacです。
Pythonで音信号処理する環境づくりをやりました。
恥ずかしいことに、これまで何度も挑戦しては挫折してました。
今回は今の所すんなり綺麗にできているので、メモをば。
<Python本体>
まずバージョン。Python2, Python3 をそれぞれ入れて適宜切り替えることに。
どうせ、どちらかだけでは済まないんだから。
今回は、以下の並びで入れてみた。
Mac -> Homebrew -> pyenv+virtualenv -> Anaconda
以下、参考にしたサイトです。
HomebrewのインストールからpyenvでPythonのAnaconda環境構築までメモ - Qiita
データサイエンティストを目指す人のpython環境構築 2016 - Qiita
<音信号処理の一歩二歩>
とりあえず、WAVファイルの読み書きに、FFT から。
色々なモジュールでもってやれそうです。
pythonでwavファイルを扱う108の方法 - (wrist blog)
とりあえず、scipyを使ってそうなサンプルを下地にあれこれします。
scipyだとフィルタ設計関数が色々あるらしいので。
以下、サンプルを動かしてみたサイトです。