Wizard Notes

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

楽曲解析

Perfume The Best "P Cubed"で、BPM/テンポの似た曲を探せるデータベースの作成[2021年7月更新]

東方プロジェクト原曲の、テンポの似た曲データベースを作ってみた と同じ手法を使って、Perfume The Best "P Cubed" の全52曲の中から、テンポの似た曲を列挙し、データシート/プレイリストとしてまとめてみました。 技術の詳細は、以下の記事をご参照くだ…

東方プロジェクトの音楽をデータ分析:テンポ特徴+主成分分析+類似度行列で楽曲推薦

前回、東方プロジェクト原曲(紅魔郷~輝針城)のBPM(テンポ)分析では、近年の作品ほどテンポが速くなっている傾向があるなど、いくつも興味深い結果が得られました。 今回は、BPMではなく、テンポ特徴(サイクリックテンポグラム)という最近の手法を使う…

東方プロジェクト原曲の、BPM/テンポの似た曲データベースを作ってみた

東方プロジェクトの音楽をデータ分析(テンポ特徴+主成分分析+類似度)にて作ったアルゴリズムで、東方プロジェクトの曲で似たテンポの楽曲を算出し、データベース化してみました。 基本的には、BPMが近い楽曲が似ている曲として列挙されています。しかし…

プレイリストやランキングの利用・著作権に関しての調査

法律に関する疑問を弁護士に無料で法律相談できる「弁護士ドットコム」というWebサービスがあります。このWebサービスの特徴は、無料相談の場合、質問と回答が公開されます。 その弁護士ドットコムに、音楽のプレイリスト・ランキングに関するFAQがいくつか…

マルコフ連鎖でコード進行を自動生成(Python実装)

伝統的な自動作曲・文章生成システムで使われている代表的アルゴリズムとして、マルコフ連鎖があります。 アカデミックな研究やアプリケーションとしては常套手段なのですが、Web上には音楽での 利用例・実装例があまりないようです。 そこで、マルコフ連鎖…

Python + LibROSAでクロマ特徴(クロマグラム)を使って和音推定:(1) テンプレートマッチング

音楽の三大要素、メロディ・ハーモニー・リズムの内、ハーモニーの根幹を担っているのが和音です。 そのため、計算機を使った楽曲分析でも和音分析は非常に重要な処理です。 ただ、楽譜データ*1は簡単ですが、オーディオファイルのような楽曲データからの和…

LibROSA:Pythonで手軽に始める音楽信号・データ分析 [2021年7月更新]

LibROSA とは? 出典:https://librosa.github.io/ 「自分の好きな音楽をパソコンで分析したい!」 「音楽データで機械学習・ディープラーニングをやってみたい!」 「でも、音データの信号処理やデータの扱い方がよく分からない…」 と悩んでいるエンジニア…

MS処理のためのMid/Side変換の実装解説(Pythonスクリプト付き)

MS処理(Mid/Side変換)とは? MS処理のイメージ 音響機器やマスタリングプラグインでMS処理という表記を見かけたことはありませんか? MS処理は、通常左右に分かれているステレオの信号を、 中央(ミッド)成分と非中央(サイド)成分に変換し、それぞれに…

LibROSA で MFCC(メル周波数ケプストラム係数)を算出して楽器の音色を分析

MFCC 算出の流れ この記事では、 音に関するデータ分析や機械学習・深層学習で良く使われている MFCC*1 (メル周波数ケプストラム係数)という特徴量を使って、楽器の音色を分析できるかどうかを検証します。 MFCC とは? LibROSAを使ったMFCCの算出方法 1. …

BPMから楽曲、楽曲からBPMを検索できるWebサイト: GetSongBPM

はじめに https://getsongbpm.com BPMを検索できそうなWebサイトやデータベースを探していると、このGetSongBPM という海外のサイトを見つけました。 getsongbpm.com 洋楽のBPMを調べたり、DJをやっている人には便利そうと感じたので、紹介したいと思います…

付録:東方プロジェクト原曲(紅魔郷~輝針城)のBPMデータシート

概要 東方プロジェクト原曲(紅魔郷~輝針城)のBPM(テンポ)分析 で使ったデータシートです。 多くの曲のBPMは以下のサイトを参考にさせていただきました。ありがとうございます。 w.atwiki.jp 掲載されていないものや、テンポ変動がある楽曲については、 …

東方プロジェクト原曲(紅魔郷~輝針城)のBPM分析

概要 おそらくBPM(テンポ)は、音楽を区別・認識したり音楽ジャンルを体系化したりするための、最重要な手がかりです。 そこで、BPM(テンポ)を使って身近な楽曲で音楽コンテンツを分析できないかと考えて、東方プロジェクト原曲(紅魔郷~輝針城)のBPM(…

Python+PyAudioで作るリアルタイム音高アナライザ

デモ・概要 https://github.com/Kurene/pyaudio_spectrum_analyzer/blob/master/libmir/rasp_audio_stream.py PyAudioとmatplotlib で、リアルタイムで音高を表示するプログラムを作ってみました。 このプログラムは、前回のリアルタイムスペクトルアナライ…

Python + PyAudio で作る、リアルタイムスペクトルアナライザ(ループバック録音対応)

デモ+概要 Python のPyAudio と matplotlib を使って、PC上で流れている音をリアルタイムで表示・分析できるスペクトルアナライザを作りました。以下の実装では VB-Audio社の仮想ミキサ "Voice Meeter" 向けの設定となっていますが、PortAudio 対応かつルー…

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

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

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

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

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

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

Python: Mutagenで複数のAAC (.m4a) 音源からタグ・メタ情報を抽出

はじめに 音楽分析を行う時には、音響信号だけでなく、大量の音源からのメタデータの抽出・編集・読み込み・書き込みが必要となることがあります。 手動でメタデータを管理する場合、 Mp3tag のようなソフトウェアを使うのが楽ですが、大量の音源のメタデー…

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

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

Pythonで楽曲のリズム・テンポ分析: Novelty Curve (楽曲変化検知曲線)

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

Python: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の自動算出手法について、Pythonのコードをベースに解説します。 BPM自動算出の概要・設計の方針については、以下の記事をご参考ください。 www.wizard-notes.…

楽曲のBPMを自動算出するプログラムの作り方(Pythonサンプルコード付き)

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

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

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

LibROSA: ステレオ信号のWAV書き出し(write_wav)におけるstruct.errorの解決方法

問題点 表題の通り、以下のコードでエラーが発生します。 import librosa sr=44100 #オーディオ信号をNumpy形式でロードし、yに格納 y, sr = librosa.core.load(input_filepath, sr=sr, mono=False) # yをwavフォーマットで書き出し # ここで、yがステレオ信…

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と似た信号処理であることに気づきます。…

YouTube Data API を使って複数の音楽動画のコンテンツID・メタ情報をまとめて収集

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