searchカテゴリー選択
chevron_left

カテゴリーを選択しなおす

カテゴリーのご意見・ご要望はこちら
cancel
プロフィール
PROFILE

Kureneさんのプロフィール

住所
未設定
出身
未設定

自由文未設定

ブログタイトル
Wizard Notes
ブログURL
https://www.wizard-notes.com/
ブログ紹介文
音専門のエンジニアが書く、音響音楽解析の技術録、音楽のレビューおよび分析、作曲活動に関する雑記です。
更新頻度(1年)

69回 / 365日(平均1.3回/週)

ブログ村参加:2014/02/23

本日のランキング(IN)
フォロー

ブログリーダー」を活用して、Kureneさんをフォローしませんか?

ハンドル名
Kureneさん
ブログタイトル
Wizard Notes
更新頻度
69回 / 365日(平均1.3回/週)
フォロー
Wizard Notes

Kureneさんの新着記事

1件〜30件

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

    楽曲の検索やメタ情報に関する Web API を提供しているサブスクリプション型音楽サービスはいくつかあります。 中でも Spotify Web API は様々な機能が提供されています。手軽に使えますし楽曲数も多いため、オススメの API です。 github.com 今回は、Spotify Web API の導入方法と、それを使って楽曲やアーティストを検索する方法を紹介します。 参考ページ Python用ライブラリの導入方法 Web API 利用のためのアクセストークン発行 Spotify Web API 使い方 (検索) サンプルコード search()の使い方 返り値の形式 (type=…

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

    以下の記事にありますように、Python ではオーディオファイルの読み込むライブラリが複数あります。 しかし,.mp3, .aac, .m4a といった圧縮コーデックを読み込むものは多くありません。 www.wizard-notes.com 今回紹介する audioread では ffmpeg のようなバックエンドを呼び出すことで.mp3, .aac, .m4a といった圧縮コーデックもPython上で読み込むことができます*1。 合わせて、.mp3, .aac, .m4a などのオーディオファイルをNumPy配列として読み込むサンプルコードもご紹介します pypi.org audioread…

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

    音楽の分析方法としてBPM・テンポの分析は非常に重要です。 BPM・テンポの分析を行うことで、楽曲の雰囲気、ノリ、音楽ジャンルといった全体的な特徴を捉えることができます。 BPM・テンポの分析方法としては、テンポグラムという便利な手法があります。 テンポグラムの実装は結構難しいですが、Pythonであれば音楽分析ライブラリ LibROSA を使うことで数行で算出することができます。 そこで、この記事では LibROSAを使ったテンポグラムの算出方法を紹介します。 LibROSAでのテンポグラム算出方法 LibROSA テンポグラム サンプルコード プロット例 Lemon (BPM=87) パプ…

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

    表題のとおり,様々な拡張子に対応し,複数の楽曲ファイルを一括でNumpy配列に変換する関数です。 大量の音楽ファイルを分析する場合にオススメです。 ファイルの読み込みは librosa.load() を使っています。 librosa.load()は引数にサンプリング周波数を与えることで,楽曲ファイルのサンプリング周波数と引数にサンプリング周波数が異なる場合,resampy でリサンプリングしてくれます。 ただし、リサンプリングは割と処理時間がかかるので注意が必要です*1。 librosa.load()が扱いにくい場合は、PySoundFileを直接使うのがよいと思います。 # -*- codi…

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

    前回の記事では,音楽信号の音高分析に便利な定Q変換 (CQT)のアルゴリズムや実装方法による計算速度の比較を行いました。 www.wizard-notes.com 結果として,再帰的ダウンサンプリング法による定Q変換がリアルタイム処理で実用的な計算速度であることが分かりました。 しかし、アルゴリズムは同じでもバッチ処理向けの実装である librosa.cqt が圧倒的に速い結果になりました。 そこで、今までリアルタイム処理用に実装してきた再帰的ダウンサンプリング法による定Q変換で、バッチ処理用の実装をすることで、LibROSA の定Q変換くらいの計算速度となるのか試してみました。 実装方法 リ…

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

    米津玄師のアルバム収録曲のテンポ分析に興味があったので、まずは楽曲を聞いてBPMを算出してみました。 BPMはWaveTone を使って手動+自動解析しています。 小数点以下がある場合は小数第一位を四捨五入して整数にしています。 各アルバム楽曲のBPM diorama YANKEE Bremen BOOTLEG STRAY SHEEP ヒストグラムなど 所感 各アルバム楽曲のBPM diorama Year Album Track Title Length BPM 2012 diorama 1 街 340 165 2012 diorama 2 ゴーゴー幽霊船 230 180 2012 dior…

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

    音楽信号の音高分析に便利な定Q変換 (CQT)。 これまでにいくつか計算アルゴリズムや実装方法の種類を紹介してきました。 おそらく再帰的ダウンサンプリング法が速いと思っていたのですが、条件によっては疎行列計算と変わらないことがあったりと、実環境での処理速度の違いが気になっていました。 そこで、3つのリアルタイム向け定Q変換の Python 実装と、オフライン向けであるLibROSA の定Q変換とSTFTの処理速度を比較してみました 比較環境 比較する手法と条件 比較1: 基本設定 比較2: 1オクターブあたりの周波数ビン数を増やす 比較3: 低周波数を分析しない場合 まとめ 関連ページ 比較環…

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

    定Q変換 (CQT)は歌声・音楽の音高/メロディ/和音を分析するのに便利な周波数分析方法です。 例えば,CQTスペクトログラムを算出すれば各音高(ドレミファ…)がどのくらいの強さで鳴っているかを時系列で観察することができます。 以下の記事では、定Q変換のリアルタイム向け実装としてパーセバル定理と疎行列計算を使った定Q変換の仕組みと実装方法を紹介しました。 www.wizard-notes.com www.wizard-notes.com しかし、この方法は疎行列計算ライブラリが使えないような環境では非常に低速になってしまいます。 そこで、以下の論文で紹介されている、疎行列計算を利用しなくても高…

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

    YouTubeやニコニコ動画のような動画サービスで0.5倍・2倍速再生が使えるのが一般的になっています。 また、サンプリングされた波形素材の時間伸縮がDAWの基本機能として搭載されていて、曲のタイミングやテンポに上手く合わせて波形素材をいい感じの長さで鳴らすことができます。 さらに、ピッチシフト(カラオケの転調)はタイムストレッチ+リサンプリングで実現できます。 www.wizard-notes.com このように、音楽や歌声のタイムストレッチ(時間伸縮)は実用的で非常に重要です。 タイムストレッチをゼロからプログラミングするのはなかなか大変ですが、 Pythonの音楽分析モジュール LibR…

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

    はじめに 音信号を分析する時間周波数分析手法としてはSTFT(短時間フーリエ変換)が良く使われますが,特に音楽を対象にして音高、コード、メロディなどを分析する場合は定Q変換(CQT)という手法が便利です。 www.wizard-notes.com www.wizard-notes.com 定Q変換を自分で実装するのは結構大変ですが,Pythonでは音楽信号分析モジュール LibROSA を使うことで、さくっと定Q変換を試すことができます。 はじめに LibROSAでの定Q変換 逆定Q変換 LibROSAでの定Q変換 librosa.cqt を呼び出すことで、数行で定Q変換を実装できます。 im…

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

    www.youtube.com 定Q変換は音楽信号の音高・コード・メロディ分析に相性の良い周波数分析手法です. この記事では,前回の定Q変換 (CQT: Constant-Q Transform) の 解説 の内容をPythonで実装する方法を解説します. Pythonの実装ですが,C++やJavascriptなど,様々な言語での実装の参考になるように解説したいと思います. なお、定Q変換の仕組みやパラメタについては以下の記事を参照してください。 www.wizard-notes.com ソースコードはGithubにおきました。 github.com 定Q変換の実装解説 要件定義とサブルーチン…

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

    はじめに 音信号の時間周波数分析にはFFT (高速フーリエ変換) /STFT(短時間フーリエ変換)がよく使われます. しかし,FFTの性質上,音高に関わる分析をしようとすると実装や分析精度の向上に手間がかかります。 そこで,この記事では音楽信号の分析によく利用される定Q変換 (CQT: Constant-Q Transform) と呼ばれる時間周波数分析の手法の仕組みを紹介します. なお、本記事をベースにしたPython実装の解説がありますので、もしよろしければご覧ください。 www.wizard-notes.com はじめに FFT / STFTでの音高分析の問題 定Q変換のアイディア 定Q…

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

    FFTを使う時,なるべく高速に計算するためにフレームサイズを2の累乗に設定するのが一般的ですが、入力する信号の長さが2の累乗でない時があります。 そういう時は,フレームサイズが2の累乗になるように、ゼロパディング or カットします。 その際には、信号長 N に近い2の累乗のフレームサイズを求める必要があります。 Pythonでの手っ取り早い方法としては、bin()で2進数化し、その文字列の長さを利用して信号長に近い2の累乗の指数部を求めることができます。 ・ゼロパディングの例 >>> N = 1000 >>> x = np.random.random(N) >>> bin(N) '0b111…

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

    AudioPlugin Deals Audio Plugin DealsでREALSAMPLES社の3種類のチェンバロ(ハープシコード)音源 Italian Harpsichord Bundle がセールで$39.95でした. 値段も魅力的ですが,何よりデモ音源が好みのチェンバロの音色だったので購入しました. せっかくなので、導入方法をメモとして残したいと思います. 注意:この音源を利用するには,Kontakt™/HAlion™/EXS24™ の有料版が必要です."light"/free版はサポートしていないことが明記されています. requirements - realsamples Sof…

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

    7万枚の手書き数字の画像+ラベルのデータセットである MNIST は,今では機械学習・深層学習のHello Worldとして非常に多くの人に利用されていて有名です. MNISTの1つのデータは 白黒画像・28x28ピクセル,全体でも7万件なので大規模データですがデータセットのデータサイズは小さいので使いやすいです.また,内容も手書き数字10種類の画像というシンプルである程度パターンが抽出できそうなデータであるため,データ分析や機械学習の練習によく利用されているのだと思います. そんな MNIST の音・オーディオ版のようなデータセットがないか調べたところ,このFSDD を見つけたので紹介します…

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

    データをクラスタリングするアルゴリズムの代表的な手法の一つとして,K-means (k平均法)が知られています. シンプルな動作原理でクラスタリングできるので取っつきやすく,また,新たな仮定や制約を追加することで様々な派生アルゴリズムが提案されてきました. 今回は,「原点からの方向(角度)でクラスタリングする」という制約でクラスタリングする Spherical K-means を紹介します. K-meansの実装 使うデータ クラスタリングするデータ:x.shape==(サンプル数, 特徴量次元数) ↑の各サンプルがどのクラスタに属すか:labels.shape==(サンプル数, ラベル数) …

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

    PyQtGraphの複数の線グラフプロットを利用して,12音平均律で音高ごとに色を変えてライブプロットしたら綺麗&役立つかなと思い作ってみました. もう少しブラッシュアップしようと思ったのですが,後述の理由でお蔵入りになったので,供養としてソースコードと実装方法を公開します. デモ動画・ソースコード 実装の流れ PyQtGraphにおける複数のカーブプロット 12音平均律のエネルギー抽出 お蔵入り理由 デモ動画・ソースコード github.com https://github.com/Kurene/pyqtgraph-app/blob/main/pqg_pitchlines.py 実装の流れ …

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

    私は大学・大学院時代に,日本学生支援機構の​貸与型奨学金(第1種 x 2と第2種)を機関保証で利用していました. 返済金額がそれなりに大きいので,少しでも返済負担を減らすべく,社会人になってから第1種と第2種をそれぞれ繰上返還することで,機関保証料の一部が返金となりました. ちょうど今日,昔の家計簿や通帳を見直していたら,過去2回分の奨学金の繰上返還で戻ってきた機関保証料の返金額を確認できました. 貸与金額や機関保証料の金額などの条件によって変わると思いますが,機関保証を利用&繰上返還を検討している人の参考になる情報だと思うので,参考金額として公開したいと思います. 第2種(大学4年間) 貸与…

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

    音楽再生ソフトやプラグインでよく見かける,スペクトログラムのリアルタイムプロット. どの周波数帯域で音が鳴っているのかをリアルタイムで可視化できるので非常に便利です. Pythonでスペクトログラムのリアルタイムプロットをやろうとすると,やはりリアルタイム性が問題になってきます. Pythonの代表的なグラフプロットライブラリである matplotlibですが,表示するデータの大きさにもよりますが,仕様上,FPSだと10Hz(1秒に10回)程度の描画が限界です. なので,リアルタイム描画にmatplotlibを使うと,どうしてもカクついた描画になってしまいます. www.wizard-note…

  • 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 version >= 5.12 (your version is 5.9.7) この2つのエラー対処後,PyQtGraphを使ったスクリプトが正常起動したので,その方法をメモとして残します. バージョン情報 Python=…

  • 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 wheels (prepackaged binaries). Currently, there are wheels compatible with the official distributions of Python 2.7, 3.4, 3.5, and…

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

    Pythonにおけるリアルタイム音楽信号処理アプリのデモ/教材として,音の広がりや位相を見るフェーズスコープをPyQtGraphとPyAudioで実装してみました. 起動すると,PC上で音楽を再生しながらフェーズスコープを描画することができます. 全ソースコードは以下にあります. github.com 少し複雑なソースコードなので,この記事ではソースコード理解の助けとなる実装方法の要点とノウハウを書きたいと思います. 実装方法の要点・ノウハウ Pythonにおけるリアルタイム音楽再生・分析方法 ループバック機能を利用した,PC上の音のリアルタイム取得 データのプロット方法 フェーズスコープの計…

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

    データの分析や可視化で散布図を使う時には,プロットしたデータの座標や,そのデータが示すラベルや値に応じて色を変えることが多々あります. matplotlibでRGBA値を変える方法は、以下のようになっています。 # 全て同じ色・透明度を設定する場合 plt.scatter(x, y, c="red", alpha=0.3) # 各要素の色・透明度を個別に設定する場合 c = [(0,0,0,1), (0.5,0.5,0.3,0.5)] # RGBA値のタプルを格納した配列 plt.scatter(x, y, c=c) ここで,各要素の色・透明度を個別に設定する場合,色・アルファ値(透明度)をデ…

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

    前回の記事では,ステレオのL, R チャネルの信号を,リサージュ図形の として与えることで音の広がりを可視化しました. www.wizard-notes.com この記事では,直交座標 を極座標(絶対値と偏角) 表記にしたバージョンを紹介します. 参考: Goniometer Algorithm - DSP and Plug-in Development Forum - KVR Audio ただの座標変換であるため,最終的なプロットは直交座標系のものと変わりません。 しかし,絶対値と偏角は振幅の大きさと位相差に対応しているため,振幅の大きさと位相差に応じて色を変える等の高度な描画がやりやすくな…

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

    DTMなどで音の広がり感を可視化するには,リサージュ図形に基づく方法があります. リサージュ リサジュー:Lissajousとは | 偏ったDTM用語辞典 - DTM / MIDI 用語の意味・解説 | g200kg Music & Software 2つの信号を元に作られるリサージュ図形を利用し,2次元平面上にプロットした点群の形状を見ることで音の広がり感を確認することができます. 例えば,iZotopeの無料プラグインである Ozone Imager V2 でも "Lissajous" をクリックすると確認できます. Ozone Imager V2 なお,この方法により音の広がりを確認する…

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

    Pythonを使って TeX の数式を画像として保存する方法がないか調べたところ、SymPy という Welcome to SymPy’s documentation! — SymPy 1.0.1.dev documentation SymPyは数式による処理を行うライブラリであり,独自の記法もありますが TeX 記法を扱うこともできます。 インストール方法 Anaconda などのディストリビューションでPythonをインストールした場合は、インストール済みとなっていると思います。 もしインストールされていない場合は、以下のようにpipを使って導入してください。 pip install sy…

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

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

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

    PyQtGraphで美しいリアルタイムプロットができることを最近知ったので、実装例として2次元波動方程式の数値シミュレーション(有限差分法)をリアルタイム実行・プロットしてみました。 実装のための数式導出と、PyQtGraphを使ったソースコードを合わせて紹介します。 2次元波動方程式の有限差分法の更新式導出 以下の2次元波動方程式の初期値・境界​値問題の解を有限差分法によって近似的に解くことを考えます。 この を 平面上の格子点での値として求めていきます。ただし、 平面のそれぞれの方向の格子間隔(微小​変化)を )とします. 右辺,左辺の項をそれぞれテイラー展開し2階中心差分を導出します。詳…

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

    matplotlibよりも滑らかなリアルタイムプロットができる PyQtGraph で散布図をリアルタイムプロットしてみました。 PyQtGraphで散布図リアルタイムプロット、1000点でも60fps程度で動いてくれたので良き pic.twitter.com/R6ntYYMIQF— Kurene (@_kurene) 2021年6月10日 1000点でアルファ値(透明度)を設定していますが、約60fpsでリアルタイムプロットできていることを確認しました。 こちらの散布図の実装方法とソースコードを紹介したいと思います。 PyQtGraphにおける散布図リアルタイムプロットの流れ 散布図の属性 …

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

    PyQtGraph の公式実装例*1やWeb上にあるソースコードを見ると、例えば PyQtGraph でのリアルタイムプロットのコードは以下のように実装されています。 # -*- coding: utf-8 -*- from pyqtgraph.Qt import QtGui, QtCore import numpy as np import pyqtgraph as pg app = QtGui.QApplication([])# PyQtのアプリ生成 win = pg.GraphicsWindow() # GraphicsWindow() オブジェクト生成 win.resize(500, …

カテゴリー一覧
商用