首页 > 后端开发 > Python教程 > 探索 Hz 的魔力:构建音乐频率分析仪

探索 Hz 的魔力:构建音乐频率分析仪

Mary-Kate Olsen
发布: 2024-11-30 22:47:18
原创
585 人浏览过

在音乐和声音领域,有一场关于频率的有趣争论,引起了音乐家、历史学家和科学家的关注。这次讨论的核心是 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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板