Wizard Notes

音楽信号解析の技術録、音楽のレビューおよび分析、作曲活動に関する雑記です

Python

Perfume The Best "P Cubed" の全52曲をテンポ特徴でクラスタ分析

事始め Perfume のベストアルバム Perfume The Best “P Cubed” を購入しました。 これまで(~2018年)の楽曲の中から全50曲 + 新曲2曲が収録されています。 全52曲。なかなかのデータ数です。 そういえば、最近のPerfumeの楽曲ってFuture BassやDub系が増え…

matplotlibでタイムラインチャートをプロット

やりたいこと 時系列信号・データを扱っていると、その信号に対する各種イベント・ラベル(例:どんな音が鳴っているか)を時間とともに表示したいと思うことが多々あります。 そこで、Pythonの matplotlib で時間波形に対するイベント(ラベル)のタイムラ…

matplotlib: 棒グラフでハッチパターンを使う

やりたいこと 論文など、白黒印刷が想定される紙媒体や、色の見え方の個人差に考慮したメディアでの棒グラフの作り方として、ハッチパターンを使ったものがよく使われています。 今回は、matplotlib でハッチパターンの棒グラフを描画してみます。 解決方法 …

adjustText: matplotlib の散布図でラベルの重なりを自動調整

問題点 matplotlib の散布図などのプロットの際に、各点にラベルを付けてプロットしたい場合、下の図のようにラベルが重なってしまうため、ラベル付きプロットを諦めることが多々ありました。 図1: 散布図 (Before) 解決方法 ラベルの配置を制御する方法を探…

Python (LibROSA) で音高 ・クロマ特徴を算出する方法

はじめに 音楽の分析では、メロディー、ハーモニー、リズムの3つ要素から特徴を捉えるのが重要です。 特にハーモニーに関しては、音楽理論による体系化(例:コード、コード進行)が出来ています。そのため、 分析した結果の意味付けがしやすいので、計算機…

matplotlib: 棒グラフの色を階級ごとに度数に応じてグラデーション

やりたいこと シンプルで綺麗なグラフは、得なことが多いです。 見た人の思考や感性に訴えかけ、新たな発見や次のステップへの道筋を示してくれます。または、相手によってはグラフ自体に価値がある場面もあります。 しかし、そんなグラフを人手で作りこむの…

Mutagenチートシート: MP3, AAC (.m4a), FLACのタグ・メタデータ抽出

Mutagen チートシート オーディオデータのタグ・メタデータ抽出に便利なPythonモジュール Mutagen。 この記事では、よく使う3つのコーデックでのメタデータ抽出でよく使いそうな、 mutagen オブジェクトのキーおよびインスタンス変数をまとめました。 https…

Python: 複数のAAC (.m4a) 音源からタグ・メタデータを抽出する

はじめに 音楽分析をやる際、大量の音源のメタデータの抽出・編集・読込/書込が必要となることが多々あります。手動で出来る簡易だと Mp3tag のようなソフトウェアを使うのが楽ですが、大量の音源のメタデータを処理しようとすると効率がよくありません。 …

Python: オブジェクトフィールドを辞書型に変換

やりたいこと class Data(): def __init__(self, a, b, c): self.a = a self.b = b self.c = c data = Data() Python上でデータをいじることになると、オブジェクトフィールド(クラス変数/インスタンス変数)から辞書型にパパっと変換したいと思うことが多…

matplotlib: xticks/yticksで設定した軸ラベルの重なりを整える

やりたいこと python のmatplotlib を用いて時系列データをプロットするとき、時系列のラベルが大量にあるせいで、 xticks, yticks で設定した軸ラベルが重なってしまうことがあります。plt.xticks の rotation オプションでラベルを回転させれば多少マシに…

Pythonで楽曲のリズム・テンポ分析: テンポグラム (Tempogram)

はじめに 楽曲分析では、メロディー、ハーモニー、リズムの3大要素から特徴を捉えるのが大事です。 ハーモニーに関しては、音楽理論による体系化(コード、コード進行など)が出来ていることもあり、計算機による分析も他の要素よりも普及しています。 一方…

Numpy: 1次元配列から、特定の値の範囲のみを抽出した1次元配列を作る

やりたいこと numpyの1次元配列 x の内、v_min 以上 v_max以下の要素だけを抽出した1次元配列 y と、対応するインデックスの1次元配列 indices を得たいとします。 >>> x array([0.20204346, 0.71742434, 0.05195665, 0.50794105, 0.08809835, 0.80818671, 0…

Pythonで楽曲のリズム・テンポ分析: Novelty Function

はじめに この記事では、Onset 検出や局所/大域のテンポ分析などリズム分析においてよく使われる、Novelty Function についてPythonのコードとともに紹介します。実装と理解の助けになれば幸いです。 はじめに Novelty Curve/Function (Onset_envelope) 実…

librosa.core.load() のバックエンドが audioread から PySoundFile に代わった件

PySoundFile vs audioread ? LibROSAを最新版 (0.7.1) に更新したら、LibROSAの音楽信号の読込を担う load()のバックエンドが、audioreadからPySoundFileに代わったとのこと。 ただし、LibROSA 0.7.1では、PySoundFileがインストールされていない場合は代わ…

Jupyter notebooksで音楽信号処理の基礎を学べるフレームワーク:FMP Notebooks

AudioLabs @ FAU の、音楽信号処理の権威、Meinard Müller 先生が、ご自身の著書 "Fundamentals of Music Processing (FMP)."に沿った教材として、Jupyter notebooks で音楽信号処理の基礎を学べるフレームワーク:FMP Notebooks を公開しています。 音楽信…

Python: LibROSA で調波打楽器音分離 (HPSS)

調波打楽器音分離とは? 一般的な楽曲では、様々な楽器音が含まれています。 そのため、元の楽曲信号から直接、音楽的な情報(例:コード進行)を分析するのは 計算機ではなかなか難しいです*1。 そこで、分析の前処理として、 打楽器の音と非打楽器(調波楽…

Python: LibROSAによるBPM自動算出の詳細 

はじめに この記事では、Pythonの音楽分析モジュールである LibROSAで 実装されているBPM算出手法について、コードをベースに 解説をします。 BPM自動算出の概要・設計方針については、以下の記事をご参考ください。 www.wizard-notes.com はじめに LibROSA…

Python で楽曲のBPMを自動算出する方法

はじめに 音楽を分析する際に,楽曲のテンポを表す BPM (Beats Per Minute) は非常に重要な情報です。 例えば、音楽ジャンルごとに典型的なテンポが存在します。 従って、ある楽曲がどんな音楽ジャンルに属するかを知る手がかりとなります。 一般的ないくつ…

Flask:オーディオファイルをjQuery.ajaxでアップロードしながら、クライアント側でローカルのファイルを再生

スクリーンショット 背景 実装戦略・参考ページ サーバへの複数オーディオファイルのアップロード(ドラッグアンドドロップ) サーバ側でのファイルアップロード処理・ファイル保存 クライアント側で、ローカルにあるオーディオファイルを再生 実装 ディレク…

Flask:Webアプリでサーバ上のオーディオファイルを再生・ダウンロード(Blueprint版、デモ付き)

概要 ディレクトリ構成 ソースコード views.py ポイント1:index.htmlの配置とディレクトリ構成 ポイント2:サーバから送るファイルの配置 run.py(一部掲載) index.html デモ 概要 前回ご紹介した、ブラウザ上でサーバ上の音源を再生するFlask実装を、Bl…

Flask:Webアプリでサーバ上のオーディオファイルを再生・ダウンロード

概要 ブラウザ上でサーバ上の音源を再生するWebアプリを、Flaskで実現するための実装例です。 ディレクトリ構成 flask_play_audio/ ├ music/ │ └ audio.mp3 ├ templates/ │ └ index.html └ app.py ソースコード app.py # -*- coding: utf-8 -*- from flask i…

Flask+Flask-Dropzone+LibROSAで作るオーディオ信号処理基盤

はじめに 実装 index.html Flaskの主要部(app.py) オーディオ信号処理モジュール 最後に はじめに NumPyやLibROSA、scikit-learnなどのPythonの素晴らしい信号処理・統計解析モジュールを利用してオーディオ信号処理アプリを作るため、学習コストが低いマ…

Robust PCAによる歌声抽出(Python実装)

概要 以前から気になっていた、 Robust PCAによる歌声抽出 *1 を実装し、実際の楽曲でボーカル抽出をやってみました。 Robust PCAについて Robust PCAによる歌声抽出では、楽曲を表す行列\({\bf X}\)を低ランク行列\({\bf L}\)とスパース行列\({\bf S}\)の和…

NMF2DのPython実装と楽曲への適用

動機 近年、深層学習による音信号処理が流行しており、様々な分野で優れた成果が報告されています。 よく利用されているネットワーク設計であるCNN(畳み込みニューラルネット)を眺めてみると、単層ではNMFD、NMF2Dと似た信号処理であることに気づきます。…

Python モジュール・関数の動的なインポート

概要 開発したPythonスクリプトに対して、ユーザが処理(関数)を簡単に追加できるようにする方法として importlib が使えそうだったので、試してみました。 フォルダ構成 root/ ├ main.py └ plugins/ └ my_funcs.py 実装 ユーザが追加する関数には、あらか…

Anaconda (Windows10):conda で Permission Error

問題 Windows10において、conda update condaやconda install tensorflow で以下のようなエラーと遭遇しました Preparing transaction: done Verifying transaction: done Executing transaction: failed ERROR conda.core.link:_execute(502): An error occ…

Pythonにおける辞書型を用いた多数の実験用パラメタ・実験条件の管理について

やりたいこと 研究開発におけるパラメタの探索や、API化を見据えたPython上でのアルゴリズム開発において、 以下のような実験用パラメタの管理を考えます。 config = { "param_0": [0.01, 0.1, 1.0], "param_1": ["l1", "l2"], "param_2": [0, 10, 20, 30] }…

YouTubeの音楽をPythonで解析:YouTube Data APIによる複数の動画コンテンツID・メタ情報収集

はじめに 今回は、動画に紐づいた動画メタ情報・統計情報の抽出、およびYouTube-dlによる楽曲解析スクリプトの入力となる複数動画のコンテンツID・メタ情報を収集する方法を紹介します。 抽出には、YouTube Data API を利用します。 はじめに YouTube Data A…

YouTubeの音楽をPythonで解析:youtube-dlによる動画メタデータ収集

はじめに 投稿日時や再生数といった動画メタデータを収集するスクリプトを作成しました。 はじめに youtube-dlによる動画メタデータ収集スクリプト 実行結果 楽曲の分析に利用できそうなメタデータ一覧 コーデック関連 コンテンツ関連 動画の評価 まとめ you…

Notepad++のプラグインによるMarkdownプレビュー

概要 Notepad++でMarkdown記法で書かれたファイルをプレビューできたら…と思って探したところ、簡単に導入できるプラグインを見つけたので紹介します。 概要 MarkdownViewerPlusPlus 導入方法 (1) プラグインをダウンロード (2) プラグインをNotepad++のプラ…