ホームページ > バックエンド開発 > Python チュートリアル > Hz の魔法を探る: 音楽周波数アナライザーの構築

Hz の魔法を探る: 音楽周波数アナライザーの構築

Mary-Kate Olsen
リリース: 2024-11-30 22:47:18
オリジナル
660 人が閲覧しました

音楽とサウンドの領域では、周波数についての興味深い議論があり、ミュージシャン、歴史家、科学者の注目を集めています。この議論の中心には、しばしば「宇宙の固有周波数」と呼ばれる 432 Hz という数字があります。今日は、音声ファイルがこの神秘的な周波数に同調しているかどうかを判断するために、音声ファイルを分析する Web アプリケーションを構築する私の旅をご紹介します。

歴史的背景

技術的な詳細に入る前に、432 Hz が重要な理由を理解しましょう。この周波数は恣意的に選択されたものではなく、深い歴史的ルーツがあります。バッハやベートーベンのような音楽界の伝説的人物は、宇宙そのものと共鳴する自然な調律であると考え、楽器を A=432 Hz に調律しました。

しかし、第二次世界大戦中に標準が 440 Hz に移行されたため、状況は変わりました。 440 Hz をラジオの静音と比較して、微妙な緊張感や不安感を生み出すと主張する人もいます。対照的に、432 Hz は音楽のハーモニーと自然な流れを促進するといわれています。これらの効果を信じるか信じないかにかかわらず、オーディオ周波数を分析するという技術的な課題は依然として興味深いものです。

技術概要

私たちのアプリケーションは、最新の Web テクノロジーと科学計算ライブラリを使用して構築されています。

  • バックエンド: 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. 周波数の意味と重要性の詳細な解釈を表示します

周波数の解釈

重要な機能の 1 つは、周波数のインテリジェントな解釈です。このアプリケーションは、支配的な周波数を知らせるだけでなく、その重要性についても説明します:

   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 以上: 高周波特性に関する洞察

この機能は、ユーザーが周波数の数値だけでなく、その音楽的および歴史的背景も理解するのに役立ち、ツールをより教育的で魅力的なものにします。

技術的な課題と解決策

課題 1: オーディオ形式の互換性

  • 解決策: 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 は宇宙の固有周波数と考えられており、バッハやベートーベンなどの偉大な作曲家が魂に響く音楽を生み出すために採用しました。これは、万能音階が楽器の調律に 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート