智慧音樂節拍偵測器 - AI 節奏訓練系統

🎯 專案概述 這是一款雙版本音樂節拍偵測與節拍器系統,包含 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 最新版 音訊錄製與播放 低延遲、跨平台 numpy 1.21+ 音訊數據處理 高效能數值運算 scipy.signal 1.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 / 平均間隔 🎯 應用場景 🎼 音樂教育 節奏訓練:幫助學生建立穩定的節奏感 速度練習:逐步提升演奏速度 拍子練習:訓練不同拍號的節奏 🎹 音樂製作 錄音輔助:提供精確的節拍參考 混音工具:確保音軌同步 現場演出:即時節奏控制 🎸 樂器練習 吉他練習:配合節拍器練習指法 鋼琴練習:訓練雙手協調 鼓手練習:提升節奏穩定性 🔮 未來發展規劃 短期目標 支援更多音效格式(MP3, OGG) 增加節奏模式(3/4, 6/8 拍) 加入節奏模式記憶功能 中期目標 機器學習優化 BPM 偵測 雲端同步設定 行動應用版本 長期目標 AI 節奏分析與建議 多樂器節奏訓練 社群功能與節奏分享 📽️ 功能展示影片 您的瀏覽器不支援 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 互動控制 └── 動態視覺效果 🤝 貢獻指南 歡迎提供你們的想法! ...

July 9, 2025 · 3 分鐘 · 李柏毅