今日の進捗:
— Kurene (@_kurene) 2021年4月11日
・複数コーデック対応
・信号分析部(ラウドネスレベル算出以外)
・wx.lib.plotで信号プロット
・分析結果テーブル追加
・ステータスバー追加
あとトータル/短時間ラウドネスレベル (LUFS) の算出部を実装すれば最低限完成 pic.twitter.com/5PziG56BZg
今日の進捗、
— Kurene (@_kurene) 2021年4月10日
・ドラッグアンドドロップで複数ファイルを読込
・読み込んだ各楽曲ファイルごとに信号をmatplitplotでプロット
ができるGUIのモックアップの開発(信号はダミー) pic.twitter.com/hvcEGEVaaJ
自作曲を整理している時に、制作中の音源/アルバムのマスタリングや聞いた時の印象を俯瞰的に確認したり、参考楽曲と照らし合わすことができれば…と思い、音源制作支援のための分析ソフトを試作中です。
とりあえず、肝心のトータル/短時間ラウドネスレベルの算出以外は、PoCとしての実装ができたかなと思います。
以下、後々の振り返りや、どなたかの参考になるかもしれないので、悩んだところなどをダラダラと書きます。
ネイティブアプリ vs サーバアプリ
当初、ブラウザを通してクラスプラットフォームでサービスを提供することを希望していたの、サーバ側で信号処理することを考えていました。
しかし、任意のフォーマット・数のオーディオファイルをクライアントが送信し、サーバ側で処理するのはサーバサイドのコストが高いと考えて、まずはネイティブアプリから実装することにしました。
開発言語
という観点で Python に決めました。
やはり Numpy があるかどうかで、信号処理部の実装速度はかなり違ってくるはずです。
ライブラリ
現状、以下のライブラリの利用を想定しています。
- wxPython
- numpy
- Scipy
ネイティブアプリということで1つの実行ファイル+拡張ライブラリという構成が望ましいと思います。
ここで問題となるのが、PyInstallerの性質とライブラリのライセンスです。
自身の解釈だと、以下の記事で書かれているように、例えばLGPLライセンスであるPySideを利用する場合は、PySideをユーザが置き換え可能になるような形にする必要があると考えています。
ここで、PyInstallerを使ってPySideを上手く分離できるかというところに不安があり、最終的にwxPythonを採用することにしました。
Pythonでのソフトウェア開発用GUIモジュール選定、あれこれ悩んでるけど比較表を作ったらだいぶスッキリした。とりあえずこの土日でKivyに触ってみて決める pic.twitter.com/Zi8BHXim8T
— Kurene (@_kurene) 2021年4月10日
Kivy はモダンなGUIが良く紹介されていたので期待していたのですが、自分の環境 (Windows10) だと導入でつまづいてしまいました。
Eel もJS/CSSの恩恵を受けられるため有力候補だったのですが、セキュリティ上の理由でローカルファイルアップロードは他のGUIモジュールに頼る必要があるのでやめました。
ただし、wxPythonのGUIがごちゃごちゃしてきたり、見た目に不満が出てきたら wxPython + Eel はありかなと思っています。
wxPython
以下のWebサイトを中心に、ググって勉強しつつ実装しました。
慣れればPyQt/PySideくらいの実装しやすさだと思います。
ただし、スタイル(色とか装飾)周りは、やはりPyQt/PySideのほうが柔軟で変更しやすい印象です。
PyInstaller
numpy, matplotlib, wxをimport
— Kurene (@_kurene) 2021年4月10日
実行ファイルサイズは諦めというか、予想の範囲内。若干の懸念は、起動に少し時間がかかること pic.twitter.com/5hBGDU7IV1
tinynumpyのベンチマークスクリプト走らせてみたけど信号処理での採用は厳しい印象… PyInstallerだと実行ファイルサイズは250MB -> 25MBくらいにはなるけれども (-ω-;) https://t.co/myMQks1WOy pic.twitter.com/XcxSfavI8T
— Kurene (@_kurene) 2021年4月11日