🎯 專案概述 這是一款雙版本音樂節拍偵測與節拍器系統 ,包含 Python 終端版 和 Web 前端版 ,能夠透過麥克風錄音即時偵測使用者所敲打的節奏,自動計算出 BPM(每分鐘拍數),並播放對應節奏的節拍聲音,輔助音樂人訓練節奏感。
🌟 版本特色 版本 特色 適用場景 🐍 Python 終端版 CLI 介面、高精度計時、即時錄音偵測 開發者、音樂製作、快速原型 🌐 Web 前端版 美觀 UI、跨平台、即開即用、線上版本 一般使用者、線上教學、行動裝置
💡 核心功能詳解 🎙️ 智慧錄音偵測系統 即時音訊處理 :使用 sounddevice 進行高品質錄音峰值偵測演算法 :透過 scipy.signal.find_peaks 精準識別拍點自適應閾值 :根據環境噪音自動調整偵測靈敏度時間間隔分析 :計算拍點間隔並轉換為 BPM📊 BPM 計算引擎 1
2
3
4
5
6
# 核心計算邏輯
if len ( peaks ) > 1 :
first , last = peaks [ 0 ], peaks [ - 1 ]
count = len ( peaks ) - 1
avg_interval = (( last - first ) / fs ) / count
bpm = 60 / avg_interval
🔊 高精度節拍器播放 微秒級計時 :使用 time.perf_counter() 確保播放穩定性多執行緒播放 :背景播放不影響主程式運作自訂音效支援 :可載入 WAV 格式的節拍音效即時視覺回饋 :播放時顯示音符符號🎛️ 雙模式操作 錄音偵測模式 :敲擊麥克風自動計算 BPM手動設定模式 :直接輸入 BPM 數值(支援 1-200 BPM)🛠️ 技術架構詳解 Python 終端版技術棧 技術/套件 版本 用途 特色 sounddevice最新版 音訊錄製與播放 低延遲、跨平台 numpy1.21+ 音訊數據處理 高效能數值運算 scipy.signal1.7+ 峰值偵測演算法 科學計算級精度 threading內建 多執行緒播放 非阻塞式操作 time.perf_counter內建 高精度計時 微秒級精度
Web 前端版技術棧 技術 用途 特色 HTML5 Audio API 音訊錄製與播放 瀏覽器原生支援 Web Audio API 即時音訊處理 低延遲處理 CSS3 動畫 視覺效果 流暢的 UI 動畫 JavaScript ES6+ 邏輯控制 現代化語法 Responsive Design 響應式設計 多裝置支援
📱 前端版本特色介紹 🎨 現代化 UI 設計 深色主題 :專業音樂軟體風格漸層背景 :視覺層次豐富動態效果 :按鈕懸停、載入動畫響應式佈局 :支援桌面與行動裝置🎵 進階功能 拖拽上傳 :支援音效檔案上傳即時 BPM 顯示 :動態更新節奏數值多種節奏模式 :支援不同音符長度視覺節拍器 :動畫顯示節拍位置🔧 技術亮點 1
2
3
4
// Web Audio API 音訊處理
const audioContext = new ( window . AudioContext || window . webkitAudioContext )();
const analyser = audioContext . createAnalyser ();
const microphone = navigator . mediaDevices . getUserMedia ({ audio : true });
🚀 安裝與使用指南 Python 終端版安裝 1
2
3
4
5
# 安裝必要套件
pip install sounddevice numpy scipy
# 執行程式
python 終端版.py
Web 前端版使用 🌐 線上版本 立即體驗 :智慧節拍器線上版 無需下載 :直接在瀏覽器中使用跨平台支援 :支援桌面和行動裝置📁 本地版本 開啟 smart_metronome.html 檔案 允許麥克風權限 選擇錄音偵測或手動輸入 BPM 開始使用節拍器 📊 效能表現 指標 Python 版 Web 版 延遲時間 < 5ms < 10ms BPM 精度 ±0.1 BPM ±0.5 BPM 記憶體使用 ~50MB ~20MB 啟動時間 2-3秒 即開即用
🧠 演算法原理 拍點偵測流程 graph TD
A[音訊錄製] --> B[音量正規化]
B --> C[峰值偵測]
C --> D[時間間隔計算]
D --> E[BPM 轉換]
E --> F[節拍器播放]
核心演算法 音訊預處理 :正規化音量至 0-1 範圍閾值計算 :mean + 2*std 自適應閾值峰值搜尋 :使用 find_peaks 找出拍點間隔分析 :計算拍點間平均時間BPM 轉換 :BPM = 60 / 平均間隔🎯 應用場景 🎼 音樂教育 節奏訓練 :幫助學生建立穩定的節奏感速度練習 :逐步提升演奏速度拍子練習 :訓練不同拍號的節奏🎹 音樂製作 錄音輔助 :提供精確的節拍參考混音工具 :確保音軌同步現場演出 :即時節奏控制🎸 樂器練習 吉他練習 :配合節拍器練習指法鋼琴練習 :訓練雙手協調鼓手練習 :提升節奏穩定性🔮 未來發展規劃 短期目標 中期目標 長期目標 📽️ 功能展示影片
您的瀏覽器不支援 video 標籤。 🏗️ 程式架構概覽 Python 終端版架構 1
2
3
4
5
6
7
8
9
10
main()
├── 使用者選擇錄音 or 手動 BPM
├── record() 函數
│ ├── 音訊錄製 (sounddevice)
│ ├── 峰值偵測 (scipy.signal)
│ └── BPM 計算
└── start() 函數
├── 高精度計時 (time.perf_counter)
├── 多執行緒播放
└── 視覺回饋 (♪ 符號)
Web 前端版架構 1
2
3
4
5
6
7
HTML 結構
├── 響應式 CSS 設計
├── JavaScript 核心邏輯
│ ├── Web Audio API 處理
│ ├── 音訊分析引擎
│ └── UI 互動控制
└── 動態視覺效果
🤝 貢獻指南 歡迎提供你們的想法!
程式碼規範 遵循 PEP 8 程式碼風格 加入適當的註解和文檔 確保跨平台相容性 📞 聯絡資訊 作者 :Boyce Work-柏毅工作坊Email :Boyce9739@gmail.com線上版本 :智慧節拍器 技術支援 :請提交 GitHub Issue🎵 讓音樂與科技完美融合,為您的音樂之旅提供最精準的節奏夥伴!