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