Wizard Notes

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

音響音楽信号処理

様々なサンプリング周波数に対応した K-weighting フィルタの設計

2021/1/3: alphaの算出方法がsin(w0)/Qとなっていたため、sin(w0)/(2Q)に修正 導入 ラウドネスメーターで使われるLKFSやLUFSの算出における信号処理の流れは、以下のブロック図のように、 K周波数重み付け(K-weighting) 各チャネルでエネルギーを計算し集…

Python PyFilterBankで環境音をオクターブバンド分析

はじめに 音信号の分析では、時間波形を直接分析するのではなく、様々な周波数分析手法を利用します。 比較的細かい周波数成分を見る方法としては、 STFT (短時間フーリエ変換) CQT (定Q変換) メルフィルタバンク がよく使われています。これらのライブラリ…

PyQtで作るdB単位の音量フェーダー

dB単位の音量フェーダー pic.twitter.com/mJK2E6RmnJ— Kurene (@_kurene) 2020年12月22日 PyQtで作るdB単位の音量フェーダーを作ってみました。 信号に乗算するゲイン係数は、音量フェーダーのdB値 x から、 として算出しています。 ソースコード GUI クリッ…

メロディ分析/抽出のための、librosa.salience() によるSalience (顕著性) スペクトログラムの算出

はじめに Python の音楽信号分析モジュールである LibROSAには、楽曲の音高/メロディ/和音情報をより精度よく抽出するためのツールとして、Salience (顕著性)スペクトログラムを抽出する関数 librosa.salience が実装されています。 今回は、librosa.sal…

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

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

Python:LibROSA のフェーズボコーダで時間伸縮・ピッチシフト librosa.phase_vocoder

まえがき 使い方 関数の仕様 サンプルコードとプロット librosa.phase_vocoderの中身について 重要な中間変数を抜粋 メイン処理 補足:フェーズボコーダを使ったピッチシフトの実現方法 librosa.phase_vocoderの音質について 参考文献 まえがき オーディオ編…

Python LibROSA で音楽・歌声(ボーカル)をピッチシフト librosa.effects.pitch_shift()

まえがき librosa.effects.pitch_shift() の使い方 引数について 半音単位のピッチシフト 周波数を指定するピッチシフト 使い方のサンプル プロット コード 注意 補足:ピッチシフトはタイムストレッチ? まえがき ボーカルや楽器の録音データに対して、 「…

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

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

librosaにおける16-bitでのWAV書き出し

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

Pythonで作る音楽プレイヤー:PyQt5 で簡易GUI作成

Pythonで作る音楽プレイヤー:PyQt5 で簡易GUI作成 Pythonで作る、信号処理開発プラットフォーム用の音楽プレイヤー - Wizard Notes で作った音楽プレイヤーモジュールですが、CUIでは使いにくいので、PyQt5を使って簡単なGUIを作ってみました。 実装 クリッ…

Pythonで作る、信号処理開発プラットフォーム用の音楽プレイヤー

今更感がありますが、Pythonで自作のエフェクトをすぐ試せる環境があると開発が捗るので、音楽プレイヤーモジュールを実装 pic.twitter.com/4yEN2wQ07X— Kurene (@_kurene) August 10, 2020 リアルタイム音響信号処理プラグインの開発において、開発言語がC+…

チェビシェフ多項式のナイーブな実装

線スペクトル対 (LSP) を実装するにあたり、第1チェビシェフ多項式を利用するため実装してみました。 実装・検証したコードはPythonですが、VSTプラグイン化を見据えてC++を想定したナイーブ実装となっています。 概要 チェビシェフ多項式 - Wikipedia Cheb…

ボイスチェンジャー向けフィルタ設計:周波数ワープによるフィルタ係数の修正と実装方法

リアルタイム声質加工プラグインの開発進捗。声を太くしたり子供っぽくしたりできる処理のデモです。 pic.twitter.com/JcfwPJ2OCc— Kurene (@_kurene) July 18, 2020 線形予測分析+周波数ワープでリアルタイムで声質を加工する処理を作りました。 ボイスチ…

SciPyを使ったデジタルフィルタの周波数応答プロット

実装したIIR/FIRフィルタが正しく動作しているかどうか検証する必要があったため、 デジタルフィルタの周波数応答(周波数特性)をプロットするスクリプトを作りました。 基本的には scipy.signal.freqz() の example とほぼ同じで、 プロット部分を少し整理…

線形畳み込みのforループでのナイーブな実装 (Python)

VSTプラグインで線形畳み込みを実装する必要が出てきたので、 事前にPythonでC++ライクな実装を検証しました。 とりあえず、2つの入力信号の配列サイズ不明で、最適化していない実装です。 import numpy as np from numba import jit @jit def conv_linear(…

フォルマント強調フィルタの設計に関する備忘録

フォルマントの強調っぽい処理で"いい声"に加工する自作フィルタのプロトタイプ(前半:元の歌声、後半:フィルタリング後) pic.twitter.com/deOz1DJjIv— Kurene (@_kurene) 2020年7月7日 先日作ったフォルマント強調フィルタ、実は低ビットレート音声符号…

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 楽曲の時間…

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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. …