Python
概要 Python で音声や音楽をリアルタイム再生・録音するライブラリとしてはPyAudioが良く知られています。 今回は、PyAudio を使って再生と録音を同時に行う方法を紹介します。 このサンプルコードを使うことで、ディレイやリバーブ、声質変換といった音声加…
事始め Perfume のベストアルバム Perfume The Best “P Cubed” を購入しました。 これまで(~2018年)の楽曲の中から全50曲 + 新曲2曲が収録されています。 全52曲。なかなかのデータ数です。 そういえば、最近のPerfumeの楽曲ってFuture BassやDub系が増え…
やりたいこと 時系列信号・データを扱っていると、その信号に対する各種イベント・ラベル(例:どんな音が鳴っているか)を時間とともに表示したいと思うことが多々あります。 そこで、Pythonの matplotlib で時間波形に対するイベント(ラベル)のタイムラ…
やりたいこと 論文など、白黒印刷が想定される紙媒体や、色の見え方の個人差に考慮したメディアでの棒グラフの作り方として、ハッチパターンを使ったものがよく使われています。 今回は、matplotlib でハッチパターンの棒グラフを描画してみます。 解決方法 …
問題点 matplotlib の散布図などのプロットの際に、各点にラベルを付けてプロットしたい場合、下の図のようにラベルが重なってしまうため、ラベル付きプロットを諦めることが多々ありました。 図1: 散布図 (Before) 解決方法 ラベルの配置を制御する方法を探…
はじめに 音楽の分析では、メロディー、ハーモニー、リズムの3つ要素から特徴を捉えるのが重要です。 特にハーモニーに関しては、音楽理論による体系化(例:コード、コード進行)が出来ています。そのため、 分析した結果の意味付けがしやすいので、計算機…
やりたいこと シンプルで綺麗なグラフは、得なことが多いです。 見た人の思考や感性に訴えかけ、新たな発見や次のステップへの道筋を示してくれます。または、相手によってはグラフ自体に価値がある場面もあります。 しかし、そんなグラフを人手で作りこむの…
Mutagen チートシート オーディオデータのタグ・メタデータ抽出に便利なPythonモジュール Mutagen。 この記事では、よく使う3つのコーデックでのメタデータ抽出でよく使いそうな、 mutagen オブジェクトのキーおよびインスタンス変数をまとめました。 https…
はじめに 音楽分析を行う時には、音響信号だけでなく、大量の音源からのメタデータの抽出・編集・読み込み・書き込みが必要となることがあります。 手動でメタデータを管理する場合、 Mp3tag のようなソフトウェアを使うのが楽ですが、大量の音源のメタデー…
やりたいこと class Data(): def __init__(self, a, b, c): self.a = a self.b = b self.c = c data = Data() Python上でデータをいじることになると、オブジェクトフィールド(クラス変数/インスタンス変数)から辞書型にパパっと変換したいと思うことが多…
やりたいこと python のmatplotlib を用いて時系列データをプロットするとき、時系列のラベルが大量にあるせいで、 xticks, yticks で設定した軸ラベルが重なってしまうことがあります。plt.xticks の rotation オプションでラベルを回転させれば多少マシに…
はじめに 楽曲分析では、メロディー、ハーモニー、リズムの3大要素から特徴を捉えるのが大事です。 ハーモニーに関しては、音楽理論による体系化(コード、コード進行など)が出来ていることもあり、計算機による分析も他の要素よりも普及しています。 一方…
やりたいこと numpyの1次元配列 x の内、v_min 以上 v_max以下の要素だけを抽出した1次元配列 y と、対応するインデックスの1次元配列 indices を得たいとします。 >>> x array([0.20204346, 0.71742434, 0.05195665, 0.50794105, 0.08809835, 0.80818671, 0…
はじめに この記事では、Onset 検出や局所/大域のテンポ分析などリズム分析においてよく使われる、Novelty Curve についてPythonのコードとともに紹介します。実装と理解の助けになれば幸いです。 はじめに Novelty Curve/Function (Onset_envelope) 実装と…
PySoundFile vs audioread ? LibROSAを最新版 (0.7.1) に更新したら、LibROSAの音楽信号の読込を担う load()のバックエンドが、audioreadからPySoundFileに代わったとのこと。 ただし、LibROSA 0.7.1では、PySoundFileがインストールされていない場合は代わ…
AudioLabs @ FAU の、音楽信号処理の権威、Meinard Müller 先生が、ご自身の著書 "Fundamentals of Music Processing (FMP)."に沿った教材として、Jupyter notebooks で音楽信号処理の基礎を学べるフレームワーク:FMP Notebooks を公開しています。 音楽信…
調波打楽器音分離とは? 一般的な楽曲では、様々な楽器音が含まれています。 そのため、元の楽曲信号から直接、音楽的な情報(例:コード進行)を分析するのは 計算機ではなかなか難しいです*1。 そこで、分析の前処理として、 打楽器の音と非打楽器(調波楽…
はじめに この記事では、Python向けの音楽信号分析モジュールである LibROSAで 実装されているBPMの自動算出手法について、Pythonのコードをベースに解説します。 BPM自動算出の概要・設計の方針については、以下の記事をご参考ください。 www.wizard-notes.…
はじめに 音楽分析では,楽曲のテンポを表す BPM (Beats Per Minute) は重要な情報です。 例えば、音楽ジャンルごとに典型的なBPM/テンポがあるので、BPM/テンポはその楽曲がどんな音楽ジャンルに属するかを知る手がかりとなります。 一般的ないくつかのジ…
スクリーンショット 背景 実装戦略・参考ページ サーバへの複数オーディオファイルのアップロード(ドラッグアンドドロップ) サーバ側でのファイルアップロード処理・ファイル保存 クライアント側で、ローカルにあるオーディオファイルを再生 実装 ディレク…
概要 ディレクトリ構成 ソースコード views.py ポイント1:index.htmlの配置とディレクトリ構成 ポイント2:サーバから送るファイルの配置 run.py(一部掲載) index.html デモ 概要 前回ご紹介した、ブラウザ上でサーバ上の音源を再生するFlask実装を、Bl…
概要 ブラウザ上でサーバ上の音源を再生するWebアプリを、Flaskで実現するための実装例です。 ディレクトリ構成 flask_play_audio/ ├ music/ │ └ audio.mp3 ├ templates/ │ └ index.html └ app.py ソースコード app.py # -*- coding: utf-8 -*- from flask i…
問題点 表題の通り、以下のコードでエラーが発生します。 import librosa sr=44100 #オーディオ信号をNumpy形式でロードし、yに格納 y, sr = librosa.core.load(input_filepath, sr=sr, mono=False) # yをwavフォーマットで書き出し # ここで、yがステレオ信…
はじめに 実装 index.html Flaskの主要部(app.py) オーディオ信号処理モジュール 最後に はじめに NumPyやLibROSA、scikit-learnなどのPythonの素晴らしい信号処理・統計解析モジュールを利用してオーディオ信号処理アプリを作るため、学習コストが低いマ…
概要 以前から気になっていた、 Robust PCAによる歌声抽出 *1 を実装し、実際の楽曲でボーカル抽出をやってみました。 Robust PCAについて Robust PCAによる歌声抽出では、楽曲を表す行列\({\bf X}\)を低ランク行列\({\bf L}\)とスパース行列\({\bf S}\)の和…
動機 近年、深層学習による音信号処理が流行しており、様々な分野で優れた成果が報告されています。 よく利用されているネットワーク設計であるCNN(畳み込みニューラルネット)を眺めてみると、単層ではNMFD、NMF2Dと似た信号処理であることに気づきます。…
概要 開発したPythonスクリプトに対して、ユーザが処理(関数)を簡単に追加できるようにする方法として importlib が使えそうだったので、試してみました。 フォルダ構成 root/ ├ main.py └ plugins/ └ my_funcs.py 実装 ユーザが追加する関数には、あらか…
問題 Windows10において、conda update condaやconda install tensorflow で以下のようなエラーと遭遇しました Preparing transaction: done Verifying transaction: done Executing transaction: failed ERROR conda.core.link:_execute(502): An error occ…
やりたいこと 研究開発におけるパラメタの探索や、API化を見据えたPython上でのアルゴリズム開発において、 以下のような実験用パラメタの管理を考えます。 config = { "param_0": [0.01, 0.1, 1.0], "param_1": ["l1", "l2"], "param_2": [0, 10, 20, 30] }…
はじめに 今回は、動画に紐づいた動画メタ情報・統計情報の抽出、およびYouTube-dlによる楽曲解析スクリプトの入力となる複数動画のコンテンツID・メタ情報を収集する方法を紹介します。 抽出には、YouTube Data API を利用します。 はじめに YouTube Data A…