Wizard Notes

Python, JavaScript を使った音楽信号分析の技術録、作曲活動に関する雑記

2021.4.11 制作音源分析ソフト"Sophiear"開発記録(wxPython, Numpy, PyInstaller)

自作曲を整理している時に、制作中の音源/アルバムのマスタリングや聞いた時の印象を俯瞰的に確認したり、参考楽曲と照らし合わすことができれば…と思い、音源制作支援のための分析ソフトを試作中です。

とりあえず、肝心のトータル/短時間ラウドネスレベルの算出以外は、PoCとしての実装ができたかなと思います。

以下、後々の振り返りや、どなたかの参考になるかもしれないので、悩んだところなどをダラダラと書きます。

ネイティブアプリ vs サーバアプリ

当初、ブラウザを通してクラスプラットフォームでサービスを提供することを希望していたの、サーバ側で信号処理することを考えていました。

しかし、任意のフォーマット・数のオーディオファイルをクライアントが送信し、サーバ側で処理するのはサーバサイドのコストが高いと考えて、まずはネイティブアプリから実装することにしました。

開発言語

という観点で Python に決めました。

やはり Numpy があるかどうかで、信号処理部の実装速度はかなり違ってくるはずです。

ライブラリ

現状、以下のライブラリの利用を想定しています。

ネイティブアプリということで1つの実行ファイル+拡張ライブラリという構成が望ましいと思います。

ここで問題となるのが、PyInstallerの性質とライブラリのライセンスです。

自身の解釈だと、以下の記事で書かれているように、例えばLGPLライセンスであるPySideを利用する場合は、PySideをユーザが置き換え可能になるような形にする必要があると考えています。

spoonblog.hatenablog.com

velovix.github.io

ここで、PyInstallerを使ってPySideを上手く分離できるかというところに不安があり、最終的にwxPythonを採用することにしました。

Kivy はモダンなGUIが良く紹介されていたので期待していたのですが、自分の環境 (Windows10) だと導入でつまづいてしまいました。

github.com

Eel もJS/CSSの恩恵を受けられるため有力候補だったのですが、セキュリティ上の理由でローカルファイルアップロードは他のGUIモジュールに頼る必要があるのでやめました。

ただし、wxPythonGUIがごちゃごちゃしてきたり、見た目に不満が出てきたら wxPython + Eel はありかなと思っています。

wxPython

以下のWebサイトを中心に、ググって勉強しつつ実装しました。

docs.wxpython.org

www.python-izm.com

慣れればPyQt/PySideくらいの実装しやすさだと思います。

ただし、スタイル(色とか装飾)周りは、やはりPyQt/PySideのほうが柔軟で変更しやすい印象です。

PyInstaller