Wizard Notes

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

python の ローカルwebサーバ で React の勉強のためのサンプルコードを動かす

最近新しい Web 音楽アプリを作ろうと考えています。 音楽関係の信号/情報処理はPythonを使いたいため、 サーバサイド: flask クライアントサイド: React という構成を検討しています。 React の勉強と理解のためにサンプルコードを走らせたり、実装した各…

Python:あるディレクトリの複数の特定拡張子ファイルをまとめて削除

Pythonでファイル処理をしていると、例えば、 「あるディレクトリ(フォルダ)の中にある、 ".png"と".wav"と".txt"という拡張子のファイルを全て削除したい」 というような状況がよくあります。 このような、あるディレクトリの複数の特定拡張子ファイルを…

Python:Spotify Web API であるアーティストの全てのアルバムの全楽曲情報を取得する

市販楽曲の情報を入手する手軽な手段として、Spotify Web APIがあります。 以前の記事では、キーワードを入力して楽曲を検索していました。 www.wizard-notes.com しかし、この方法だとあるアーティストの名前をキーワードとして与えても、そのアーティスト…

Python用 Spotify Web API "spotipy" の楽曲・アーティストを検索(インストール方法,サンプルコード,API仕様)

楽曲の検索やメタ情報に関する Web API を提供しているサブスクリプション型音楽サービスはいくつかあります。 中でも Spotify Web API は様々な機能が提供されています。手軽に使えますし楽曲数も多いため、オススメの API です。 github.com 今回は、Spoti…

Python:audioread で mp3, aac, m4a 形式のオーディオファイルをNumPy配列として読み込む

以下の記事にありますように、Python ではオーディオファイルの読み込むライブラリが複数あります。 しかし,.mp3, .aac, .m4a といった圧縮コーデックを読み込むものは多くありません。 www.wizard-notes.com 今回紹介する audioread では ffmpeg のような…

LibROSA:音楽のBPM・テンポ分析に便利なテンポグラムを数行で実装

音楽の分析方法としてBPM・テンポの分析は非常に重要です。 BPM・テンポの分析を行うことで、楽曲の雰囲気、ノリ、音楽ジャンルといった全体的な特徴を捉えることができます。 BPM・テンポの分析方法としては、テンポグラムという便利な手法があります。 テ…

Python:様々な拡張子&複数の楽曲ファイルを読み込んでNumPy配列として格納(wav, flac, mp3, aac, m4a, alac, etc.)

表題のとおり,様々な拡張子に対応し,複数の楽曲ファイルを一括でNumpy配列に変換する関数です。 大量の音楽ファイルを分析する場合にオススメです。 ファイルの読み込みは librosa.load() を使っています。 librosa.load()は引数にサンプリング周波数を与…

定Q変換のPython 実装:バッチ処理向けの実装方法の紹介と計算速度の比較

前回の記事では,音楽信号の音高分析に便利な定Q変換 (CQT)のアルゴリズムや実装方法による計算速度の比較を行いました。 www.wizard-notes.com 結果として,再帰的ダウンサンプリング法による定Q変換がリアルタイム処理で実用的な計算速度であることが分か…

米津玄師のアルバム収録曲の BPM 一覧(diorama, YANKEE, Bremen, BOOTLEG, STRAY SHEEP)

米津玄師のアルバム収録曲のテンポ分析に興味があったので、まずは楽曲を聞いてBPMを算出してみました。 BPMはWaveTone を使って手動+自動解析しています。 小数点以下がある場合は小数第一位を四捨五入して整数にしています。 各アルバム楽曲のBPM diorama…

定Q変換のPython 実装のアルゴリズム/実装方法による計算速度の比較

音楽信号の音高分析に便利な定Q変換 (CQT)。 これまでにいくつか計算アルゴリズムや実装方法の種類を紹介してきました。 おそらく再帰的ダウンサンプリング法が速いと思っていたのですが、条件によっては疎行列計算と変わらないことがあったりと、実環境での…

再帰的ダウンサンプリング法による定Q変換 (CQT) のPython 実装とアルゴリズム解説

定Q変換 (CQT)は歌声・音楽の音高/メロディ/和音を分析するのに便利な周波数分析方法です。 例えば,CQTスペクトログラムを算出すれば各音高(ドレミファ…)がどのくらいの強さで鳴っているかを時系列で観察することができます。 以下の記事では、定Q変換…

Python LibROSA で音楽・歌声をタイムストレッチ(時間伸縮) librosa.effects.time_stretch()

YouTubeやニコニコ動画のような動画サービスで0.5倍・2倍速再生が使えるのが一般的になっています。 また、サンプリングされた波形素材の時間伸縮がDAWの基本機能として搭載されていて、曲のタイミングやテンポに上手く合わせて波形素材をいい感じの長さで鳴…

LibROSA:音高分析のための定Q変換(CQT)と、逆定Q変換の性能評価

はじめに 音信号を分析する時間周波数分析手法としてはSTFT(短時間フーリエ変換)が良く使われますが,特に音楽を対象にして音高、コード、メロディなどを分析する場合は定Q変換(CQT)という手法が便利です。 www.wizard-notes.com www.wizard-notes.com …

定Q変換のリアルタイム向けPython実装の解説(音高・コード・メロディの分析向け)

定Q変換は音楽信号の音高・コード・メロディ分析に相性の良い周波数分析手法です. この記事では,前回の定Q変換 (CQT: Constant-Q Transform) の 解説 の内容をPythonで実装する方法を解説します. Pythonの実装ですが,C++やJavascriptなど,様々な言語で…

定Q変換 (CQT: Constant-Q Transform) の 解説(音高・コード・メロディの分析向け)

はじめに 音信号の時間周波数分析にはFFT (高速フーリエ変換) /STFT(短時間フーリエ変換)がよく使われます. しかし,FFTの性質上,音高に関わる分析をしようとすると実装や分析精度の向上に手間がかかります。 そこで,この記事では音楽信号の分析によく…

Python:信号長に近い2の累乗(2**n)のFFTフレームサイズを求める

FFTを使う時,なるべく高速に計算するためにフレームサイズを2の累乗に設定するのが一般的ですが、入力する信号の長さが2の累乗でない時があります。 そういう時は,フレームサイズが2の累乗になるように、ゼロパディング or カットします。 その際には、信…

チェンバロ(ハープシコード)音源 Italian Harpsichord Bundle (REALSAMPLES) のインストール・導入方法

AudioPlugin Deals Audio Plugin DealsでREALSAMPLES社の3種類のチェンバロ(ハープシコード)音源 Italian Harpsichord Bundle がセールで$39.95でした. 値段も魅力的ですが,何よりデモ音源が好みのチェンバロの音色だったので購入しました. せっかくな…

音声・オーディオ版MNIST "FSDD (Free Spoken Digit Dataset)" の紹介と,メルスペクトログラム算出

7万枚の手書き数字の画像+ラベルのデータセットである MNIST は,今では機械学習・深層学習のHello Worldとして非常に多くの人に利用されていて有名です. MNISTの1つのデータは 白黒画像・28x28ピクセル,全体でも7万件なので大規模データですがデータセッ…

球面 (Spherical) K-means のクラスタリングのデモと実装例(Python,PyQtGraph)

データをクラスタリングするアルゴリズムの代表的な手法の一つとして,K-means (k平均法)が知られています. シンプルな動作原理でクラスタリングできるので取っつきやすく,また,新たな仮定や制約を追加することで様々な派生アルゴリズムが提案されてきまし…

Pythonで12音平均律の各音高をカラフルにライブプロット

PyQtGraphの複数の線グラフプロットを利用して,12音平均律で音高ごとに色を変えてライブプロットしたら綺麗&役立つかなと思い作ってみました. もう少しブラッシュアップしようと思ったのですが,後述の理由でお蔵入りになったので,供養としてソースコー…

日本学生支援機構 貸与型奨学金の繰上返還による機関保証料の返金額について

私は大学・大学院時代に,日本学生支援機構の​貸与型奨学金(第1種 x 2と第2種)を機関保証で利用していました. 返済金額がそれなりに大きいので,少しでも返済負担を減らすべく,社会人になってから第1種と第2種をそれぞれ繰上返還することで,機関保証料…

Python:PyQtGraphでメルスペクトログラムをリアルタイム描画

音楽再生ソフトやプラグインでよく見かける,スペクトログラムのリアルタイムプロット. どの周波数帯域で音が鳴っているのかをリアルタイムで可視化できるので非常に便利です. Pythonでスペクトログラムのリアルタイムプロットをやろうとすると,やはりリ…

PyQtGraph エラー対処(ImportError: cannot import name 'sip', Exception: pyqtgraph requires Qt version >= 5.12)

PyQtGraph example Python をver. 3.8にアップデートして PyQtGraphをインストール後,PyQtGraphを使ったスクリプトを実行した際に以下の2つのエラーが発生しました. ImportError: cannot import name 'sip' from 'PyQt5' Exception: pyqtgraph requires Qt…

Windows+Python 3.7, 3.8, 3.9, 3.10 でのPyAudioのインストール方法・エラー対処

PyAudio Pythonのバージョンを3.5からアップデートしたところ,PyAudioのインストールで引っかかったのでメモ. 調べてみると,PyPIのPyAudio wheel は Python 2.7, 3.4, 3.5, 3.6 以外には非対応となっています. pip will fetch and install PyAudio wheel…

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 …