首頁 > 後端開發 > Python教學 > 探索 Hz 的魔力:建構音樂頻率分析儀

探索 Hz 的魔力:建構音樂頻率分析儀

Mary-Kate Olsen
發布: 2024-11-30 22:47:18
原創
599 人瀏覽過

在音樂和聲音領域,有一場關於頻率的有趣爭論,引起了音樂家、歷史學家和科學家的注意。這次討論的核心是 432 Hz,通常被稱為「宇宙的自然頻率」。今天,我將帶您完成建立 Web 應用程式的旅程,該應用程式可以分析音訊檔案以確定它們是否調整到這個神秘的頻率。

歷史背景

在深入了解技術細節之前,讓我們先了解一下 432 Hz 的重要性。這個頻率不是任意選擇的——它有深刻的歷史根源。巴赫和貝多芬等音樂傳奇人物將他們的樂器調至 A=432 Hz,認為這是與宇宙本身產生共鳴的自然調音。

但是,這種情況在第二次世界大戰期間發生了變化,標準改為 440 Hz。有些人認為 440 赫茲會產生一種微妙的緊張和焦慮感,與無線電靜電相比。相較之下,432 Hz 據說可以促進音樂的和諧和自然流動。無論您是否相信這些效果,分析音訊的技術挑戰仍然令人著迷。

技術概述

我們的應用程式是使用現代網路技術和科學計算庫建立的:

  • 後端:FastAPI (Python)
  • 音訊處理:pydub、numpy、scipy
  • 前端:用於檔案上傳的 Web 介面
  • 分析:用於頻率偵測的快速傅立葉變換 (FFT)

頻率分析背後的科學

我們應用程式的核心是快速傅立葉變換 (FFT) 演算法。 FFT 將我們的音訊訊號從時域轉換到頻域,使我們能夠識別一段音樂中的主要頻率。

分析的工作原理如下:

  1. 音訊輸入處理
   audio = AudioSegment.from_file(io.BytesIO(file_content)).set_channels(1)  # Convert to mono
   samples = np.array(audio.get_array_of_samples())
   sample_rate = audio.frame_rate
登入後複製
登入後複製
登入後複製
  1. 頻率分析
   fft_vals = rfft(samples)
   fft_freqs = rfftfreq(len(samples), d=1/sample_rate)
   dominant_freq = fft_freqs[np.argmax(np.abs(fft_vals))]
登入後複製
登入後複製
登入後複製
  1. 結果解讀
   tolerance = 5  # Hz
   result = (
       f"The dominant frequency is {dominant_freq:.2f} Hz, "
       f"{'close to' if abs(dominant_freq - 432) <= tolerance else 'not close to'} 432Hz."
   )
登入後複製

技術實作細節

後端架構

我們的 FastAPI 後端處理音訊處理的繁重工作。以下是主要功能:

  1. 文件驗證

    • 確保上傳的檔案是音訊格式
    • 檔案大小限制為 20MB
    • 驗證音訊串流完整性
  2. 音訊處理管

    • 將音訊轉換為單聲道以進行一致的分析
    • 擷取原始樣本進行 FFT 處理
    • 應用 FFT 來辨識頻率成分
  3. 錯誤處理

    • 優雅地處理無效文件
    • 清除不支援格式的錯誤訊息
    • 針對處理錯誤的強大異常處理

API設計

API 簡單而有效:

   audio = AudioSegment.from_file(io.BytesIO(file_content)).set_channels(1)  # Convert to mono
   samples = np.array(audio.get_array_of_samples())
   sample_rate = audio.frame_rate
登入後複製
登入後複製
登入後複製

使用者體驗

該應用程式提供了一個簡單的介面:

  1. 上傳任何支援的音訊檔案
  2. 接收主頻率的即時分析
  3. 獲得關於頻率與 432 Hz 有多接近的清晰回饋
  4. 查看頻率意義與意義的詳細解讀

頻率解釋

關鍵功能之一是頻率的智慧解釋。該應用程式不僅告​​訴您主頻率,還解釋其意義:

   fft_vals = rfft(samples)
   fft_freqs = rfftfreq(len(samples), d=1/sample_rate)
   dominant_freq = fft_freqs[np.argmax(np.abs(fft_vals))]
登入後複製
登入後複製
登入後複製

解釋系統為不同頻率範圍提供上下文:

  • 432 Hz (±5 Hz):解釋歷史意義與自然排列
  • 440 Hz (±5 Hz):有關現代標準調音的詳細資訊
  • 低於 432 Hz:有關較低頻率特性的資訊
  • 432 Hz 以上:深入了解更高頻率的特性

此功能不僅可以幫助使用者了解頻率的數值,還可以幫助使用者了解其音樂和歷史背景,使該工具更具教育意義和吸引力。

技術挑戰和解決方案

挑戰一:音訊格式相容性

  • 解決方案:使用 pydub 提供廣泛的格式支援
  • 處理前實現格式驗證

挑戰2:處理大文件

  • 解決方案:實作檔案大小限制
  • 增加了流支援以提高記憶體使用效率

挑戰 3:準確性與性能

  • 解決方案:平衡FFT視窗大小
  • 為實際結果實施了公差範圍

未來的改進

  1. 增強分析

    • 多頻率偵測
    • 諧波分析
    • 基於時間的頻率追蹤
  2. 使用者功能

    • 批次檔處理
    • 頻率可視化
    • 音頻音高轉換至 432 Hz

結論

建造這款頻率分析儀是一次音樂、歷史和技術交叉的激動人心的旅程。無論您是對 432 Hz 現象感興趣的音樂家,還是對音頻處理感到好奇的開發人員,我希望這個項目能夠為我們如何分析和理解構成音樂世界的頻率提供寶貴的見解。

完整的原始碼可以在 GitHub 上找到,我歡迎貢獻和改進建議。請隨意嘗試不同的音訊檔案並探索頻率分析的迷人世界!


注意:該專案是開源的,可用於教育目的。頻率分析僅供實驗使用,可能不適合專業音頻調諧應用。

Exploring the Magic of  Hz: Building a Music Frequency Analyzer 雷耶斯維森特 / 432Hz 頻率檢查器

此項目檢查歌曲的頻率是否為 432Hz。

此項目檢查歌曲的頻率是否為 432Hz。

為什麼是 432Hz?

432Hz 被認為是宇宙的自然頻率,巴赫和貝多芬等偉大作曲家都採用 432Hz 來創作觸動靈魂的音樂。這表明通用音階使用 432A 來調音他們的樂器。然而,在第二次世界大戰期間,該頻率被更改為 440Hz,類似於收音機的靜電噪音,令人迷失方向且令人不安。相比之下,432Hz 則促進和諧和流動感。這是理想的頻率,一種感覺有機且令人振奮的頻率!大自然真是奇妙!

運行後端:

   audio = AudioSegment.from_file(io.BytesIO(file_content)).set_channels(1)  # Convert to mono
   samples = np.array(audio.get_array_of_samples())
   sample_rate = audio.frame_rate
登入後複製
登入後複製
登入後複製
進入全螢幕模式 退出全螢幕模式

運行前端

   fft_vals = rfft(samples)
   fft_freqs = rfftfreq(len(samples), d=1/sample_rate)
   dominant_freq = fft_freqs[np.argmax(np.abs(fft_vals))]
登入後複製
登入後複製
登入後複製
進入全螢幕模式 退出全螢幕模式
在 GitHub 上查看

以上是探索 Hz 的魔力:建構音樂頻率分析儀的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板