Wizard Notes

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

音響音楽信号処理

gpuRIR:Python+GPUで室内残響を鏡像法で高速生成【インストール方法・利用例】

はじめに 1. 鏡像法とは 1.1 計算のイメージ 1.2 CPUでのシミュレーションの限界と、GPUの利点 2. gpuRIRとは 3. 環境構築 3.1 必要なソフトウェア 3.2 Windows11での利用方法 4. gpuRIRの基本的な使い方 4.1 ライブラリのインポート、初期設定 4.2 シミュレ…

Windows11にWSL2(Linux)をインストールしてCUDA,Python開発環境を構築

はじめに 構築環境 インストールのマニュアル 1. NVIDIAドライバーのインストール 2. WSLのインストール 3. CUDAツールキットのインストール 4. Python環境の構築 【任意】 pyenvによるPythonのバージョン管理 pipのインストール matplotlibの対応 まとめ 関…

PythonでOctave (MATLAB) の関数を使える oct2py 【インストール方法・利用例】

はじめに インストール方法 検証環境 Octave, oct2pyの概要 octaveのインストール方法 oct2pyの導入 パッケージの導入 動作確認 利用例 基本操作 パッケージの利用 関数の返り値の数の指定:nout Octave独自の関数を使う例:invfreqz Octaveでの invfreqz() …

直列移動平均フィルタとCICフィルタ

はじめに 直列移動平均フィルタ (Cascaded moving average) N 次 CIC フィルタ リサンプリングでの利用 まとめ 参考文献 はじめに www.wizard-notes.com 上記の記事で紹介した移動平均フィルタですが、こちらを応用したフィルタとして直列移動平均フィルタと…

scipy.signal.minimum_phase による最小位相フィルタの算出 (Minimum-Phase/Allpass Decomposition)

はじめに どんな時に必要か 最小位相フィルタの算出方法 scipy.signal.minimum_phaseの紹介 利用例 算出の流れ ヒルベルト変換とホモモルフィック処理 まとめ 参考文献 関連記事 はじめに 信号処理の分野では「最小位相フィルタ」というキーワードがでてきま…

移動平均と指数平滑移動平均の周波数特性(振幅,位相,群遅延)

はじめに 定義 移動平均(Moving Average)とは 計算方法 特徴と用途 指数平滑移動平均(Exponential Moving Average)とは 計算方法 特徴と用途 移動平均と指数平滑移動平均の使い分け 周波数特性 移動平均 (MA) 指数平滑移動平均 (EMA) Pythonコード まと…

オクターブバンドの中心・下限・上限周波数のPythonでの算出と、基底に関する備忘録

オクターブバンドについて 中心周波数や下限・上限周波数の算出 基底について オクターブバンドについて 騒音のような音信号の周波数分析では,オクターブバンドフィルタがよく使われています。 www.wizard-notes.com 周波数分析といえばフーリエ変換が思い…

VST3 Project Generator を使ったエフェクタ (VSTe) の実装メモ

前回の記事でWindows11での VST3 開発環境構築が整ったので、試しに簡単なエフェクタを実装してみました。 VST3 SDK 3.7.0 から追加された VST3 Project Generator を使うことでプロジェクトを簡単に作ることができましたので、参考にしたWebページやメモを…

VST3開発環境の構築 (Windows11, Visual Studio 2022, VST SDK ver. 3.7)

[2023/5/2: Twitterで頂いたすずむし様からのご指摘を元に,VST SDK ver. 3.7.7での動作確認ができたため修正。ご情報ありがとうございました。] 前々からやろうと思っていたWin11,VS2022,VST3.7 でのVST開発環境の構築にトライしてみたところ、とりあえず…

振幅パンニング:サイン則(sine law)とタンジェント則(Tangent Law)の分配係数プロット

2台のスピーカを用いたステレオ再生において、左右のスピーカに振幅差をつけて再生することで両耳間位相差と両耳間強度差を実音源に近づくようにする手法を振幅パンニングといいます。 この振幅パンニングの代表的な手法としてサイン則とタンジェント則が知…

Overlap-Add法・Overlap-Save法(重畳加算法,重畳保留法)のPython実装

音信号処理の代表例として、コンボリューションリバーブ*1のような入力信号にインパルス応答を畳み込む処理が挙げられます。 この畳み込み演算をリアルタイムのブロック処理で実現する*2実用的な方法としては、 Overlap-Add法とOverlap-Save法が有名です。 …

Pythonで空間音響(バイノーラル)用ファイル形式 SOFA を処理(pysofaconventions)

需要が高まってきているバイノーラル処理にチャレンジする場合、まずはWeb上のSOFA形式のHRTFデータで試すことが多いかと思います。 Pythonであれば、SOFA形式のデータ読み込んで Numpy配列にさえ変換すればバイノーラル処理やプロットは容易です。 そこで、…

Lofi hiphop風の揺らぎのあるビートを作るドラムマシンのWebアプリ試作

lofi hiphop 風のビートをさくっと作れるリズムマシンの試作。前半がヨレたビートの生成,後半がランダムパターンのデモ #reactjs #webaudioapi #webapp #lofi #lofibeats #lofihiphophttps://t.co/L7qrtNEEmM pic.twitter.com/h0JvMf654O— Kurene (@_kurene…

シュレーダーリバーブ(人工残響エフェクタ)のPython実装と試聴デモ

今回は,以下の記事で紹介したオールパスフィルタによる残響生成を用いて、実用的な残響エフェクタとして有名なシュレーダーリバーブをPythonで実装してみました。 www.wizard-notes.com シュレーダーリバーブの概要 フィードバック型コムフィルタの回路につ…

Python:直列オールパスフィルタによる人工残響の生成と試聴

「信号処理に欠かせないオールパスフィルタ―」で紹介したオールパスフィルタの利用例として、人工残響フィルタを実装してみました。 設計方法 フィルタ応答の比較 試聴 Python実装 参考文献 設計方法 直列オールパスフィルタによる人工残響生成はシュレーダ…

Python:ヒルベルト変換で様々な信号の包絡線,瞬時位相,瞬時周波数を抽出

音の時間波形の包絡線を抽出や振幅変調(AM)の復調などで利用されるヒルベルト変換をPythonで実装し、いくつかの簡単な信号に対して適用してみました。 ヒルベルト変換の概要 ヒルベルト変換の仕組みや実装方法については、以下のWebページがわかりやすいで…

リアルタイム雑音抑圧処理:適応線スペクトル強調器 (ALE) のPython実装と適用例

音信号向けの簡単かつ実用的なリアルタイム向け雑音抑圧処理として,以下の書籍で適応線スペクトル強調器 (ALE) が紹介されていました. 上記の書籍を参考にしつつ,Pythonでの適応線スペクトル強調器 (ALE)の実装と,様々な信号への適用例を紹介します。 適…

xlsxやcsvのデータをExcelで間引く方法(INDIRECT, SUBSTITUTE, ADDRESS, ROW, COLUMN関数)

サンプル数が大きい時系列データや周波数応答が格納されたxlsxやcsvファイルをExcelで開くと、かなり動作が重くなることがあります。 そのようファイルでグラフをプロットのような操作をするのは動作が遅いため苦行ですし、Excelが突然落ちるリスクも高くな…

和音のモダリティ(明るいー暗い/嬉しいー悲しい)を算出するモダリティ曲線 (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和音のような明るい/悲しいといった響きから、ジャジーな和音の複雑で豊かな響きまで様々です。 このような和音の響きを計算機で分析する方法はいくつかあります。 今回は、和音がどのくら…

1次IIRオールパスフィルタでローパス/ハイパスフィルタを作る(Python実装)

「信号処理に欠かせないオールパスフィルタ―の概要・使い方・利用例」では、オールパスフィルタによって低演算量で様々な周波数特性のフィルタを作成できることを紹介しました。 www.wizard-notes.com この記事では、その具体例として1次IIRオールパスフィル…

信号処理に欠かせないオールパスフィルタ―の概要・使い方・利用例

※2022/9/28: λの算出式の符号が間違っていたためプロットとともに修正 信号処理におけるフィルタとしては、ローパス/ハイパスフィルタのような振幅特性を活用するフィルタが良く知られています。 しかし、一方で位相特性のみに影響を与えるオールパスフィル…

Python:エフェクター(音響効果処理)を簡単に実装・リアルタイム再生できるクラスの作成

入出力の管理リアルタイム音響信号処理を使った身近な機器としては、ボーカルやギターなどの楽器で利用されているエフェクターが挙げられます。 エフェクターは信号処理としては簡単なのですが、実際にPCでプログラミングをして音を出力するのは準備が割と大…

Python:numba (jit)で音響信号処理の高速化 - 2次IIRフィルタの処理時間計測

数値計算でよく利用されている Python (CPython) ですが、for文の処理が遅いという問題点があります。 音響信号処理ではC/C++風に配列の各要素にアクセスが必要な処理を for文を使って実装することが多いため、これは致命的です。 そこで、Python用のjitコン…

適応逆ノッチフィルタによるサイン波/調波成分の抽出(Python実装)

前回紹介した適応ノッチフィルタ は、正弦波信号を除去するアルゴリズムでした。 www.wizard-notes.com www.wizard-notes.com しかし、音楽信号処理でよくある楽音を抽出したいという要求には適応ノッチフィルタは利用しにくいです。 そこで今回は、正弦波信…

多段適応ノッチフィルタで複数の正弦波を除去/ドラム・打楽器音の抽出(Python実装)

前回の記事では、適応ノッチフィルタを使って音高が未知の正弦波を除去しました. www.wizard-notes.com しかし、正弦波が複数ある区間ではうまく動作しませんでした。 そこで、今回は複数の正弦波を除去できる、多段適応ノッチフィルタを紹介します。 また…

Python:sounddeviceを使った音声ファイルの再生・リアルタイム処理の実装方法

以下の記事では,Pythonで音の再生・録音を行うためのライブラリ sounddevice を紹介しました。 Python-sounddevice で音声や歌声をリアルタイム収音・再生・録音 - Wizard Notes この記事では、音の信号処理/アプリ開発でよく使う、音声ファイルの再生をso…

Python:適応ノッチフィルタで正弦波(周期性雑音)を除去

音響信号処理の良い参考書である プログラム101付き 音声信号処理 では、適応信号処理の一例として適応ノッチフィルタが紹介されています。 ただし、プログラムがC言語のみであり、また、数学的な説明が僅かであるため仕組みが分かりにくいです。 そこで、適…

グラフィックイコライザの周波数特性を補正するための最小二乗法による利得最適化

前回は、単純なグラフィックイコライザとして、1/Nオクターブバンドごとに双二次フィルタを用意し直列接続した実装を解説しました。 www.wizard-notes.com しかし、この手法だと、グラフィックイコライザ全体の周波数特性として各中心周波数での振幅値が指定…