在音乐和声音领域,有一场关于频率的有趣争论,引起了音乐家、历史学家和科学家的关注。这次讨论的核心是 432 Hz,通常被称为“宇宙的自然频率”。今天,我将带您完成构建一个 Web 应用程序的旅程,该应用程序可以分析音频文件以确定它们是否调整到这个神秘的频率。
在深入了解技术细节之前,让我们先了解一下 432 Hz 的重要性。这个频率不是任意选择的——它有深刻的历史根源。巴赫和贝多芬等音乐传奇人物将他们的乐器调至 A=432 Hz,认为这是与宇宙本身产生共鸣的自然调音。
但是,这种情况在第二次世界大战期间发生了变化,标准改为 440 Hz。一些人认为 440 赫兹会产生一种微妙的紧张和焦虑感,与无线电静电相比。相比之下,432 Hz 据说可以促进音乐的和谐和自然流动。无论您是否相信这些效果,分析音频的技术挑战仍然令人着迷。
我们的应用程序是使用现代网络技术和科学计算库构建的:
我们应用程序的核心是快速傅立叶变换 (FFT) 算法。 FFT 将我们的音频信号从时域转换到频域,使我们能够识别一段音乐中的主要频率。
分析的工作原理如下:
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))]
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 后端处理音频处理的繁重工作。以下是主要功能:
文件验证
音频处理管道
错误处理
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
该应用程序提供了一个简单的界面:
关键功能之一是频率的智能解释。该应用程序不仅告诉您主频率,还解释其意义:
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 现象感兴趣的音乐家,还是对音频处理感到好奇的开发人员,我希望这个项目能够为我们如何分析和理解构成音乐世界的频率提供宝贵的见解。
完整的源代码可以在 GitHub 上找到,我欢迎贡献和改进建议。请随意尝试不同的音频文件并探索频率分析的迷人世界!
注意:该项目是开源的,可用于教育目的。频率分析仅供实验使用,可能不适合专业音频调谐应用。
该项目检查歌曲的频率是否为 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))]
以上是探索 Hz 的魔力:构建音乐频率分析仪的详细内容。更多信息请关注PHP中文网其他相关文章!