当前位置: 首页 > 面试题库 >

音频分析:频率与音高

濮阳立果
2023-03-14
问题内容

我正在设计一个简单的调谐器,所以我的目标是显示音符名称(A,B,F#)以及理论声音和实际输入之间的 距离( 以分为单位)。

我是音频和信号处理的新手,所以我做了一些研究,发现 了一个 叫做快速傅立叶变换 的东西
,它可以分析字节并给我频率。另外,我发现了一些Java库,例如通用数学和JTransforms,所以我不会自己编写硬代码。

我相信就这样,因为每个范围的频率都可以以相同的气质直接映射到音符,但是后来我发现了这个新的(对我来说) 音调
:据说与频率紧密相关,但并不完全相同东西,并且很难获得,并且属于那个 心理声学 领域。

所以我的问题是,有人可以清楚地概述音高和频率之间的差异,也许可以告诉我调谐器要处理的是什么?


问题答案:

频率
就是波每秒振动的次数。任何周期性的波都有频率。但是通常在音乐中,该术语的使用仅限于谈论正弦波,因此,如果您听到有关频率为x的波的某些信息,则通常表示每秒振荡量很大的正弦波。

可以通过将各种频率的正弦波以不同的数量(即具有不同的振幅)相加来构造任意波,无论是否周期性。傅立叶变换的作用是告诉您要使用哪个频率以及哪个振幅来创建任何给定的波。快速傅立叶变换(FFT)是一种特殊的html" target="_blank">算法,它根据给定的数据表示随时间变化的波幅,从而计算出波的傅立叶变换。

当您听到乐器弹奏的音符时,它不仅包含单个频率。相反,您得到的是不同频率的基本频率的不同倍数的组合。例如,吹奏特定音符的长笛可能会产生

  • 440 Hz,幅度1
  • 1320 Hz,振幅1/2
  • 2200 Hz,幅度1/3

等等。另一方面,吹奏相同音符的小号可能会产生

  • 440 Hz,幅度1
  • 880 Hz,振幅1/2
  • 1320 Hz,幅度1/4
  • 1760 Hz,幅度1/8

等等。(这些不是这些仪器的实际相对振幅;我只是制作了一些示例数字)因此,在您的调谐器应用程序中,当对输入数据运行FFT时,您会发现输出中的多个峰值处于不同频率,具体取决于哪个乐器正在调音。关键是FFT的输出将不仅是一个数字,而是一个整数。它不仅会告诉您“此乐器正在以440
Hz的频率演奏音符”。

现在,我们得到 间距
,这是一个稍微模糊的概念。音符的音调基本上就是一个人接触该音符时实际听到的声音。对于许多乐器,音高与乐器发射的基频相关。但是,取决于较高频率的相对振幅,一个人可能会感觉到两个乐器的音高不同,即使它们实际上演奏相同的音符也是如此。

幸运的是,如果您只是制作一个简单的调谐器,则完全不必担心音高。调谐器的目的是使不同乐器之间的拍子最小化,拍子是由实际频率而不是音高所引起的。两者都以440Hz为基频演奏的小号和长笛不会表现出节拍,因为它们的所有频率之间的差异是440 Hz的倍数,即使未经训练的耳朵可能认为其中一个的音调比另一个高。



 类似资料:
  • 问题内容: 我正在编写代码来分析语音所唱的单个音频。我需要一种方法来分析音符的频率。当前,我正在使用PyAudio录制音频文件,该文件存储为,然后立即播放。 问题出在while循环上。由于某种原因,该条件永远不会成立。我打印了两个值(len(data)和(chunk * swidth)),它们分别是8192和4096。然后,我尝试在while循环中使用2 * chunk * swidth,这引发了

  • 问题内容: 我一直在尝试通过以下代码调整音频片段的音调: http://developer.android.com/guide/topics/media/audio- capture.html 我的猜测是应该使用进行此调整。 http://developer.android.com/reference/android/media/MediaRecorder.html 但是,我不确定调用哪种方法来改

  • 音频概述 没有音频的游戏是不完整的,例如背景音乐或音响效果。Unity 的音频系统灵活而强大。它可以导入大多数标准音频文件格式,并且为播放 3D 空间中的声音提供了复杂的功能,以及可选的音响效果,例如回音和过滤。Unity 还可以记录来自用户机器上任意可用麦克风的音频,以便在游戏过程中使用,或者用于存储和传输。 基础理论 在现实生活中,声音由对象发出,并被听众听到。声音被感知的方式取决于许多因素。

  • 音频 Unity 的音频功能包括完整 3D 空间声音、实时混音和母带处理、混音层次结构、快照、预定义效果等等。 阅读本节以了解 Unity 中的音频,包括剪辑、声源、侦听器、导入和声音设置。 相关教程: 音频 相关的提示、技巧和故障排除,等参阅 音频知识库 部分。

  • Audio接口仅适用于780和更高版本的手机QQ,如需在780以下版本使用音频功能,请使用原来的接口 音频播放接口分为普通音频接口(normal)和音效接口(effect)。普通接口和老接口类似,支持play,pause等方法,以及各种属性和事件(详情参考文档末尾的表)。effect接口用于播放短时,高频的音效,建议尽可能复用同一个对象来播放音频。ios只能播放,停止音效。android可以播放,

  • InnerAudioContext jd.createInnerAudioContext() 创建内部 audio 上下文 InnerAudioContext 对象。 返回值 InnerAudioContext InnerAudioContext InnerAudioContext 实例,可通过 jd.createInnerAudioContext 接口获取实例。 属性 string src 音频