pythonでwavファイルのピッチを判別する方法

import librosa
import numpy as np
import matplotlib.pyplot as plt
from tkinter import filedialog
import tkinter as tk

# ファイルを選択するためのTkinterウィンドウを作成
root = tk.Tk()
root.withdraw()

# ファイルを選択
audio_file_path = filedialog.askopenfilename()

# 音声ファイルの読み込み
y, sr = librosa.load(audio_file_path)

# ピッチの抽出
pitches, magnitudes = librosa.core.piptrack(y=y, sr=sr)

# ピッチの解析
pitch_values = pitches[pitches > 0]  # ピッチが正の値のみを抽出

# ピッチの統計情報の取得
pitch_max = np.max(pitch_values)
pitch_min = np.min(pitch_values)
pitch_mean = np.mean(pitch_values)
pitch_mode = np.argmax(np.bincount(pitch_values.astype(int)))

# 箱ひげ図の描画(90度回転)
plt.figure(figsize=(8, 6))
plt.boxplot(pitch_values, vert=True)
plt.title('Pitch Analysis')
plt.xlabel('Frequency')
plt.ylabel('Pitch')
plt.grid(True)
plt.show()

# ピッチの統計情報の出力(最大値、最小値、平均値、最頻出値)
print("Max Pitch:", pitch_max)
print("Min Pitch:", pitch_min)
print("Mean Pitch:", pitch_mean)
print("Mode Pitch:", pitch_mode)

import librosa
import numpy as np
import matplotlib.pyplot as plt
import os

# 解析する音声ファイルのパス
filepath = '/Users/haru/Downloads/segments/'
records = 5

# プロットする箱ひげ図のリスト
plt.figure(figsize=(15, 6))  # 全体の図のサイズを設定

all_pitch_values = []  # 全てのピッチ値を保存するリスト

for recording_num in range(records):
    # 音声ファイルの読み込み
    filename = f"{filepath}{recording_num+1}.wav"
    y, sr = librosa.load(filename)

    # ピッチの抽出
    pitches, magnitudes = librosa.core.piptrack(y=y, sr=sr)

    # ピッチの解析
    pitch_values = pitches[pitches > 0]  # ピッチが正の値のみを抽出

    # 全てのピッチ値をリストに追加
    all_pitch_values.append(pitch_values)

# 箱ひげ図を描画
plt.boxplot(all_pitch_values, vert=False)

# グラフの設定
plt.title('Pitch Analysis')
plt.xlabel('Frequency')
plt.ylabel('Recordings')
plt.grid(True)

plt.tight_layout()  # レイアウトを調整して図が重ならないようにする
plt.show()

Comments

No comments yet. Why don’t you start the discussion?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です