CREPE のインストール,CREPE を用いた音声分析プログラム(音のピッチ推定)(Python,TensorFlow を使用)(Windows 上)
【要約】
Windows環境でCREPEを用いて音声ファイルのピッチ推定を行うプログラムの説明をしています。まず、前準備としてGit、7-Zip、Python、Build Tools for Visual Studio 2022、NVIDIA関連ツール、TensorFlowのインストール方法を示しています。次に、CREPEのインストールとテスト実行の手順を説明しています。そして、Pythonプログラムのコードを提示しています。このプログラムは、選択された音声ファイルを CREPE で処理し、結果を出力フォルダに保存します。プログラムでは、音声ファイルのサンプリングレート、長さ、周波数、アクティベーションなどの情報を表示し、周波数とアクティベーションのグラフも描画します。最後に、プログラムの実行結果例を示しています。
CREPE
CREPE(Convolutional Representation for Pitch Estimation)は、深層学習を用いたモノフォニック音声のピッチ推定手法です。以下に、CREPEの特徴と性能評価について説明します。
特徴
- CREPEは、時間領域の音声波形を直接入力とし、畳み込みニューラルネットワーク(CNN)を用いて360次元のピッチアクティベーションを出力します。
- ピッチアクティベーションは、6オクターブの音域を20セント間隔で分割した360個の音高候補に対する活性度を表す数値ベクトルです。
性能評価
- RWC-synthとMDB-stem-synthの2つのデータセットを用いて、従来手法であるpYINやSWIPEとの比較が行われました。
- 評価指標として、Raw Pitch Accuracy(RPA)とRaw Chroma Accuracy(RCA)が用いられました。
- ピッチ認識の閾値を変化させた場合や、ホワイトノイズ等を加えた場合のロバスト性も評価されました。
- 実験の結果、CREPEは多様な音色やノイズに対して従来手法よりもロバスト性に優れ、高精度なピッチ推定が可能であることが示されました。
応用分野
- CREPEは、旋律抽出やイントネーション分析など、ピッチ情報を必要とする様々な音声処理タスクに応用可能です。
- 音楽情報処理における音高推定や、言語学における韻律分析などにも活用できます。
文献
CREPE: A Convolutional Representation for Pitch Estimation Jong Wook Kim, Justin Salamon, Peter Li, Juan Pablo Bello. Proceedings of the IEEE International Conference on Acoustics, Speech, and Signal Processing (ICASSP), also arXiv:1802.06182v1 [eess.AS], 2018.
https://arxiv.org/pdf/1802.06182v1
CREPE の GitHub の公式ページ: https://github.com/marl/crepe
前準備
Visual Studio 2022 Build Toolsとランタイムのインストール
管理者権限でコマンドプロンプトを起動(手順:Windowsキーまたはスタートメニュー > cmd と入力 > 右クリック > 「管理者として実行」)し、以下を実行する。管理者権限は、wingetの--scope machineオプションでシステム全体にソフトウェアをインストールするために必要である。
REM Visual Studio 2022 Build Toolsとランタイムのインストール
winget install --scope machine Microsoft.VisualStudio.2022.BuildTools Microsoft.VCRedist.2015+.x64
set VS_INSTALLER="C:\Program Files (x86)\Microsoft Visual Studio\Installer\setup.exe"
set VS_PATH="C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools"
REM C++開発ワークロードのインストール
%VS_INSTALLER% modify --installPath %VS_PATH% ^
--add Microsoft.VisualStudio.Workload.VCTools ^
--add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 ^
--add Microsoft.VisualStudio.Component.Windows11SDK.22621 ^
--includeRecommended --quiet --norestart
Python 3.12 のインストール
インストール済みの場合は実行不要。
管理者権限でコマンドプロンプトを起動(手順:Windowsキーまたはスタートメニュー > cmd と入力 > 右クリック > 「管理者として実行」)し、以下を実行する。管理者権限は、wingetの--scope machineオプションでシステム全体にソフトウェアをインストールするために必要である。
REM Python をシステム領域にインストール
winget install --scope machine --id Python.Python.3.12 -e --silent
REM Python のパス設定
set "PYTHON_PATH=C:\Program Files\Python312"
set "PYTHON_SCRIPTS_PATH=C:\Program Files\Python312\Scripts"
echo "%PATH%" | find /i "%PYTHON_PATH%" >nul
if errorlevel 1 setx PATH "%PATH%;%PYTHON_PATH%" /M >nul
echo "%PATH%" | find /i "%PYTHON_SCRIPTS_PATH%" >nul
if errorlevel 1 setx PATH "%PATH%;%PYTHON_SCRIPTS_PATH%" /M >nul
【関連する外部ページ】
Python の公式ページ: https://www.python.org/
AI エディタ Windsurf のインストール
Pythonプログラムの編集・実行には、AI エディタの利用を推奨する。ここでは,Windsurfのインストールを説明する。
管理者権限でコマンドプロンプトを起動(手順:Windowsキーまたはスタートメニュー > cmd と入力 > 右クリック > 「管理者として実行」)し、以下を実行して、Windsurfをシステム全体にインストールする。管理者権限は、wingetの--scope machineオプションでシステム全体にソフトウェアをインストールするために必要となる。
winget install --scope machine Codeium.Windsurf -e --silent
【関連する外部ページ】
Windsurf の公式ページ: https://windsurf.com/
Gitのインストール
管理者権限でコマンドプロンプトを起動(手順:Windowsキーまたはスタートメニュー > cmd と入力 > 右クリック > 「管理者として実行」)し、以下を実行する。管理者権限は、wingetの--scope machineオプションでシステム全体にソフトウェアをインストールするために必要となる。
REM Git をシステム領域にインストール
winget install --scope machine --id Git.Git -e --silent
REM Git のパス設定
set "GIT_PATH=C:\Program Files\Git\cmd"
if exist "%GIT_PATH%" (
echo "%PATH%" | find /i "%GIT_PATH%" >nul
if errorlevel 1 setx PATH "%PATH%;%GIT_PATH%" /M >nul
)
7-Zip のインストール
管理者権限でコマンドプロンプトを起動(手順:Windowsキーまたはスタートメニュー > cmd と入力 > 右クリック > 「管理者として実行」)し、以下を実行する。管理者権限は、wingetの--scope machineオプションでシステム全体にソフトウェアをインストールするために必要となる。
REM 7-Zip をシステム領域にインストール
winget install --scope machine --id 7zip.7zip -e --silent
REM 7-Zip のパス設定
set "SEVENZIP_PATH=C:\Program Files\7-Zip"
if exist "%SEVENZIP_PATH%" (
echo "%PATH%" | find /i "%SEVENZIP_PATH%" >nul
if errorlevel 1 setx PATH "%PATH%;%SEVENZIP_PATH%" /M >nul
)
Visual Studio 2022 Build Toolsとランタイムのインストール
管理者権限でコマンドプロンプトを起動(手順:Windowsキーまたはスタートメニュー > cmd と入力 > 右クリック > 「管理者として実行」)し、以下を実行する。管理者権限は、wingetの--scope machineオプションでシステム全体にソフトウェアをインストールするために必要である。
REM Visual Studio 2022 Build Toolsとランタイムのインストール
winget install --scope machine Microsoft.VisualStudio.2022.BuildTools Microsoft.VCRedist.2015+.x64
set VS_INSTALLER="C:\Program Files (x86)\Microsoft Visual Studio\Installer\setup.exe"
set VS_PATH="C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools"
REM C++開発ワークロードのインストール
%VS_INSTALLER% modify --installPath %VS_PATH% ^
--add Microsoft.VisualStudio.Workload.VCTools ^
--add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 ^
--add Microsoft.VisualStudio.Component.Windows11SDK.22621 ^
--includeRecommended --quiet --norestart
NVIDIA ドライバのインストール(Windows 上)
NVIDIA ドライバ
NVIDIA ドライバは,NVIDIA製GPUを動作させるための重要なソフトウェアである.このドライバをインストールすることにより,GPUの性能を引き出すことができ,グラフィックス関連のアプリ,AI関連のアプリの高速化が期待できる.
ドライバはNVIDIA公式サイトである https://www.nvidia.co.jp/Download/index.aspx?lang=jp からダウンロードできる.このサイトからダウンロードするときには,グラフィックスカードとオペレーティングシステムを選択する. なお,NVIDIA GeForce Experiance を用いてインストールすることも可能である.
【サイト内の関連ページ】
- NVIDIA グラフィックス・ボードの確認
Windows で,NVIDIA グラフィックス・ボードの種類を調べたいときは, 次のコマンドを実行することにより調べることができる.
wmic path win32_VideoController get name
- NVIDIA ドライバのダウンロード
NVIDIA ドライバは,以下の NVIDIA 公式サイトからダウンロードできる.
- ダウンロードの際には,使用しているグラフィックス・ボードの型番とオペレーティングシステムを選択する.
NVIDIA CUDA ツールキット 11.8 のインストール(Windows 上)
NVIDIA CUDA ツールキットのインストール時の注意点
NVIDIAのGPUを使用して並列計算を行うためのツールセット
主な機能: GPU を利用した並列処理,GPU のメモリ管理,C++をベースとした拡張言語とAPIとライブラリ
【NVIDIA CUDA ツールキットの動作に必要なもの】
- CUDA対応のNVIDIA GPUが必要.
そのために,NVIDIA グラフィックス・ボードを確認する. Windows で,NVIDIA グラフィックス・ボードの種類を調べたいときは, 次のコマンドを実行することにより調べることができる.
wmic path win32_VideoController get name
- NVIDIA ドライバのダウンロードとインストール
NVIDIA ドライバは,以下の NVIDIA 公式サイトからダウンロードできる. ダウンロードの際には,使用しているグラフィックス・ボードの型番とオペレーティングシステムを選択する.
- Windows では,インストール前に,Build Tools for Visual Studio もしくは Visual Studio をインストールしておくことが必要である.
【Windows でインストールするときの注意点】
- Windows では, NVIDIA CUDA ツールキットのインストール中は,なるべく他のウインドウはすべて閉じておくこと.
- NVIDIA CUDA ツールキットのインストールが終わったら,ユーザ環境変数 TEMP の設定を行う.
Windows のユーザ名が日本語のとき,nvcc がうまく動作しないエラーを回避するためである.
ユーザ環境変数 TEMP に「C:\TEMP」を設定するために, コマンドプロンプトで,次のコマンドを実行する.
mkdir C:\TEMP powershell -command "[System.Environment]::SetEnvironmentVariable(\"TEMP\", \"C:\TEMP\", \"User\")"
【関連する外部ページ】
- NVIDIA CUDA ツールキットのアーカイブの公式ページ: https://developer.nvidia.com/cuda-toolkit-archive
- NVIDIA CUDA ツールキット の公式のドキュメント: https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html
- NVIDIA CUDA ツールキットのインストールに関する,NVIDIA CUDA クイックスタートガイドの公式ページ: https://docs.nvidia.com/cuda/cuda-quick-start-guide/index.html
【関連項目】 NVIDIA CUDA ツールキット, NVIDIA CUDA ツールキット 12.6 のインストール(Windows 上), NVIDIA CUDA ツールキット 11.8 のインストール(Windows 上)
- Windows では,NVIDIA CUDA ツールキットのインストール中は,なるべく他のウインドウはすべて閉じておくこと.
- Windows で,管理者権限でコマンドプロンプトを起動(手順:Windowsキーまたはスタートメニュー >
cmd
と入力 > 右クリック > 「管理者として実行」)。 - 次のコマンドを実行
次のコマンドは,NVIDIA GeForce Experience,NVIDIA CUDA ツールキット 11.8 をインストールするものである.
wmic path win32_VideoController get name winget install --scope machine Nvidia.CUDA --version 11.8 powershell -command "[System.Environment]::SetEnvironmentVariable(\"CUDA_HOME\", \"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\", \"Machine\")"
- NVIDIA CUDA ツールキットのインストールが終わったら,ユーザ環境変数 TEMP の設定を行う.
Windows のユーザ名が日本語のとき,nvcc がうまく動作しないエラーを回避するためである.
ユーザ環境変数 TEMP に「C:\TEMP」を設定するために, コマンドプロンプトで,次のコマンドを実行する.
mkdir C:\TEMP powershell -command "[System.Environment]::SetEnvironmentVariable(\"TEMP\", \"C:\TEMP\", \"User\")"
NVIDIA cuDNN 8.9.7 のインストール(Windows 上)
NVIDIA cuDNN
NVIDIA cuDNN は,NVIDIA CUDA ツールキット上で動作する、高性能なディープラーニング用ライブラリです.畳み込みニューラルネットワーク (CNN) やリカレントニューラルネットワーク (RNN) など,さまざまなディープラーニングモデルのトレーニングと推論を高速化します.
【cuDNN利用時の注意点: zlibwapi.dll エラー】
Windows環境でcuDNNを利用するアプリケーションを実行した際に、「Could not locate zlibwapi.dll. Please make sure it is in your library path!」というエラーが表示されることがあります。これは、cuDNNの一部の機能が圧縮ライブラリである zlib
に依存しているためです。このエラーが発生した場合は、後述する手順で ZLIB DLL をインストールする必要があります。
【関連する外部ページ】
- NVIDIA cuDNN の公式ページ(ダウンロードにはDeveloper Programへの登録が必要): https://developer.nvidia.com/cudnn
NVIDIA cuDNN のインストール(Windows 上)の概要
- NVIDIA Developer Program メンバーシップへの加入: cuDNNのダウンロードには無料のメンバーシップ登録が必要です。
NVIDIA Developer Program の公式ページ: https://developer.nvidia.com/developer-program
- 互換バージョンの選択とダウンロード: インストール済みのCUDAツールキットのバージョン (今回は11.x) に適合するcuDNNのバージョン (今回はv8.9.7) を選択し、Windows用のzipファイルをダウンロードします。
- ファイルの展開と配置: ダウンロードしたzipファイルを展開(解凍)し、中のファイル(
bin
,include
,lib
フォルダ内)を、CUDAツールキットのインストールディレクトリにコピーします。 - (オプション) 環境変数の設定: 必要に応じてシステム環境変数
CUDNN_PATH
を設定します。 - (必要に応じて) ZLIB DLL のインストール:
zlibwapi.dll
が見つからないエラーが発生する場合にインストールします。 - 動作確認: cuDNNライブラリ (
cudnn64_*.dll
) にパスが通っているか確認します。
zlib のインストール(Windows 上)
- Windows で,管理者権限でコマンドプロンプトを起動(手順:Windowsキーまたはスタートメニュー >
cmd
と入力 > 右クリック > 「管理者として実行」)。 - 次のコマンドを実行
次のコマンドは,zlibをインストールし,パスを通すものである.
cd /d c:%HOMEPATH% rmdir /s /q zlib git clone https://github.com/madler/zlib cd zlib del CMakeCache.txt rmdir /s /q CMakeFiles\ cmake . -G "Visual Studio 17 2022" -A x64 -T host=x64 -DCMAKE_INSTALL_PREFIX=c:/zlib cmake --build . --config RELEASE --target INSTALL powershell -command "$oldpath = [System.Environment]::GetEnvironmentVariable(\"Path\", \"Machine\"); $oldpath += \";c:\zlib\bin\"; [System.Environment]::SetEnvironmentVariable(\"Path\", $oldpath, \"Machine\")" powershell -command "[System.Environment]::SetEnvironmentVariable(\"ZLIB_HOME\", \"C:\zlib\", \"Machine\")"
【関連する外部ページ】
- zlib の公式ページ: https://www.zlib.net/
【関連項目】 zlib
NVIDIA cuDNN 8.9.7 のインストール(Windows 上)
- NVIDIA cuDNN のウェブページを開く
- ダウンロードしたいので,cuDNNのところにある「Download cuDNN」をクリック.
- cuDNN Downloads のページで「Archive of Previous Releases」をクリック
- 「cuDNN 8.x - 1.x」をクリック
- ダウンロードしたいバージョンを選ぶ
ここでは「NVIDIA cuDNN v8.9.7 for CUDA 11.x」を選んでいる.
このとき,画面の「for CUDA ...」のところを確認し,使用するNVIDIA CUDA のバージョンに合うものを選ぶこと.
- Windows にインストールするので Windows 版を選ぶ
- NVIDIA Developer Program メンバーシップに入る
NVIDIA cuDNN のダウンロードのため.
「Join now」をクリック.その後,画面の指示に従う. 利用者本人が,電子メールアドレス,表示名,パスワード,生年月日を登録.利用条件等に合意.
- ログインする
- 調査の画面が出たときは,調査に応じる
- ライセンス条項の確認
- ダウンロードが始まる.
- ダウンロードした .zip ファイルを展開(解凍)する.
その中のサブディレクトリを確認しておく.
- NVIDIA CUDA ツールキットをインストールしたディレクトリを確認する.「C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8」のようになっている.
- 確認したら,
さきほど展開してできたすべてのファイルとディレクトリを,NVIDIA CUDA ツールキットをインストールしたディレクトリにコピーする
- パスが通っていることを確認.
次の操作により,cudnn64_8.dll にパスが通っていることを確認する.
Windows のコマンドプロンプトを開き,次のコマンドを実行する.エラーメッセージが出ないことを確認.
where cudnn64_8.dll
- Windows の システム環境変数 CUDNN_PATH の設定を行う.
Windows では,
コマンドプロンプトを管理者として開き,
次のコマンドを実行することにより,
システム環境変数 CUDNN_PATH の設定を行うことができる.
コマンドプロンプトを管理者として実行: 別ページ »で説明
powershell -command "[System.Environment]::SetEnvironmentVariable(\"CUDNN_PATH\", \"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\", \"Machine\")"
TensorFlow 2.10.1 のインストール(Windows 上)
- Windows で,管理者権限でコマンドプロンプトを起動(手順:Windowsキーまたはスタートメニュー >
cmd
と入力 > 右クリック > 「管理者として実行」)。 - TensorFlow 2.10.1 のインストール(Windows 上)
次のコマンドを実行することにより,TensorFlow 2.10.1 および関連パッケージ(tf_slim,tensorflow_datasets,tensorflow-hub,Keras,keras-tuner,keras-visualizer)がインストール(インストール済みのときは最新版に更新)される. そして,Pythonパッケージ(Pillow, pydot, matplotlib, seaborn, pandas, scipy, scikit-learn, scikit-learn-intelex, opencv-python, opencv-contrib-python)がインストール(インストール済みのときは最新版に更新)される.
python -m pip uninstall -y protobuf tensorflow tensorflow-cpu tensorflow-gpu tensorflow-intel tensorflow-text tensorflow-estimator tf-models-official tf_slim tensorflow_datasets tensorflow-hub keras keras-tuner keras-visualizer python -m pip install -U protobuf tensorflow==2.10.1 tf_slim tensorflow_datasets==4.8.3 tensorflow-hub tf-keras keras keras_cv keras-tuner keras-visualizer python -m pip install git+https://github.com/tensorflow/docs python -m pip install git+https://github.com/tensorflow/examples.git python -m pip install git+https://www.github.com/keras-team/keras-contrib.git python -m pip install -U pillow pydot matplotlib seaborn pandas scipy scikit-learn scikit-learn-intelex opencv-python opencv-contrib-python
crepe のインストールとテスト実行(Windows 上)
- Windows で,管理者権限でコマンドプロンプトを起動(手順:Windowsキーまたはスタートメニュー >
cmd
と入力 > 右クリック > 「管理者として実行」)。 - crepe のインストール
* 「 python -m pip install ...」は,Python パッケージをインストールするためのコマンド.
cd /d c:%HOMEPATH% rmdir /s /q crepe git clone https://github.com/marl/crepe cd crepe python setup.py install
- 動作確認のため,ピッチ推定を行ってみる
crepe --model-capacity medium --save-activation tests\sweep.wav more tests\sweep.f0.csv
- 「crepe -h」 を実行することにより,説明が表示される.
CREPE のプログラム
プログラム1つめ
- Windows で,コマンドプロンプトを実行
- エディタを起動
cd /d c:%HOMEPATH% notepad pycrepe.py
- エディタで,次のプログラムを保存
このPythonプログラムは,ユーザーが選択した音声ファイルを解析し,ピッチ情報を抽出する.結果は出力フォルダに保存され,周波数とアクティベーションの要約統計とグラフが表示される.音声処理にはオープンソースのcrepeライブラリを使用している.
【説明】
このプログラムは以下の主な機能を持っている.
- ユーザーが音声ファイル(WAV形式)を選択できる.
- 音声ファイルを処理し,ピッチ情報(時間,周波数,信頼度,アクティベーション)を抽出する.
- 抽出された情報を,指定された出力フォルダ内のテキストファイルに保存する.
- 周波数とアクティベーションの平均と標準偏差を計算し,画面に表示する.
- 周波数とアクティベーションのグラフを ASCII 文字で描画し,画面に表示する.
【使用法】
- プログラムを実行すると,「音声ファイルを選択してください.複数選択できます.」というメッセージが表示される.このとき,複数のファイルを選択することもできる.
- 「出力フォルダを選択してください.」というメッセージが表示される.結果を保存する出力フォルダを選択できる.
- 進捗状況がプログレスバーで表示される.
- 音声ファイル名,出力ファイルのパス,サンプリングレート,音声の長さ(秒),周波数の平均と標準偏差,アクティベーションの平均と標準偏差,周波数のグラフ(ASCII文字で描画)が表示される.
- 出力フォルダには,各音声ファイルの結果がテキストファイルで保存される.
import os import tkinter as tk from tkinter import filedialog import crepe from scipy.io import wavfile from tqdm import tqdm # パラメータの設定 CONFIG = { "step_size": 10, # ピッチ推定のステップサイズ(ミリ秒) } def select_files(file_type, file_extension): """ファイルを選択する関数""" try: if 'google.colab' in str(get_ipython()): from google.colab import files uploaded = files.upload() file_paths = list(uploaded.keys()) else: root = tk.Tk() root.withdraw() file_paths = filedialog.askopenfilenames(filetypes=[(file_type, file_extension)]) except NameError: root = tk.Tk() root.withdraw() file_paths = filedialog.askopenfilenames(filetypes=[(file_type, file_extension)]) return file_paths def select_output_folder(): """出力フォルダを選択する関数""" root = tk.Tk() root.withdraw() output_folder = filedialog.askdirectory(title="Select output folder") return output_folder def process_audio_file(audio_path, output_folder): """音声ファイルを処理する関数""" try: sr, audio = wavfile.read(audio_path) time, frequency, confidence, activation = crepe.predict( audio, sr, viterbi=True, step_size=CONFIG["step_size"] ) audio_name = os.path.splitext(os.path.basename(audio_path))[0] output_file = os.path.join(output_folder, f"{audio_name}_result.txt") with open(output_file, "w") as file: file.write(f"Processing audio file: {audio_path}\n") file.write(f"Time: {time}\n") file.write(f"Frequency: {frequency}\n") file.write(f"Confidence: {confidence}\n") file.write(f"Activation: {activation}\n") audio_length = len(audio) / sr return audio_name, output_file, frequency, activation, sr, audio_length except Exception as e: print(f"Error processing audio file: {audio_path}") print(f"Error message: {str(e)}") return None, None, None, None, None, None def plot_line_graph(data, width=50, height=20, min_value=None, max_value=None): if min_value is None: min_value = data.min() if max_value is None: max_value = data.max() if max_value - min_value == 0: print("Cannot plot a graph with constant values.") return normalized_data = [(val - min_value) / (max_value - min_value) for val in data] graph = [" "] * (width * height) for i in range(len(normalized_data)): x = i * (width - 1) // (len(normalized_data) - 1) y = int((1 - normalized_data[i]) * (height - 1)) graph[y * width + x] = "*" for y in range(height): print("".join(graph[y * width : (y + 1) * width])) def main(): """メイン関数""" print('音声ファイルを選択してください。複数選択できます。') audio_paths = select_files("Audio Files", "*.wav") if not audio_paths: print("No audio files selected. Exiting.") return print('出力フォルダを選択してください。') output_folder = select_output_folder() if not output_folder: print("No output folder selected. Exiting.") return print("Processing audio files...") results = [] for audio_path in tqdm(audio_paths, desc="Progress"): result = process_audio_file(audio_path, output_folder) results.append(result) print("Processing completed.") print("\nResults:") for audio_name, output_file, frequency, activation, sr, audio_length in results: if audio_name is not None: print(f"Audio file: {audio_name}") print(f"Output file: {output_file}") print(f"Sampling rate: {sr} Hz") print(f"Audio length: {audio_length:.2f} seconds") print(f"Frequency summary: Mean={frequency.mean():.2f}, Std={frequency.std():.2f}") print(f"Activation summary: Mean={activation.mean():.2f}, Std={activation.std():.2f}") print("Frequency graph:") plot_line_graph(frequency, width=50, height=20) print("---") if __name__ == "__main__": main()
- Python プログラムの実行
Python プログラムの実行
- Windows では python (Python ランチャーは py)
- Ubuntu では python3
【サイト内の関連ページ】 Python のまとめ: 別ページ »
プログラムを pycrepe.pyのようなファイル名で保存したので, 「python pycrepe.py」のようなコマンドで行う.
python pycrepe.py
- ファイルダイアログが開くので,音声ファイルを選ぶ.
このとき,音声ファイルを複数選ぶことができる.
- 次に出力結果を保存するフォルダを選ぶ.
- 結果の確認
プログラム2つめ
- Windows で,コマンドプロンプトを実行
- エディタを起動
cd /d c:%HOMEPATH% notepad pycrepeplt.py
- エディタで,次のプログラムを保存
このPythonプログラムは,ユーザーが選択した音声ファイルを解析し,ピッチ情報を抽出する.結果は出力フォルダに保存され,周波数とアクティベーションの要約統計が表示される.さらに,ピッチの散布図とアクティベーションのカラーマップが生成される.音声処理にはオープンソースのcrepeライブラリを使用している.
【説明】
このプログラムは以下の主な機能を持っている.
- ユーザーが音声ファイル(WAV形式)を選択できる.
- 音声ファイルを処理し,ピッチ情報(時間,周波数,信頼度,アクティベーション)を抽出する.
- 抽出された情報を,指定された出力フォルダ内のテキストファイルに保存する.
- 周波数とアクティベーションの平均と標準偏差を計算し,画面に表示する.
- ピッチの散布図とアクティベーションのカラーマップを生成し,出力フォルダに保存する.
【使用法】
- プログラムを実行すると,「音声ファイルを選択してください.複数選択できます.」というメッセージが表示される.このとき,複数のファイルを選択することもできる.
- 「出力フォルダを選択してください.」というメッセージが表示される.結果を保存する出力フォルダを選択できる.
- 進捗状況がプログレスバーで表示される.
- 音声ファイル名,出力ファイルのパス,サンプリングレート,音声の長さ(秒),周波数の平均と標準偏差,アクティベーションの平均と標準偏差が表示される.
- 出力フォルダには,各音声ファイルの結果がテキストファイルで保存される.
- 出力フォルダには,各音声ファイルのピッチの散布図とアクティベーションのカラーマップが画像ファイルで保存される.
import os import tkinter as tk from tkinter import filedialog import crepe import numpy as np import matplotlib.pyplot as plt from scipy.io import wavfile from tqdm import tqdm # パラメータの設定 CONFIG = { "step_size": 10, # ピッチ推定のステップサイズ(ミリ秒) } def select_files(file_type, file_extension): """ファイルを選択する関数""" try: if 'google.colab' in str(get_ipython()): from google.colab import files uploaded = files.upload() file_paths = list(uploaded.keys()) else: root = tk.Tk() root.withdraw() file_paths = filedialog.askopenfilenames(filetypes=[(file_type, file_extension)]) except NameError: root = tk.Tk() root.withdraw() file_paths = filedialog.askopenfilenames(filetypes=[(file_type, file_extension)]) return file_paths def select_output_folder(): """出力フォルダを選択する関数""" root = tk.Tk() root.withdraw() output_folder = filedialog.askdirectory(title="Select output folder") return output_folder def process_audio_file(audio_path, output_folder): """音声ファイルを処理する関数""" try: sr, audio = wavfile.read(audio_path) time, frequency, confidence, activation = crepe.predict( audio, sr, viterbi=True, step_size=CONFIG["step_size"] ) audio_name = os.path.splitext(os.path.basename(audio_path))[0] output_file = os.path.join(output_folder, f"{audio_name}_result.txt") with open(output_file, "w") as file: file.write(f"Processing audio file: {audio_path}\n") file.write(f"Time: {time}\n") file.write(f"Frequency: {frequency}\n") file.write(f"Confidence: {confidence}\n") file.write(f"Activation: {activation}\n") audio_length = len(audio) / sr return audio_name, output_file, time, frequency, activation, sr, audio_length except Exception as e: print(f"Error processing audio file: {audio_path}") print(f"Error message: {str(e)}") return None, None, None, None, None, None, None def visualize_pitch(time, frequency, output_folder, audio_name): """ピッチを散布図でビジュアライズする関数""" plt.figure(figsize=(10, 4)) plt.scatter(time, frequency) plt.xlabel("Time (s)") plt.ylabel("Frequency (Hz)") plt.title(f"Pitch Estimation - {audio_name}") plt.grid(True) plt.tight_layout() plt.savefig(os.path.join(output_folder, f"{audio_name}_pitch.png")) plt.close() def visualize_activation(activation, output_folder, audio_name): """アクティベーションをカラーマップでビジュアライズする関数""" plt.figure(figsize=(10, 4)) plt.imshow(activation.T, aspect='auto', origin='lower', cmap='jet') plt.xlabel("Time") plt.ylabel("Pitch") plt.title(f"Activation - {audio_name}") plt.colorbar(label="Activation") plt.tight_layout() plt.savefig(os.path.join(output_folder, f"{audio_name}_activation.png")) plt.close() def main(): """メイン関数""" print('音声ファイルを選択してください。複数選択できます。') audio_paths = select_files("Audio Files", "*.wav") if not audio_paths: print("No audio files selected. Exiting.") return print('出力フォルダを選択してください。') output_folder = select_output_folder() if not output_folder: print("No output folder selected. Exiting.") return print("Processing audio files...") results = [] for audio_path in tqdm(audio_paths, desc="Progress"): result = process_audio_file(audio_path, output_folder) results.append(result) print("Processing completed.") print("\nResults:") for audio_name, output_file, time, frequency, activation, sr, audio_length in results: if audio_name is not None: print(f"Audio file: {audio_name}") print(f"Output file: {output_file}") print(f"Sampling rate: {sr} Hz") print(f"Audio length: {audio_length:.2f} seconds") print(f"Frequency summary: Mean={frequency.mean():.2f}, Std={frequency.std():.2f}") print(f"Activation summary: Mean={activation.mean():.2f}, Std={activation.std():.2f}") visualize_pitch(time, frequency, output_folder, audio_name) visualize_activation(activation, output_folder, audio_name) print("---") if __name__ == "__main__": main()
- Python プログラムの実行
Python プログラムの実行
- Windows では python (Python ランチャーは py)
- Ubuntu では python3
【サイト内の関連ページ】 Python のまとめ: 別ページ »
プログラムを pycrepeplt.pyのようなファイル名で保存したので, 「python pycrepeplt.py」のようなコマンドで行う.
python pycrepeplt.py
- ファイルダイアログが開くので,音声ファイルを選ぶ.
このとき,音声ファイルを複数選ぶことができる.
- 次に出力結果を保存するフォルダを選ぶ.
- 結果の確認
指定した「出力結果を保存するフォルダ」に png 形式の画像ファイルができるので確認.