Wizard Notes

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

Programming

Python:音の広がりや位相を見るフェーズスコープをPyQtGraphとPyAudioで実装

Pythonにおけるリアルタイム音楽信号処理アプリのデモ/教材として,音の広がりや位相を見るフェーズスコープをPyQtGraphとPyAudioで実装してみました. 起動すると,PC上で音楽を再生しながらフェーズスコープを描画することができます. 全ソースコードは…

matplotlib の散布図の色・アルファ値(透明度)を滑らかにグラデーションさせる(cmap利用)

データの分析や可視化で散布図を使う時には,プロットしたデータの座標や,そのデータが示すラベルや値に応じて色を変えることが多々あります. matplotlibでRGBA値を変える方法は、以下のようになっています。 # 全て同じ色・透明度を設定する場合 plt.scat…

ステレオ楽曲の位相差を確認できるフェーズメーターの作り方(極座標ベース)

前回の記事では,ステレオのL, R チャネルの信号を,リサージュ図形の として与えることで音の広がりを可視化しました. www.wizard-notes.com この記事では,直交座標 を極座標(絶対値と偏角) 表記にしたバージョンを紹介します. 参考: Goniometer Algo…

音の広がりや位相差を可視化するリサージュメーター(ゴニオメーター)のPython実装

DTMなどで音の広がり感を可視化するには,リサージュ図形に基づく方法があります. リサージュ リサジュー:Lissajousとは | 偏ったDTM用語辞典 - DTM / MIDI 用語の意味・解説 | g200kg Music & Software 2つの信号を元に作られるリサージュ図形を利用し,2…

Python:SymPyでTeX記法の数式を画像(PNG)として保存する

Pythonを使って TeX の数式を画像として保存する方法がないか調べたところ、SymPy という Welcome to SymPy’s documentation! — SymPy 1.0.1.dev documentation SymPyは数式による処理を行うライブラリであり,独自の記法もありますが TeX 記法を扱うことも…

PyQtGraph:3Dプロット (GLSurfacePlotItem, GLMeshItem) の高さ(z軸)で色を変える方法

PyQtGraph の3Dサーフェス/メッシュプロットでは,高さに応じて色を変えることができます。 具体的には,GLSurfacePlotItem もしくは GLMeshItem のコンストラクタのキーワード引数 としてshader='heightColor'を指定します. n_x, n_y = 128, 128 xy_init …

Python:PyQtGraphで2次元波動方程式の数値シミュレーションをリアルタイムプロット(有限差分法)

PyQtGraphで美しいリアルタイムプロットができることを最近知ったので、実装例として2次元波動方程式の数値シミュレーション(有限差分法)をリアルタイム実行・プロットしてみました。 実装のための数式導出と、PyQtGraphを使ったソースコードを合わせて紹…

Python:PyQtGraphで散布図グラフをリアルタイムプロット

matplotlibよりも滑らかなリアルタイムプロットができる PyQtGraph で散布図をリアルタイムプロットしてみました。 PyQtGraphで散布図リアルタイムプロット、1000点でも60fps程度で動いてくれたので良き pic.twitter.com/R6ntYYMIQF— Kurene (@_kurene) 2021…

PyQtGraph:プロットの基礎と、GraphicsWindowをGraphicsLayoutWidget に置き換える際の注意点

PyQtGraph の公式実装例*1やWeb上にあるソースコードを見ると、例えば PyQtGraph でのリアルタイムプロットのコードは以下のように実装されています。 # -*- coding: utf-8 -*- from pyqtgraph.Qt import QtGui, QtCore import numpy as np import pyqtgraph…

Python: PyQtGraphでリアルタイムプロット/アニメーション(サンプルコード・実装デモ付き)

PyQtGraph の導入理由 matplotlib ではダメなのか? PyQtGraph のメリット・デメリット PyQtGraph の導入方法 PyQtGraphのエラー対処 リアルタイムプロット/アニメーションの実装例 1次元プロット(折れ線グラフ) 複数の折れ線・カーブプロット 2D散布図プ…

PyQtGraph:MKLライブラリに関するエラー対処(mkl_blas_dgem2vu.dll)

Pythonで本格的なリアルタイムプロット向けのライブラリである PyQtGraph 。 このPyQtGraph を導入・サンプル実行する際にエラーが発生したので、その内容と対処方法をメモしたいと思います。 環境 Win10 64-bit Python 3.6.5 conda 4.6.14 導入の流れとエラ…

matplotlib: 折れ線グラフのリアルタイムプロットでラベルやカラーなどの属性を変える(音声信号でのデモ付き)

前回の記事では、matplotlibでの折れ線グラフのプロット画像のラベルや属性を変更しました。 www.wizard-notes.com 今回は、折れ線グラフのリアルタイムプロットでラベルやカラーなどの属性を変えるコードを実装をしました。 import numpy as np import matp…

matplotlib: 折れ線グラフで複数の配列・ラベル・カラーなどの属性をまとめてセットする

折れ線グラフで複数の配列・ラベル・カラーなどの属性をまとめてセットする場合、単純な方法としては以下のように一つの信号 (y_arr) ずつplt.plot()するコードが考えられます。 length = 100 x = np.arange(0, length) y = np.array([ np.random.normal(0, …

matplotlibを使ってリアルタイムで折れ線グラフをプロット

音響信号ソフトウェアでは、録音している音信号の大きさやピッチ(基本周波数)といった情報をリアルタイムで表示したいことが多々あります。 ところで、Pythonではグラフを表示するようなGUIのライブラリの選択肢はあまり多くありません。 そこで、今回はグ…

Python: waveモジュールをハックしてfloat形式のwavファイルを読み込みnumpy配列に変換する

問題 解決方法 waveモジュールのWav_readクラスをハック 検証 問題 www.wizard-notes.com 上記の実装の拡張として、Python の waveモジュールを使って32-bit or 64-bit float形式のwavファイル読込を追加しようとして試してみたところ、以下のようなエラーが…

Python: waveモジュールを使ったWAVファイル読み込みとNumPy化 (8-bit, 16-bit, 24-bit, 32-bit int)

前置き Python wave モジュール 実装/テスト 最後に Float形式のWAVファイルについて 前置き 音楽プレイヤーのような音楽ソフトウェアの開発では、まずオーディオファイルから時間信号を読み込む処理が第一歩となります。 オーディオファイルは数多くの種類…

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

今日の進捗:・複数コーデック対応・信号分析部(ラウドネスレベル算出以外)・wx.lib.plotで信号プロット・分析結果テーブル追加・ステータスバー追加あとトータル/短時間ラウドネスレベル (LUFS) の算出部を実装すれば最低限完成 pic.twitter.com/5PziG56…

Python: PyInstaller + Eel + Numpy でGUIアプリの実行ファイルを作成

はじめに 実装 Python HTML / Javascript PyInstaller による実行ファイル作成 ファイルサイズについて python -m eel --onefile --noconsole はじめに smoothiecharts.jsよき…なおpyinstallerは仮想環境切らないと実行ファイル化できなかった pic.twitter.c…

Windowsで特定の拡張子以外のファイルをまとめてコピー

様々な拡張子のファイルが格納されたフォルダをコピーするときに、動画や非圧縮楽曲ファイルのようなファイルサイズが大きいファイル以外をコピーしたい という場面はよくあります。 そこで、タイトル通り、特定の拡張子以外のファイルをまとめてコピーする…

Python: pypianorollを使ってMIDIデータをNumpy配列に変換し、マルチトラックをプロット

(トラック数,最短音符数,音高数) のnumpy配列になってしまえば煮るなり焼くなりこっちのもの pic.twitter.com/7WfjuAQujI— Kurene (@_kurene) 2021年3月28日 MIDI形式のデータは演奏の操作・記録方式として優れていますが、データ分析やプログラム上での編…

PyQt: シグナル/スロットを使ってスレッド中・終了時にウィジェットを描画

別スレッドで走っている計算処理の終了後、計算終了を通知するメッセージボックスを表示する 別スレッドでオーディオファイルを再生し、再生終了時にQWidgetを操作する というような、サブスレッド終了後にウィジェットを非同期的に操作する処理を書いてみま…

PyQt: 複数のQPushButtonに単一スロット(値の受け取り関数)を割り当てる

PyQt で複数のQPushButton Widget を使う場合、愚直に書くと以下のようになります。 class MainWindow(QWidget): def __init__(self, n_buttons): super().__init__() layout = QVBoxLayout() self.setLayout(layout) button = QPushButton(f"Button 0") but…

PyQt: setStyleでWidgetのデザインを変更する

PyQt ではapp.setStyle(style_str)によってWidgetのデザインを変更することができます。 デフォルトスタイルはstyle_str="Fusion"ですが、環境によって"Windows"や"QtCurve"などを使うことができます。 この記事では、Win10で利用可能なPyQtのスタイルを確認…

Python: matplotlibを使ったリアルタイムプロットのフレームレート(FPS) に関する調査

matplotlibを使って、どのくらいのフレームレートでリアルタイムプロットできそうか検証 pic.twitter.com/X2mjgYiaWy— Kurene (@_kurene) 2021年1月29日 Pythonで安定的にリアルタイムプロットを実現するライブラリとしては PyQtGraph がありますが、手軽にm…

Python:matplotlibで双二次フィルタの極・零点をプロット

自作の双2次フィルタ (Biquad Filter)のPythonライブラリ PyQuadFilter に極と零点をプロットする関数を実装しました。 exmamples/04_plot_pole_zero.pyがサンプルコードとなっています。 プロット例 オールパスフィルタの極/零点プロットです。 q = 1.5 fc…

Pythonとresample_polyでオーバーサンプリング

scipy.signal.resample_polyを使ってオーバーサンプリングを実装してみました。 resample_polyのデフォルトの設定では、パラメタβ=5.0のカイザー窓によるFIRローパスフィルタが使われています。 注意すべき箇所として、フィルタ長はresample_polyの引数では…

PythonのMDCT(修正離散コサイン変換)ライブラリ: mdct

MP3などで使われている周波数変換方法であるMDCT (Modified Discrete Cosine Transform)。 現状、Scipy等の準標準的なライブラリに関数はありませんが、以下のライブラリがありました。 GitHub - nils-werner/mdct: A fast MDCT implementation using SciPy …

双2次フィルタの自作Pythonライブラリ PyQuadFilter 更新 - フレームベース処理対応

双2次フィルタの自作Pythonライブラリである PyQuadFilterを更新しました。 PyAudioやPySoundDeviceと組み合わせることで、Pythonでも双2次フィルタを使った簡単なリアルタイム音響信号処理ができます。 GitHub - Kurene/pyquadfilter: Implementation of di…

Pythonの心理音響評価モジュール"MoSQITo"でオーディオデータからラウドネスを算出

前回の記事で紹介したPythonの心理音響評価モジュールMoSQIToでラウドネスを算出してみました。 基本的に以下のドキュメント・ソースコードを参考にしています。 MoSQITo/tuto3_Loudness-zwicker-time-varying.ipynb at master · Eomys/MoSQITo · GitHub ソ…

Pythonの心理音響評価モジュール/開発フレームワーク"MoSQITo"の紹介

https://github.com/Eomys/MoSQITo 心理音響学について調べていたら、興味深いPythonライブラリがあったので紹介します。 github.com 心理音響学に基づく音質評価ソフトウェアの多くは市販製品であり、オープンソースでさくっと使えるものはほとんどないのが…