Wizard Notes

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

楽曲解析

ChatGPT で J-POP 楽曲の歌詞の感情分析

音楽の特徴分析について、当ブログでは音響信号からテンポや音色のような音楽的特徴を分析する手法を紹介してきました。 一方で、音楽は音響的な要素だけでないので映像や自然言語(歌詞)からのアプローチや、ソーシャルデータを用いた手法も数多くあります…

和音のモダリティ(明るいー暗い/嬉しいー悲しい)を算出するモダリティ曲線 (Modality Curve) のPython実装

不協和度、緊張度に引き続き、“The Psychophysics of Harmony Perception: Harmony is a Three-Tone Phenomenon” より和音の明るさー暗さや嬉しさー悲しさを表すとされる和音のモダリティの算出モデルについて紹介します。 また、モダリティ曲線を算出するPy…

和音の緊張度を算出する緊張度曲線 (Tension Curve) のPython実装

前回に引き続き、“The Psychophysics of Harmony Perception: Harmony is a Three-Tone Phenomenon” より和音の心理数理モデルのPython実装を行います。 今回は、和音の緊張度を分析する数理モデルを扱います。 用途としては、減3和音や増3和音のような緊張…

和音の協和度を算出する不協和度曲線 (Dissonance Curve) のPython実装

和音の響きはその音楽の雰囲気を分析する重要な要素です。 長/短3和音のような明るい/悲しいといった響きから、ジャジーな和音の複雑で豊かな響きまで様々です。 このような和音の響きを計算機で分析する方法はいくつかあります。 今回は、和音がどのくら…

OpenAir:様々な空間で収録されたインパルス応答 (IR) の無料データセット

https://www.openair.hosted.york.ac.uk/ 動画やゲーム,AR/MRコンテンツで利用する音源にリアルな残響音を付加する手法として、コンボリューション(畳み込み)リバーブがあります。 これは、インパルス応答と呼ばれる実測で収録した残響音データを使って、…

Python:Spleeter にNumpy配列を与え、ボーカル・ベース・調波楽器を抽出してクロマベクトルを算出する

https://github.com/deezer/spleeter より 前回の記事では、Python向け楽器分離ライブラリ Spleeter の使い方を紹介しました。 具体的には、2-mixの楽曲ファイルを、ボーカルやベース、ドラムといったオーディオファイルに分離する方法を紹介しました。 Pyth…

楽曲構造をタグ付けする自作WebアプリSongTagの機能追加・修正1

楽曲構成タグ付けWebアプリ - SongTag SongTagを開く 以前、楽曲構造の分析を行う支援ツールとして楽曲構成タグ付けWebアプリを実装しました。 www.wizard-notes.com www.wizard-notes.com さっそくアプリを使って自身で楽曲構造タグ付けの作業をするうちに…

素早く手軽に楽曲構造をタグ付けするWebアプリの試作

以下のような楽曲構造の分析を行うには、Aメロ、Bメロ、サビといった区間の情報が重要になってきます。 www.wizard-notes.com 特に複数楽曲を分析するには、特定のフォーマットに従う区間情報データを書く楽曲について用意する必要があるため、曲数が多いほ…

歌声/楽曲分析・音源分離に使えるステムファイルのデータセット MUSDB18

https://sigsep.github.io/datasets/musdb.html#musdb18-compressed-stems より 以前の記事では、様々な音楽ジャンルのステムデータ付き楽曲データセット DSD100 を紹介しました。 www.wizard-notes.com DSD100 は全100曲とそれなりの楽曲数がありますが、大…

歌声/楽曲分析・音源分離に使えるステムファイルのデータセット DSD100

https://sigsep.github.io/datasets/dsd100.html より 楽曲分析や音源分離のアルゴリズムを開発・動作検証する際には、何らかの楽曲データセットが必要になります。 市販の楽曲データを利用する手もありますが、2Mix・マスタリングされた音源だけでは動作検…

Ado のアルバム収録曲の BPM 一覧 [狂言]

Adoの楽曲のBPMを算出しました。 BPMはWaveTone を使って手動+自動解析しています。 小数点以下がある場合は小数第一位を四捨五入して整数にしています。 各アルバム楽曲のBPM 狂言 (2022年) 収録順 曲名 時間 BPM 1 レディメイド 4:03 195 2 踊 3:30 128 3…

「米津玄師の似た曲データベース」作成のための類似曲検索システム設計

www.wizard-notes.com 2021年7月に、開発中であるテンポ分析に基づく類似曲分析システムの設計・実装を一から見直し、米津玄師の似た曲データベースを作りました。 この類似曲分析システムの全体像と、各処理で使われている技術の紹介、そしてシステム設計・…

BPM・テンポ分析に基づく米津玄師の似た曲データベース(diorama, YANKEE, Bremen, BOOTLEG, STRAY SHEEP)

テンポ分析に基づく類似曲検索AIを使って、 米津玄師の似た曲データベースを作ってみました。 分析曲は、以下の5つのアルバムの収録曲全74曲としました。 diorama YANKEE Bremen BOOTLEG STRAY SHEEP 類似曲検索AI は、表中の「類似度」が 1.0 に近いほど基…

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…

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: Constant-Q Transform) の 解説(音高・コード・メロディの分析向け)

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

Python: waveモジュールを使ったWAVファイル読み込みとNumPy化 (8-bit, 16-bit, 24-bit, 32-bit int)

前置き Python wave モジュール 実装/テスト 最後に Float形式のWAVファイルについて 前置き 音楽プレイヤーのような音楽ソフトウェアの開発では、まずオーディオファイルから時間信号を読み込む処理が第一歩となります。 オーディオファイルは数多くの種類…

PythonでSSM(自己類似度行列)を使って楽曲構成(Aメロ,サビなど)を分析

計算機を使った音楽分析技術の一つとして、楽曲構成(Aメロ、Bメロ、サビ)を分析する方法があります。 しかし、日本語で技術の具体的な実現方法や実装について説明のある文献はあまり多くありません。また、Pythonの音楽分析ライブラリ LibROSA にはまだ実…

LibROSAにおける Salience (顕著性)スペクトログラムの算出方法の解説

はじめに この記事では、 以下の記事で紹介 LibROSAのSalience スペクトログラムの算出方法を解説します。 www.wizard-notes.com 実際の計算方法、プログラムはlibrosa.salience() をご参照ください。 Salience スペクトログラムとは Salience スペクトログ…

Audacity でラウドネスノーマライゼーション

最近の音の配信サービスでは様々な音源を聴感的に同じ音量で聞けるように、ラウドネスノーマライゼーションが採用されています。 身近なオーディオ加工用ソフトウェアでは、2020年5月にリリースされた Audacity ver. 2.4.0 もしくはそれ以降のバージョンでラ…

librosaにおける16-bitでのWAV書き出し (librosa.output.write_wav)

問題 最近のバージョンの librosa では、信号を保存する時、16-bit 整数(int)型のWAVファイルで書き出そうとすると、以下のようなエラーが出てしまい、ファイル出力できません。 >>> import numpy as np >>> import librosa >>> y = np.sin(2.0*np.pi*440*…

Python で iTunes Search API を叩いて iTunes Storeの音楽を検索する

はじめに iTunes の Search API を使うと、iTunes Storeで販売されているコンテンツを検索することができます。 iTunes Search API – Partner Resources 検索用のAPI自体は、デベロッパーとしての登録やAPIトークンが必要ないため、手軽に利用できます。 こ…

レーベンシュタイン距離で似た曲名・アーティスト名を検索(Python実装)

はじめに 表記に一部誤りを含む曲名・アーティスト名を入力として、正しい名前を出力 or マッチ度を計算する関数を作る必要があったため、調査・実装など検討してみました。 はじめに レーベンシュタイン距離 使ってみた 付録・実装 レーベンシュタイン距離 …

L'Arc-en-Ciel の曲の中から、似たBPM/テンポの曲を検索

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

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

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