chevron_left

メインカテゴリーを選択しなおす

cancel
Wizard Notes https://www.wizard-notes.com/

音専門のエンジニアが書く、音響音楽解析の技術録、音楽のレビューおよび分析、作曲活動に関する雑記です。

Kurene
フォロー
住所
未設定
出身
未設定
ブログ村参加

2014/02/23

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

    www.wizard-notes.com 2021年7月に、開発中であるテンポ分析に基づく類似曲分析システムの設計・実装を一から見直し、米津玄師の似た曲データベースを作りました。 この類似曲分析システムの全体像と、各処理で使われている技術の紹介、そしてシステム設計・実装上のノウハウ・注意点を紹介します。 構成・処理フロー ① 分析する楽曲リスト作成+メタデータ抽出・タグ付け ② テンポ特徴量抽出 ③ 類似度の算出・可視化 ④ サブスクサービス での楽曲URL・情報取得 ⑤ 似た曲データベース作成 実装・ファイル管理の諸注意 文字コードはUTF-8推奨 CSV ではなくて TSVやJSONを使う…

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

    テンポ分析に基づく類似曲検索AIを使って、 米津玄師の似た曲データベースを作ってみました。 分析曲は、以下の5つのアルバムの収録曲全74曲としました。 diorama YANKEE Bremen BOOTLEG STRAY SHEEP 類似曲検索AI は、表中の「類似度」が 1.0 に近いほど基準曲に似ていると判断しています。 テンポ分析がベースなので、コード進行は基本的に考慮されていません。 リズムやノリ、グルーブ感が似ているかどうか、是非聞き比べてみてください。 類似曲検索AIはまだまだ開発途中ですが、技術の詳細が気になる方は以下の記事をご覧ください。 www.wizard-notes.c…

  • python の ローカルwebサーバ で React のサンプルコードを動かす

    最近新しい Web 音楽アプリを作ろうと考えています。 音楽関係の信号/情報処理はPythonを使いたいため、 サーバサイド: flask クライアントサイド: React という構成を検討しています。 React の勉強と理解のためにサンプルコードを走らせたり、実装した各コンポーネントのテストをローカルでする際に、なるべく自分が慣れているPython環境で動作させたいと思い、第一歩としてpython の ローカルwebサーバ でReactのサンプルコードを動かしてみました。 以下の記事を参考にしています。 正真正銘のReactだけの不純物なしでReact入門 Hello World – Re…

  • Python:あるディレクトリの複数の特定拡張子ファイルをまとめて削除

    Pythonでファイル処理をしていると、例えば、 「あるディレクトリ(フォルダ)の中にある、 ".png"と".wav"と".txt"という拡張子のファイルを全て削除したい」 というような状況がよくあります。 このような、あるディレクトリの複数の特定拡張子ファイルをまとめて削除するスクリプトを作成しました。 なるべく依存するライブラリを少なくしたかったため、globを利用しています。 import os import glob def remove_files(dirpath, exts): if type(exts) is not list: exts = [exts] for ext in…

  • Python:Spotify Web API であるアーティストの全てのアルバムの全楽曲情報を取得する

    市販楽曲の情報を入手する手軽な手段として、Spotify Web APIがあります。 以前の記事では、キーワードを入力して楽曲を検索していました。 www.wizard-notes.com しかし、この方法だとあるアーティストの名前をキーワードとして与えても、そのアーティストの楽曲の情報を全ての取得することはできないようです。 また、他のアーティストの楽曲やカバー曲も引っかかってしまうため、検索効率がよくないです。 そこで、Spotify Web API の search() 以外のAPIを使って、あるアーティストの全てのアルバムの全楽曲情報を確実に取得する方法を探してみました。 方針 以下の…

  • Python用 Spotify Web API "spotipy" の楽曲・アーティストを検索(インストール方法,サンプルコード,API仕様)

    楽曲の検索やメタ情報に関する Web API を提供しているサブスクリプション型音楽サービスはいくつかあります。 中でも Spotify Web API は様々な機能が提供されています。手軽に使えますし楽曲数も多いため、オススメの API です。 github.com 今回は、Spotify Web API の導入方法と、それを使って楽曲やアーティストを検索する方法を紹介します。 参考ページ Python用ライブラリの導入方法 Web API 利用のためのアクセストークン発行 Spotify Web API 使い方 (検索) サンプルコード search()の使い方 返り値の形式 (type=…

  • Python:audioread で mp3, aac, m4a 形式のオーディオファイルをNumPy配列として読み込む

    以下の記事にありますように、Python ではオーディオファイルの読み込むライブラリが複数あります。 しかし,.mp3, .aac, .m4a といった圧縮コーデックを読み込むものは多くありません。 www.wizard-notes.com 今回紹介する audioread では ffmpeg のようなバックエンドを呼び出すことで.mp3, .aac, .m4a といった圧縮コーデックもPython上で読み込むことができます*1。 合わせて、.mp3, .aac, .m4a などのオーディオファイルをNumPy配列として読み込むサンプルコードもご紹介します pypi.org audioread…

  • LibROSA:音楽のBPM・テンポ分析に便利なテンポグラムを数行で実装

    音楽の分析方法としてBPM・テンポの分析は非常に重要です。 BPM・テンポの分析を行うことで、楽曲の雰囲気、ノリ、音楽ジャンルといった全体的な特徴を捉えることができます。 BPM・テンポの分析方法としては、テンポグラムという便利な手法があります。 テンポグラムの実装は結構難しいですが、Pythonであれば音楽分析ライブラリ LibROSA を使うことで数行で算出することができます。 そこで、この記事では LibROSAを使ったテンポグラムの算出方法を紹介します。 LibROSAでのテンポグラム算出方法 LibROSA テンポグラム サンプルコード プロット例 Lemon (BPM=87) パプ…

  • Python:様々な拡張子&複数の楽曲ファイルを読み込んでNumPy配列として格納(wav, flac, mp3, aac, m4a, alac, etc.)

    表題のとおり,様々な拡張子に対応し,複数の楽曲ファイルを一括でNumpy配列に変換する関数です。 大量の音楽ファイルを分析する場合にオススメです。 ファイルの読み込みは librosa.load() を使っています。 librosa.load()は引数にサンプリング周波数を与えることで,楽曲ファイルのサンプリング周波数と引数にサンプリング周波数が異なる場合,resampy でリサンプリングしてくれます。 ただし、リサンプリングは割と処理時間がかかるので注意が必要です*1。 librosa.load()が扱いにくい場合は、PySoundFileを直接使うのがよいと思います。 # -*- codi…

  • 定Q変換のPython 実装:バッチ処理向けの実装方法の紹介と計算速度の比較

    前回の記事では,音楽信号の音高分析に便利な定Q変換 (CQT)のアルゴリズムや実装方法による計算速度の比較を行いました。 www.wizard-notes.com 結果として,再帰的ダウンサンプリング法による定Q変換がリアルタイム処理で実用的な計算速度であることが分かりました。 しかし、アルゴリズムは同じでもバッチ処理向けの実装である librosa.cqt が圧倒的に速い結果になりました。 そこで、今までリアルタイム処理用に実装してきた再帰的ダウンサンプリング法による定Q変換で、バッチ処理用の実装をすることで、LibROSA の定Q変換くらいの計算速度となるのか試してみました。 実装方法 リ…

  • 米津玄師のアルバム収録曲の BPM 一覧(diorama, YANKEE, Bremen, BOOTLEG, STRAY SHEEP)

    米津玄師のアルバム収録曲のテンポ分析に興味があったので、まずは楽曲を聞いてBPMを算出してみました。 BPMはWaveTone を使って手動+自動解析しています。 小数点以下がある場合は小数第一位を四捨五入して整数にしています。 各アルバム楽曲のBPM diorama YANKEE Bremen BOOTLEG STRAY SHEEP ヒストグラムなど 所感 各アルバム楽曲のBPM diorama Year Album Track Title Length BPM 2012 diorama 1 街 340 165 2012 diorama 2 ゴーゴー幽霊船 230 180 2012 dior…

  • 定Q変換のPython 実装のアルゴリズム/実装方法による計算速度の比較

    音楽信号の音高分析に便利な定Q変換 (CQT)。 これまでにいくつか計算アルゴリズムや実装方法の種類を紹介してきました。 おそらく再帰的ダウンサンプリング法が速いと思っていたのですが、条件によっては疎行列計算と変わらないことがあったりと、実環境での処理速度の違いが気になっていました。 そこで、3つのリアルタイム向け定Q変換の Python 実装と、オフライン向けであるLibROSA の定Q変換とSTFTの処理速度を比較してみました 比較環境 比較する手法と条件 比較1: 基本設定 比較2: 1オクターブあたりの周波数ビン数を増やす 比較3: 低周波数を分析しない場合 まとめ 関連ページ 比較環…

  • 再帰的ダウンサンプリング法による定Q変換 (CQT) のPython 実装とアルゴリズム解説

    定Q変換 (CQT)は歌声・音楽の音高/メロディ/和音を分析するのに便利な周波数分析方法です。 例えば,CQTスペクトログラムを算出すれば各音高(ドレミファ…)がどのくらいの強さで鳴っているかを時系列で観察することができます。 以下の記事では、定Q変換のリアルタイム向け実装としてパーセバル定理と疎行列計算を使った定Q変換の仕組みと実装方法を紹介しました。 www.wizard-notes.com www.wizard-notes.com しかし、この方法は疎行列計算ライブラリが使えないような環境では非常に低速になってしまいます。 そこで、以下の論文で紹介されている、疎行列計算を利用しなくても高…

  • Python LibROSA で音楽・歌声をタイムストレッチ(時間伸縮) librosa.effects.time_stretch()

    YouTubeやニコニコ動画のような動画サービスで0.5倍・2倍速再生が使えるのが一般的になっています。 また、サンプリングされた波形素材の時間伸縮がDAWの基本機能として搭載されていて、曲のタイミングやテンポに上手く合わせて波形素材をいい感じの長さで鳴らすことができます。 さらに、ピッチシフト(カラオケの転調)はタイムストレッチ+リサンプリングで実現できます。 www.wizard-notes.com このように、音楽や歌声のタイムストレッチ(時間伸縮)は実用的で非常に重要です。 タイムストレッチをゼロからプログラミングするのはなかなか大変ですが、 Pythonの音楽分析モジュール LibR…

  • LibROSA:音高分析のための定Q変換(CQT)と、逆定Q変換の性能評価

    はじめに 音信号を分析する時間周波数分析手法としてはSTFT(短時間フーリエ変換)が良く使われますが,特に音楽を対象にして音高、コード、メロディなどを分析する場合は定Q変換(CQT)という手法が便利です。 www.wizard-notes.com www.wizard-notes.com 定Q変換を自分で実装するのは結構大変ですが,Pythonでは音楽信号分析モジュール LibROSA を使うことで、さくっと定Q変換を試すことができます。 はじめに LibROSAでの定Q変換 逆定Q変換 LibROSAでの定Q変換 librosa.cqt を呼び出すことで、数行で定Q変換を実装できます。 im…

  • 定Q変換のリアルタイム向けPython実装の解説(音高・コード・メロディの分析向け)

    www.youtube.com 定Q変換は音楽信号の音高・コード・メロディ分析に相性の良い周波数分析手法です. この記事では,前回の定Q変換 (CQT: Constant-Q Transform) の 解説 の内容をPythonで実装する方法を解説します. Pythonの実装ですが,C++やJavascriptなど,様々な言語での実装の参考になるように解説したいと思います. なお、定Q変換の仕組みやパラメタについては以下の記事を参照してください。 www.wizard-notes.com ソースコードはGithubにおきました。 github.com 定Q変換の実装解説 要件定義とサブルーチン…

  • 定Q変換 (CQT: Constant-Q Transform) の 解説(音高・コード・メロディの分析向け)

    はじめに 音信号の時間周波数分析にはFFT (高速フーリエ変換) /STFT(短時間フーリエ変換)がよく使われます. しかし,FFTの性質上,音高に関わる分析をしようとすると実装や分析精度の向上に手間がかかります。 そこで,この記事では音楽信号の分析によく利用される定Q変換 (CQT: Constant-Q Transform) と呼ばれる時間周波数分析の手法の仕組みを紹介します. なお、本記事をベースにしたPython実装の解説がありますので、もしよろしければご覧ください。 www.wizard-notes.com はじめに FFT / STFTでの音高分析の問題 定Q変換のアイディア 定Q…

  • Python:信号長に近い2の累乗(2**n)のFFTフレームサイズを求める

    FFTを使う時,なるべく高速に計算するためにフレームサイズを2の累乗に設定するのが一般的ですが、入力する信号の長さが2の累乗でない時があります。 そういう時は,フレームサイズが2の累乗になるように、ゼロパディング or カットします。 その際には、信号長 N に近い2の累乗のフレームサイズを求める必要があります。 Pythonでの手っ取り早い方法としては、bin()で2進数化し、その文字列の長さを利用して信号長に近い2の累乗の指数部を求めることができます。 ・ゼロパディングの例 >>> N = 1000 >>> x = np.random.random(N) >>> bin(N) '0b111…

  • チェンバロ(ハープシコード)音源 Italian Harpsichord Bundle (REALSAMPLES) のインストール・導入方法

    AudioPlugin Deals Audio Plugin DealsでREALSAMPLES社の3種類のチェンバロ(ハープシコード)音源 Italian Harpsichord Bundle がセールで$39.95でした. 値段も魅力的ですが,何よりデモ音源が好みのチェンバロの音色だったので購入しました. せっかくなので、導入方法をメモとして残したいと思います. 注意:この音源を利用するには,Kontakt™/HAlion™/EXS24™ の有料版が必要です."light"/free版はサポートしていないことが明記されています. requirements - realsamples Sof…

arrow_drop_down

ブログリーダー」を活用して、Kureneさんをフォローしませんか?

ハンドル名
Kureneさん
ブログタイトル
Wizard Notes
フォロー
Wizard Notes

にほんブログ村 カテゴリー一覧

商用