---
# System prepended metadata

title: 音頻系統簡章：分析音檔中的主導頻率變化

---

### 音頻系統簡章：分析音檔中的主導頻率變化

#### 功能概述
此功能讀取指定音檔，進行快速傅立葉變換（FFT）來獲得頻譜資料，然後計算出每個時間點上的主導頻率（即最強頻率成分），並將這些數據視覺化顯示出來。

#### 主要組件與程式碼說明

1. **音檔讀取與預處理**：
   - 使用 `librosa.load` 讀取音檔，其中 `sr` 參數指定音檔的採樣率。如果設定為 `None`，將使用音檔原始的採樣率。

```python
y, sr = librosa.load(filepath, sr=sr)
```

2. **執行短時傅立葉變換（STFT）**：
   - `librosa.stft` 函數用於計算音頻的短時傅立葉變換，`n_fft` 定義了每一塊的大小，`hop_length` 定義了相鄰兩塊之間的重疊。

```python
stft = librosa.stft(y, n_fft=n_fft, hop_length=hop_length)
magnitude = np.abs(stft)
```

3. **提取主導頻率**：
   - 使用 `np.argmax` 找出每個時間點上最強的頻率成分的索引，再將這些索引轉換為赫茲數。

```python
dominant_frequencies = np.argmax(magnitude, axis=0)
dominant_frequencies_hz = dominant_frequencies * float(sr) / n_fft
```

4. **繪製主導頻率隨時間變化的圖表**：
   - 使用 `librosa.frames_to_time` 將幀索引轉換為時間。
   - 使用 `matplotlib` 繪製主導頻率隨時間的變化圖。

```python
times = librosa.frames_to_time(range(dominant_frequencies.size), sr=sr, hop_length=hop_length)
plt.plot(times, dominant_frequencies_hz, color='blue', linewidth=1)
plt.title('Dominant Frequency Over Time')
plt.xlabel('Time (Seconds)')
plt.ylabel('Frequency (Hz)')
plt.grid(True)
plt.show()
```

#### 使用指南

1. **安裝必要的庫**：確保已安裝 `librosa`, `numpy`, 和 `matplotlib`。
   
```bash
pip install librosa matplotlib numpy
```

2. **運行程式碼**：將 `'path/to/your/audiofile.wav'` 替換為您實際的音檔路徑，然後運行程式碼來分析並繪製主導頻率。

```python
plot_dominant_frequency(r'your_audio_file_path.mp3')
```

此程式碼非常適用於音樂製作、音頻分析和教育目的，可以幫助用戶理解音樂或其他音頻檔中的頻率組件如何隨時間變化。