### 音頻系統簡章:分析音檔中的主導頻率變化
#### 功能概述
此功能讀取指定音檔,進行快速傅立葉變換(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')
```
此程式碼非常適用於音樂製作、音頻分析和教育目的,可以幫助用戶理解音樂或其他音頻檔中的頻率組件如何隨時間變化。