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の特徴と性能評価について説明します。

特徴

  1. CREPEは、時間領域の音声波形を直接入力とし、畳み込みニューラルネットワーク(CNN)を用いて360次元のピッチアクティベーションを出力します。
  2. ピッチアクティベーションは、6オクターブの音域を20セント間隔で分割した360個の音高候補に対する活性度を表す数値ベクトルです。

性能評価

  1. RWC-synthとMDB-stem-synthの2つのデータセットを用いて、従来手法であるpYINやSWIPEとの比較が行われました。
  2. 評価指標として、Raw Pitch Accuracy(RPA)とRaw Chroma Accuracy(RCA)が用いられました。
  3. ピッチ認識の閾値を変化させた場合や、ホワイトノイズ等を加えた場合のロバスト性も評価されました。
  4. 実験の結果、CREPEは多様な音色やノイズに対して従来手法よりもロバスト性に優れ、高精度なピッチ推定が可能であることが示されました。

応用分野

  1. CREPEは、旋律抽出やイントネーション分析など、ピッチ情報を必要とする様々な音声処理タスクに応用可能です。
  2. 音楽情報処理における音高推定や、言語学における韻律分析などにも活用できます。

文献

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

前準備

Build Tools for Visual Studio 2022 (ビルドツール for Visual Studio 2022)または Visual Studio 2022 のインストール(Windows 上)

インストールの判断Build Tools for Visual Studio は,開発ツールセットである. Visual Studio は統合開発環境であり,いくつかの種類があり,Build Tools for Visual Studioの機能を含むか連携して使用するものである.インストールは以下の基準で判断してください:

不明な点がある場合は,Visual Studio 全体をインストール を行う方が良い.

Build Tools for Visual Studio 2022 のインストール(Windows 上)

  1. Windows で,コマンドプロンプト管理者権限で起動する(例:Windowsキーを押し,「cmd」と入力し,「管理者として実行」を選択)

    次のコマンドを実行

    次のコマンドは,Build Tools for Visual Studio 2022と VC2015 再配布可能パッケージをインストールするものである.

    winget install --scope machine Microsoft.VisualStudio.2022.BuildTools 
    winget install --scope machine Microsoft.VCRedist.2015+.x64
    
  2. Build Tools for Visual Studio 2022 での C++ によるデスクトップ開発,CLI,ATL,MFC のインストール(Windows 上)
    1. Visual Studio Installer の起動

      起動方法: スタートメニューの「Visual Studio Installer」を選ぶ.

    2. Visual Studio Build Tools 2022 で「変更」を選ぶ.
    3. C++ によるデスクトップ開発」をクリック.そして,画面右側の「インストール」の詳細で「v143 ビルドツール用 C++/CLI サポート(最新)」,「ATL」,「MFC」をチェックする.その後,「変更」をクリック.

Visual Studio のインストール(Windows 上)

  1. Windows で,コマンドプロンプト管理者権限で起動する(例:Windowsキーを押し,「cmd」と入力し,「管理者として実行」を選択)

    次のコマンドを実行

    1. コマンドプロンプト管理者権限で起動する(例:Windowsキーを押し,「cmd」と入力し,「管理者として実行」を選択)
    2. インストールコマンドの実行
      winget install Microsoft.VisualStudio.2022.Community --scope machine --override "--add Microsoft.VisualStudio.Workload.NativeDesktop Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Core Microsoft.VisualStudio.Component.VC.CLI.Support Microsoft.VisualStudio.Component.CoreEditor Microsoft.VisualStudio.Component.NuGet Microsoft.VisualStudio.Component.Roslyn.Compiler Microsoft.VisualStudio.Component.TextTemplating Microsoft.VisualStudio.Component.Windows.SDK.Latest Microsoft.VisualStudio.Component.VC.Tools.x86.x64 Microsoft.VisualStudio.Component.VC.ATL Microsoft.VisualStudio.Component.VC.ATLMFC"
      winget install Microsoft.VisualStudio.2022.Community --scope machine Microsoft.VCRedist.2015+.x64
      

      インストールされるコンポーネントの説明:

      • NativeDesktop:C++によるデスクトップアプリケーション開発のためのワークロード一式
      • NativeDesktop.Core:C++デスクトップ開発に必要な基本コンポーネント群
      • VC.CLI.Support:マネージドコードとネイティブコードの統合開発を可能にするC++/CLIサポート
      • CoreEditor:コード編集,デバッグ,検索などの基本機能を提供するVisual Studioのコアエディタ
      • NuGet:.NETライブラリの依存関係を管理するパッケージ管理システム
      • Windows.SDK.Latest:Windows 向けアプリケーション開発用SDK(Software Development Kit)
      • VC.Tools.x86.x64:32ビット及び64ビット向けC++コンパイラとビルドツール
      • VC.ATL:Windowsコンポーネント開発用のActive Template Library
      • VC.ATLMFC:デスクトップアプリケーション開発用のMicrosoft Foundation Class Library

      システム要件と注意事項:

      • 管理者権限でのインストールが必須
      • 必要ディスク容量:10GB以上
      • 推奨メモリ:8GB以上のRAM
      • インストール過程でシステムの再起動が要求される可能性がある
      • 安定したインターネット接続環境が必要

      追加のコンポーネントが必要な場合は,Visual Studio Installerを使用して個別にインストールすることが可能である.

    3. インストール完了の確認
      winget list Microsoft.VisualStudio.2022.Community
      

      トラブルシューティング:

      インストール失敗時は,以下のログファイルを確認:

      %TEMP%\dd_setup_<timestamp>.log
      %TEMP%\dd_bootstrapper_<timestamp>.log
  2. Visual Studio での C++ によるデスクトップ開発,CLI のインストール(Windows 上)
    1. Visual Studio Installer の起動

      起動方法: スタートメニューの「Visual Studio Installer」を選ぶ.

    2. Visual Studio Community 2022 で「変更」を選ぶ.
    3. C++ によるデスクトップ開発」をチェック.そして,画面右側の「インストール」の詳細で「v143 ビルドツール用 C++/CLI サポート(最新)」をチェックする.その後,「インストール」をクリック.

Python 3.10,Git,7-Zip のインストール(Windows 上)

Pythonは,プログラミング言語の1つ. Gitは,分散型のバージョン管理システム. 7-Zipは,ファイル圧縮・展開(解凍)ツール.

手順

  1. Windows で,コマンドプロンプト管理者権限で起動する(例:Windowsキーを押し,「cmd」と入力し,「管理者として実行」を選択)

    次のコマンドを実行

    次のコマンドは,Python ランチャーとPython 3.10とGit7-Zipをインストールし,Git7-Zipパスを通すものである.

    次のコマンドでインストールされるGitは 「git for Windows」と呼ばれるものであり, Git,MinGW などから構成されている.

    winget install --scope machine Python.Launcher
    winget install --scope machine Python.Python.3.10
    winget install --scope machine Git.Git
    powershell -command "$oldpath = [System.Environment]::GetEnvironmentVariable(\"Path\", \"Machine\"); $oldpath += \";c:\Program Files\Git\cmd\"; [System.Environment]::SetEnvironmentVariable(\"Path\", $oldpath, \"Machine\")"
    winget install --scope machine 7zip.7zip
    powershell -command "$oldpath = [System.Environment]::GetEnvironmentVariable(\"Path\", \"Machine\"); $oldpath += \";c:\Program Files\7-Zip\"; [System.Environment]::SetEnvironmentVariable(\"Path\", $oldpath, \"Machine\")"
    

関連する外部ページ

サイト内の関連ページ

関連項目Python, Git バージョン管理システム, Git の利用, 7-Zip

Build Tools for Visual Studio 2022 (ビルドツール for Visual Studio 2022)または Visual Studio 2022 のインストール(Windows 上)

インストールの判断Build Tools for Visual Studio は,開発ツールセットである. Visual Studio は統合開発環境であり,いくつかの種類があり,Build Tools for Visual Studioの機能を含むか連携して使用するものである.インストールは以下の基準で判断してください:

不明な点がある場合は,Visual Studio 全体をインストール を行う方が良い.

Build Tools for Visual Studio 2022 のインストール(Windows 上)

  1. Windows で,コマンドプロンプト管理者権限で起動する(例:Windowsキーを押し,「cmd」と入力し,「管理者として実行」を選択)

    次のコマンドを実行

    次のコマンドは,Build Tools for Visual Studio 2022と VC2015 再配布可能パッケージをインストールするものである.

    winget install --scope machine Microsoft.VisualStudio.2022.BuildTools 
    winget install --scope machine Microsoft.VCRedist.2015+.x64
    
  2. Build Tools for Visual Studio 2022 での C++ によるデスクトップ開発,CLI,ATL,MFC のインストール(Windows 上)
    1. Visual Studio Installer の起動

      起動方法: スタートメニューの「Visual Studio Installer」を選ぶ.

    2. Visual Studio Build Tools 2022 で「変更」を選ぶ.
    3. C++ によるデスクトップ開発」をクリック.そして,画面右側の「インストール」の詳細で「v143 ビルドツール用 C++/CLI サポート(最新)」,「ATL」,「MFC」をチェックする.その後,「変更」をクリック.

Visual Studio のインストール(Windows 上)

  1. Windows で,コマンドプロンプト管理者権限で起動する(例:Windowsキーを押し,「cmd」と入力し,「管理者として実行」を選択)

    次のコマンドを実行

    1. コマンドプロンプト管理者権限で起動する(例:Windowsキーを押し,「cmd」と入力し,「管理者として実行」を選択)
    2. インストールコマンドの実行
      winget install Microsoft.VisualStudio.2022.Community --scope machine --override "--add Microsoft.VisualStudio.Workload.NativeDesktop Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Core Microsoft.VisualStudio.Component.VC.CLI.Support Microsoft.VisualStudio.Component.CoreEditor Microsoft.VisualStudio.Component.NuGet Microsoft.VisualStudio.Component.Roslyn.Compiler Microsoft.VisualStudio.Component.TextTemplating Microsoft.VisualStudio.Component.Windows.SDK.Latest Microsoft.VisualStudio.Component.VC.Tools.x86.x64 Microsoft.VisualStudio.Component.VC.ATL Microsoft.VisualStudio.Component.VC.ATLMFC"
      winget install Microsoft.VisualStudio.2022.Community --scope machine Microsoft.VCRedist.2015+.x64
      

      インストールされるコンポーネントの説明:

      • NativeDesktop:C++によるデスクトップアプリケーション開発のためのワークロード一式
      • NativeDesktop.Core:C++デスクトップ開発に必要な基本コンポーネント群
      • VC.CLI.Support:マネージドコードとネイティブコードの統合開発を可能にするC++/CLIサポート
      • CoreEditor:コード編集,デバッグ,検索などの基本機能を提供するVisual Studioのコアエディタ
      • NuGet:.NETライブラリの依存関係を管理するパッケージ管理システム
      • Windows.SDK.Latest:Windows 向けアプリケーション開発用SDK(Software Development Kit)
      • VC.Tools.x86.x64:32ビット及び64ビット向けC++コンパイラとビルドツール
      • VC.ATL:Windowsコンポーネント開発用のActive Template Library
      • VC.ATLMFC:デスクトップアプリケーション開発用のMicrosoft Foundation Class Library

      システム要件と注意事項:

      • 管理者権限でのインストールが必須
      • 必要ディスク容量:10GB以上
      • 推奨メモリ:8GB以上のRAM
      • インストール過程でシステムの再起動が要求される可能性がある
      • 安定したインターネット接続環境が必要

      追加のコンポーネントが必要な場合は,Visual Studio Installerを使用して個別にインストールすることが可能である.

    3. インストール完了の確認
      winget list Microsoft.VisualStudio.2022.Community
      

      トラブルシューティング:

      インストール失敗時は,以下のログファイルを確認:

      %TEMP%\dd_setup_<timestamp>.log
      %TEMP%\dd_bootstrapper_<timestamp>.log
  2. Visual Studio での C++ によるデスクトップ開発,CLI のインストール(Windows 上)
    1. Visual Studio Installer の起動

      起動方法: スタートメニューの「Visual Studio Installer」を選ぶ.

    2. Visual Studio Community 2022 で「変更」を選ぶ.
    3. C++ によるデスクトップ開発」をチェック.そして,画面右側の「インストール」の詳細で「v143 ビルドツール用 C++/CLI サポート(最新)」をチェックする.その後,「インストール」をクリック.

NVIDIA ドライバのインストール(Windows 上)

NVIDIA ドライバ

NVIDIA ドライバは,NVIDIA製GPUを動作させるための重要なソフトウェアである.このドライバをインストールすることにより,GPUの性能を引き出すことができ,グラフィックス関連のアプリ,AI関連のアプリの高速化が期待できる.

ドライバはNVIDIA公式サイトである https://www.nvidia.co.jp/Download/index.aspx?lang=jp からダウンロードできる.このサイトからダウンロードするときには,グラフィックスカードとオペレーティングシステムを選択する. なお,NVIDIA GeForce Experiance を用いてインストールすることも可能である.

サイト内の関連ページ

  1. NVIDIA グラフィックス・ボードの確認

    Windows で,NVIDIA グラフィックス・ボードの種類を調べたいときは, 次のコマンドを実行することにより調べることができる.

    wmic path win32_VideoController get name
    
  2. NVIDIA ドライバのダウンロード

    NVIDIA ドライバは,以下の NVIDIA 公式サイトからダウンロードできる.

    https://www.nvidia.co.jp/Download/index.aspx?lang=jp

  3. ダウンロードの際には,使用しているグラフィックス・ボードの型番とオペレーティングシステムを選択する.

NVIDIA CUDA ツールキット 11.8 のインストール(Windows 上)

NVIDIA CUDA ツールキットのインストール時の注意点

NVIDIAのGPUを使用して並列計算を行うためのツールセット

主な機能: GPU を利用した並列処理,GPU のメモリ管理,C++をベースとした拡張言語とAPIとライブラリ

NVIDIA CUDA ツールキットの動作に必要なもの

Windows でインストールするときの注意点

関連する外部ページ

関連項目NVIDIA CUDA ツールキット, NVIDIA CUDA ツールキット 12.5 のインストール(Windows 上), NVIDIA CUDA ツールキット 11.8 のインストール(Windows 上)

  1. Windows では,NVIDIA CUDA ツールキットインストール中は,なるべく他のウインドウはすべて閉じておくこと.
  2. Windows で,コマンドプロンプト管理者権限で起動する(例:Windowsキーを押し,「cmd」と入力し,「管理者として実行」を選択)
  3. 次のコマンドを実行

    次のコマンドは,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\")"
    
  4. 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 のインストール(Windows 上)の概要

  1. NVIDIA Developer Program メンバーシップへの加入: cuDNNのダウンロードには無料のメンバーシップ登録が必要です。

    NVIDIA Developer Program の公式ページ: https://developer.nvidia.com/developer-program

  2. 互換バージョンの選択とダウンロード: インストール済みのCUDAツールキットのバージョン (今回は11.x) に適合するcuDNNのバージョン (今回はv8.9.7) を選択し、Windows用のzipファイルをダウンロードします。
  3. ファイルの展開と配置: ダウンロードしたzipファイルを展開(解凍)し、中のファイル(bin, include, lib フォルダ内)を、CUDAツールキットのインストールディレクトリにコピーします。
  4. (オプション) 環境変数の設定: 必要に応じてシステム環境変数 CUDNN_PATH を設定します。
  5. (必要に応じて) ZLIB DLL のインストール: zlibwapi.dll が見つからないエラーが発生する場合にインストールします。
  6. 動作確認: cuDNNライブラリ (cudnn64_*.dll) にパスが通っているか確認します。

zlib のインストール(Windows 上)

  1. Windows で,コマンドプロンプト管理者権限で起動する(例:Windowsキーを押し,「cmd」と入力し,「管理者として実行」を選択)
  2. 次のコマンドを実行

    次のコマンドは,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

NVIDIA cuDNN 8.9.7 のインストール(Windows 上)

  1. NVIDIA cuDNN のウェブページを開く

    https://developer.nvidia.com/cuDNN

  2. ダウンロードしたいので,cuDNNのところにある「Download cuDNN」をクリック.
  3. cuDNN Downloads のページで「Archive of Previous Releases」をクリック
  4. cuDNN 8.x - 1.x」をクリック
  5. ダウンロードしたいバージョンを選ぶ

    ここでは「NVIDIA cuDNN v8.9.7 for CUDA 11.x」を選んでいる.

    このとき,画面の「for CUDA ...」のところを確認し,使用するNVIDIA CUDA のバージョンに合うものを選ぶこと.

  6. Windows にインストールするので Windows 版を選ぶ
  7. NVIDIA Developer Program メンバーシップに入る

    NVIDIA cuDNN のダウンロードのため.

    Join now」をクリック.その後,画面の指示に従う. 利用者本人が,電子メールアドレス,表示名,パスワード,生年月日を登録.利用条件等に合意.

  8. ログインする
  9. 調査の画面が出たときは,調査に応じる
  10. ライセンス条項の確認
  11. ダウンロードが始まる.
  12. ダウンロードした .zip ファイルを展開(解凍)する. その中のサブディレクトリを確認しておく.

    Windows での展開(解凍)に便利な 7-Zip: 別ページ »で説明

  13. NVIDIA CUDA ツールキットをインストールしたディレクトリを確認する.「C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8」のようになっている.
  14. 確認したら, さきほど展開してできたすべてのファイルとディレクトリを,NVIDIA CUDA ツールキットをインストールしたディレクトリにコピーする
  15. パスが通っていることを確認.

    次の操作により,cudnn64_8.dllパスが通っていることを確認する.

    Windowsコマンドプロンプトを開き,次のコマンドを実行する.エラーメッセージが出ないことを確認.

    where cudnn64_8.dll
    
  16. 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 上)

  1. Windows で,コマンドプロンプト管理者権限で起動する(例:Windowsキーを押し,「cmd」と入力し,「管理者として実行」を選択)
  2. 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 上)

  1. Windows で,コマンドプロンプト管理者権限で起動する(例:Windowsキーを押し,「cmd」と入力し,「管理者として実行」を選択)
  2. 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
    
  3. 動作確認のため,ピッチ推定を行ってみる
    crepe --model-capacity medium --save-activation tests\sweep.wav
    more tests\sweep.f0.csv
    
  4. crepe -h」 を実行することにより,説明が表示される.

CREPE のプログラム

プログラム1つめ

  1. Windows で,コマンドプロンプトを実行
  2. エディタを起動
    cd /d c:%HOMEPATH%
    notepad pycrepe.py
    
  3. エディタで,次のプログラムを保存

    このPythonプログラムは,ユーザーが選択した音声ファイルを解析し,ピッチ情報を抽出する.結果は出力フォルダに保存され,周波数とアクティベーションの要約統計とグラフが表示される.音声処理にはオープンソースのcrepeライブラリを使用している.

    【説明】

    このプログラムは以下の主な機能を持っている.

    1. ユーザーが音声ファイル(WAV形式)を選択できる.
    2. 音声ファイルを処理し,ピッチ情報(時間,周波数,信頼度,アクティベーション)を抽出する.
    3. 抽出された情報を,指定された出力フォルダ内のテキストファイルに保存する.
    4. 周波数とアクティベーションの平均と標準偏差を計算し,画面に表示する.
    5. 周波数とアクティベーションのグラフを ASCII 文字で描画し,画面に表示する.

    【使用法】

    1. プログラムを実行すると,「音声ファイルを選択してください.複数選択できます.」というメッセージが表示される.このとき,複数のファイルを選択することもできる.
    2. 「出力フォルダを選択してください.」というメッセージが表示される.結果を保存する出力フォルダを選択できる.
    3. 進捗状況がプログレスバーで表示される.
    4. 音声ファイル名,出力ファイルのパス,サンプリングレート,音声の長さ(秒),周波数の平均と標準偏差,アクティベーションの平均と標準偏差,周波数のグラフ(ASCII文字で描画)が表示される.
    5. 出力フォルダには,各音声ファイルの結果がテキストファイルで保存される.
    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()
    
  4. Python プログラムの実行

    Python プログラムの実行

    【サイト内の関連ページ】 Python のまとめ: 別ページ »

    プログラムを pycrepe.pyのようなファイル名で保存したので, 「python pycrepe.py」のようなコマンドで行う.

    python pycrepe.py
    
  5. ファイルダイアログが開くので,音声ファイルを選ぶ.

    このとき,音声ファイルを複数選ぶことができる.

  6. 次に出力結果を保存するフォルダを選ぶ.
  7. 結果の確認

プログラム2つめ

  1. Windows で,コマンドプロンプトを実行
  2. エディタを起動
    cd /d c:%HOMEPATH%
    notepad pycrepeplt.py
    
  3. エディタで,次のプログラムを保存

    このPythonプログラムは,ユーザーが選択した音声ファイルを解析し,ピッチ情報を抽出する.結果は出力フォルダに保存され,周波数とアクティベーションの要約統計が表示される.さらに,ピッチの散布図とアクティベーションのカラーマップが生成される.音声処理にはオープンソースのcrepeライブラリを使用している.

    【説明】

    このプログラムは以下の主な機能を持っている.

    1. ユーザーが音声ファイル(WAV形式)を選択できる.
    2. 音声ファイルを処理し,ピッチ情報(時間,周波数,信頼度,アクティベーション)を抽出する.
    3. 抽出された情報を,指定された出力フォルダ内のテキストファイルに保存する.
    4. 周波数とアクティベーションの平均と標準偏差を計算し,画面に表示する.
    5. ピッチの散布図とアクティベーションのカラーマップを生成し,出力フォルダに保存する.

    【使用法】

    1. プログラムを実行すると,「音声ファイルを選択してください.複数選択できます.」というメッセージが表示される.このとき,複数のファイルを選択することもできる.
    2. 「出力フォルダを選択してください.」というメッセージが表示される.結果を保存する出力フォルダを選択できる.
    3. 進捗状況がプログレスバーで表示される.
    4. 音声ファイル名,出力ファイルのパス,サンプリングレート,音声の長さ(秒),周波数の平均と標準偏差,アクティベーションの平均と標準偏差が表示される.
    5. 出力フォルダには,各音声ファイルの結果がテキストファイルで保存される.
    6. 出力フォルダには,各音声ファイルのピッチの散布図とアクティベーションのカラーマップが画像ファイルで保存される.
    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()
    
  4. Python プログラムの実行

    Python プログラムの実行

    【サイト内の関連ページ】 Python のまとめ: 別ページ »

    プログラムを pycrepeplt.pyのようなファイル名で保存したので, 「python pycrepeplt.py」のようなコマンドで行う.

    python pycrepeplt.py
    
  5. ファイルダイアログが開くので,音声ファイルを選ぶ.

    このとき,音声ファイルを複数選ぶことができる.

  6. 次に出力結果を保存するフォルダを選ぶ.
  7. 結果の確認

    指定した「出力結果を保存するフォルダ」に png 形式の画像ファイルができるので確認.