Wizard Notes

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

Python:適応フィルタを使ったフィードバックキャンセラの実装(ハウリング除去)

カラオケや補聴器のような音響システムでは、スピーカから出力した音が再びマイクへの入力としてフィードバックされることによる発振ハウリングが問題となります. このハウリングを信号処理(適応フィルタ)によって除去する方法として、フィードバックキャ…

Python:Pyroomacousticsを使ってインパルス応答を作成

Pyroomacoustics はPython向けの音響アレイ信号処理のラピッドプロトタイピングプラットフォームです。 github.com Pyroomacoustics の便利な機能の一つとして、僅かな行数のスクリプトで多面体の部屋の室内インパルス応答を生成することができます。 インパ…

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

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

オーディオテクニカの耳掛けイヤホン ATH-EM9R のノイズ(ビビり音)を修理する

ATH-EM9Rで音楽を聞いていると、両耳とも少しノイズ(ビビり音)があるように聴こえたので、分解して修理してみました。 結論としては、イヤーパッドの劣化が原因でした。 構造的に、ATH-EM9Rだけでなく ATH-EW9, ATH-EM9D, ATH-EM7, ATH-EM700 などでも同じ…

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

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

Pythonでボーカル・ドラム・ベース・伴奏を抽出できる楽器分離ライブラリ Spleeter の使い方・デモ

https://github.com/deezer/spleeter より 楽曲のメロディ・和音・リズムといった音楽的分析を行うには、個々の構成楽器ごとの分析が重要です。 楽譜・MIDIファイルは情報が各トラックごとに分かれているため メロディ・和音・リズムといった音楽的要素・文…

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

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

LibROSAの音響特徴量を使って楽曲のサビを自動で検出する (librosa.feature.rms, librosa.feature.spectral_centroid)

ポピュラー音楽では、楽曲の聞かせどころであるサビは楽曲の最も盛り上がる部分であり、その楽曲の印象に深くかかわります。 サビ検出には様々な手法がありますが、今回は実装が簡単な手法として音響特徴量を使ったサビ検出手法を実装・検証してみました。 …

LibROSA付属の音声・オーディオデータ一覧と使い方 (librosa.ex, librosa.example) [v0.9.1]

https://librosa.org/doc/latest/recordings.html より Pythonの音楽分析用モジュール LibROSA には、いくつかのサンプルデータが付属しています。 そのため、オーディオデータを自分で用意しなくても音楽データ分析をすぐに試すことができます。 そこで、こ…

scipy.signal.oaconvolve:FIRフィルタの畳み込み演算を効率的に行うオーバーラップ加算法の使い方と計算速度について

はじめに 音信号処理では音を加工する1つの方法としてFIRフィルタがよく使われます。 具体的な計算としては、元の信号とFIRフィルタ信号の畳み込み演算を行います。 この畳み込み演算を時間領域で素直に行うと、元の信号長×FIRフィルタ長の計算が必要です。 …

wavesurfer.js:簡単に音声ファイルの再生と波形描画が実装できるJavaScriptライブラリ

https://wavesurfer-js.org より ユーザが音楽を再生する Web アプリでは、音の出力するだけでなく、 波形描画などで音を可視化したり、操作が分かりやすいGUIを設計する必要があります。 原理的には、Web Audio API において音波形の信号値が格納されている…

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

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

JavaScript:React+wavesurfer.jsでローカルの音声ファイルの再生・波形表示

JavaScriptで音声を再生・波形表示するのに便利なライブラリとして wavesurfer.js があります。 wavesurfer-js.org 今回はこのwavesurfer.jsを使って、ローカルの音声ファイルを再生・表示するWebアプリを作ります。 JavasScript Chrome向け デモ 参考 Web …

JavaScript:React+Audioオブジェクトで音声ファイルをアップロード&再生

Webアプリで音声の再生を実現する方法としては、 HTMLの<audio> 要素の利用 JSのWebAudioAPIでAudioBufferを読み込み がよく知られています。 遅延が許されない効果音や、信号処理をして再生するような用途ではAudioBufferを読み込みますが、Javascriptでの実装が少</audio>…

Notepad++でHTML/XMLを自動フォーマット/インデントする方法

HTML/XMLファイルの編集においてインデントはコードの保守管理を考えると非常に重要です。 Webサイトが大規模化した時や改修が必要になってHTML/XMLを見返した時に、インデントが綺麗にそろっていると構成を把握しやすいです。 また、ケアレスミスを減らすこ…

歌声/楽曲分析・音源分離に使えるデータセット 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…

Python (Anaconda) の再インストール後に起動しないエラーへの対処(環境変数の設定)

エラー内容 解決策 エラー内容 環境:Win10 Visual Studio でインストールしたPython (Anaconda) をアンインストールし、Python.orgのインストーラを使ってPythonを再導入した際に発生したエラーです。 なお、Python.orgのインストーラだけでなくMiniconda …

Python:PyQtで複数の画面/ウィンドウ (Widget) を表示する

元ネタ: www.pythonguis.com PyQtを使って実用的なアプリを作ろうとすると、描画や設定などの画面を個別に表示するために複数ウィンドウを実装したいことがあります。 まず、素直に以下のようなコードを実装・実行してみます。 import sys from PyQt5.QtWid…

耳かけイヤホン ATH-EM7 の修理・改造

はじめに 前の記事では、中古で入手したオーディオテクニカの耳掛けイヤホンの ATH-EM7 を分解してみました。 www.wizard-notes.com この ATH-EM7 を分解することで、 イヤパッドの交換が必要である 背面に吸音材がない(ATH-EW9は有り) 耳かけ部のラバーサ…

iPhone 13 Pro Max のおすすめアクセサリー:手帳型ケース・クリアケース・スタンド(MOFT Snap-On)

はじめに 2015年から iPhone 6s Plus を6年ほど使っていましたが、スペック的な面で度々ストレスを感じていたので、2021年9月に iPhone 13 Pro Max を購入しました。 iPhone 6s Plus と比べると若干大きく、また、重さも192 g ⇒ 238 gとなっているため最初は…

秋月電子のNJM4580DD使用ヘッドホンアンプキットの組み立て

アナログ回路・電子工作の勉強と、オペアンプによる音質の違いを検証するため、 秋月電子のNJM4580DD使用ヘッドホンアンプキットを組み立ててみました。 akizukidenshi.com 2回路入りのオペアンプ、NJM4580DDを使ったヘッドホンアンプキットです、45mm×45mm…

オーディオテクニカの耳掛けイヤホン ATH-EM7 を試聴・分解する

オーディオテクニカの耳掛けイヤホン ATH-EM7を中古で入手しました。 kakaku.com ハウジングは鍛造アルミ合金ハウジング搭載*1であり、高級感があるカッコいいデザインとなっています。 少し試聴した後、改造を検討するために分解してみました。 基本的な設…

マイコドリの不思議な音

日本音響学会誌に「鳥類の非発声音コミュニケーションの機能と進化 ―求愛信号の多様性からの考察―」という解説論文が掲載されていました。 相馬 雅代 鳥類の非発声音コミュニケーションの機能と進化 鳥の音と言えば鳴き声が真っ先に思い浮かびますが、この論…

余ったU型ケーブルをMMCXケーブルに改造(イヤホン・ヘッドホンリケーブル)

www.wizard-notes.com 先日ATH-EW9のMMCXリケーブル をしたことで、元々ATH-EW9についていたU型ケーブルを持て余していました。 品質的にも良いケーブルであり、また絡まりにくいU型ケーブルなので再利用したいと思い、MMCXケーブルに改造することを思いつい…

耳掛けイヤホン ATH-EW9 をワイヤレスイヤホンに改造する (MMCX,無線化,Bluetoothヘッドセット,リケーブル)

諸注意 はじめに 改造のメリット 利用した工具・パーツ 手順 1. ハウジングを外す 2. MMCXメス端子を出す穴を作る 3. MMCXメス端子のハンダ付け・マウント 4. ハウジングを取り付ける まとめ 付録:余ったケーブルのMMCXケーブル化 参考・関連Webサイト 諸注…

高次のバターワースフィルタ(ハイパス)の不安定性について scipy.signal.butterworth

マルチバンド処理用のフィルタバンク実装でバターワースフィルタによるハイパスフィルタを使おうとすると,7次くらいから周波数応答が不安定になりました. ハイパスフィルタ 周波数応答をプロット してみると,scipy.signal.butterworthのハイパスフィルタ…

Python:変数がNumPy配列かどうか判別する方法

Pythonで数値計算や信号処理をしていると,NumPy配列かどうか判別したいことがあります. import numpy as np np_array = np.array([0, 1, 2]) type(np_array) #=> <class 'numpy.ndarray'> type(python_list) #=> <class 'list'> 以上の例から NumPy配列とPythonのリストオブジェクトは異なるため</class></class>…

Python:マルチバンド処理用フィルタバンクのクラス設計・実装・動作検証

以前の記事では,木構造のような信号処理フローのマルチバンド処理を紹介しました. この記事では、実装・利用しやすさに着目して信号処理フローを再設計・実装します。 設計 以前の記事では木構造の処理フローでしたが,今回は低域のカットオフ周波数から徐…