Wizard Notes

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

音響音楽信号処理

L'Arc-en-Ciel 130曲から、人気楽曲15曲と似た曲を検索

概要 ラルクの似た曲検索、とりあえず類似度プロットまで。 pic.twitter.com/FbIF4Wf9tm— Kurene (@_kurene) December 24, 2019 これまでに、Perfumeや東方プロジェクトなどの楽曲を使って、同一アーティストの似た曲を検索するアルゴリズム構築をしてきまし…

Spotify Web API で取得できる音響・楽曲特徴量の一覧

はじめに Spotify の Web APIを調べていたら、APIを叩いて取得できる音響・楽曲特徴量のドキュメントを発見しました。 developer.spotify.com 非常に興味深い特徴量がいくつかあったので、紹介したいと思います 各特徴量の説明 duration_ms: int 楽曲の時間…

librosa.core.magphaseで振幅スペクトルと位相スペクトルを複素信号から抽出

LibROSAの便利な関数として、librosa.core.magphaseがあります。 この関数を使うことで、短時間フーリエ変換librosa.stftや定Q変換librosa.cqtで出力される複素信号から、振幅スペクトルと位相スペクトルを抽出することができます。 それでは、librosa.core.…

PyQt5とPyAudioで作るBPM計測アプリ

www.youtube.com PyQt5の習作として、PyQt5とPyAudioを使ったBPM計測アプリを作ってみました。 よくあるBPM計測器の仕様となっていて、ユーザが拍位置でボタンクリックやキータイピングをすることで、BPMを計測をすることができます。 インターフェースもア…

Python+Mutagenで、複数の楽曲から情報(楽曲の長さなど)を高速に抽出

Pythonで複数の楽曲データの長さを調べる時、真面目に楽曲ファイルを読み込んでNumpy配列のshapeを調べて…とすると、かなり時間がかかってしまいます。数百曲以上になると、それだけで時間の無駄です。 そこで、Mutagenを利用して、メタタグ情報から長さを得…

PyAudioとPyQtで作る簡易シンセサイザ

生成した音信号を気軽に鳴らせるシステムが欲しくなり、結果的にシンセサイザもどきを作ってみました。 MIDIを扱うと面倒なので、Numpy/Scipyで生成した音信号を直接オーディオ出力できるような構造になっています。 また、一応シンセサイザっぽい見た目なの…

Perfume The Best "P Cubed" の全52曲をデータ分析:テンポ特徴+主成分分析+類似度行列で楽曲推薦

東方プロジェクトの音楽をデータ分析:テンポ特徴+主成分分析+類似度行列で楽曲推薦 に引き続き、「Perfume The Best "P Cubed"」で似たテンポの楽曲を探すためのデータ分析をしてみました。 (以下の記事で)以前にも分析しましたが、今回は類似度行列を…

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

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

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

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

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

音楽の三大要素、メロディ・ハーモニー・リズムの内、ハーモニーの根幹を担っているのが和音です。 おそらく、楽器を演奏したり、曲の耳コピをしたことがある人は、一度は計算機で和音(進行)を自動で分析できたらいいな、と思ったことがあるはずです。 一…

カラオケ音源を使ったボーカル抽出を防ぐための7つの対策法

歌入りオリジナル音源から、カラオケ音源を引くことで、ボーカルだけを抽出できることはよく知られています。歌声りっぷのようなソフトウェアもこの仕組みを利用しており、また、オーディオ編集に慣れている人であればDAW上で簡単に抽出することができます。…

LibROSA:Pythonで手軽に始める音楽データ分析

LibROSA とは? 出典:https://librosa.github.io/ 「自分の好きな音楽をPCで分析したり、音楽データで機械学習やディープラーニングをやってみたい。でも、音データの信号処理やデータの扱いに困っている」と、悩んでいるエンジニアの方は多いと思います。 …

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

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

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

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

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

デモ・概要 前回のリアルタイムスペクトルアナライザ を応用して、リアルタイムで音高を表示するプログラムをPyAudioとmatplotlib を使って作ってみました。 www.wizard-notes.com デモ・概要 実装 main.py AudioInputStream: PC上の音の取得 SpectrumAnalyz…

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系が増え…

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

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

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

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

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

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

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) は非常に重要な情報です。 例えば、音楽ジャンルごとに典型的なテンポが存在します。 従って、ある楽曲がどんな音楽ジャンルに属するかを知る手がかりとなります。 一般的ないくつ…

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

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

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

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

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

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

Pythonによる音響音楽信号処理:クロスフェード自動生成 (2)フェードイン・フェードアウト関数

概要 フェードイン・フェードアウト関数の設計 関数の例 直線 f(x)=x コサイン関数 f(x)=cos(x・π/2) 平方根 f(x)=sqrt(x) フェードイン・フェードアウト関数の適用例 結局、どれを使えばいいのか? 概要 本記事では、クロスフェードで用いるフェードイン・フ…

Pythonによる音響音楽信号処理:クロスフェード自動生成 (1)アルゴリズムの概要

※2018/10/19: Bloggerから移行しました 概要 LibROSAについて 問題設定 アルゴリズム設計と実装 必要な処理の列挙 Pythonスクリプトの全体像 get_highlight() add_fade() gen_xfade() 結果 まとめ 補足 概要 Python(LibROSA)を用いた音響音楽信号処理とし…