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()