Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 音频分析:频率与音高_Java_Audio_Signal Processing_Physics - Fatal编程技术网

Java 音频分析:频率与音高

Java 音频分析:频率与音高,java,audio,signal-processing,physics,Java,Audio,Signal Processing,Physics,我正在设计一个简单的调谐器,所以我的目标是显示一个音符名称(a、B、F#)以及理论声音和实际输入之间的距离(以美分为单位) 我对音频和信号处理完全陌生,所以我做了一些研究,发现了一种叫做快速傅立叶变换的东西,它可以分析字节并给出频率。此外,我还发现了一些Java库,比如,所以我不会自己编写硬代码 我相信这就是全部,因为每个音域的频率可以直接映射到一个相同音律的音符,但后来我发现了一个新的(对我来说)词,叫做音高:据说它与频率密切相关,但不是完全相同的东西,更难获得,属于心理声学领域 所以我的问题

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

我对音频和信号处理完全陌生,所以我做了一些研究,发现了一种叫做快速傅立叶变换的东西,它可以分析字节并给出频率。此外,我还发现了一些Java库,比如,所以我不会自己编写硬代码

我相信这就是全部,因为每个音域的频率可以直接映射到一个相同音律的音符,但后来我发现了一个新的(对我来说)词,叫做音高:据说它与频率密切相关,但不是完全相同的东西,更难获得,属于心理声学领域


所以我的问题是,有人能清楚地描述出音高和频率之间的区别,并告诉我调谐器处理的是哪种调谐器吗?

音高是你必须处理的标准音符。对于
A
,这是440赫兹,官方的说法,但是越来越多的音乐家和乐器开始使用它,因为这可能是441442。。。 对于编程,您最好让用户修复其标准
A
(例如,让他在440和449之间,以1Hz为步长)。然后,
A
一个八度以上将是880882。。。取决于用户的初始选择。 你必须以对数刻度(12个间隔)计算其他音符,最好是显示听到的频率和最近音符之间的距离。 参见此示例:

是波每秒经过的振荡次数。任何周期性的波都有一个频率。但通常在音乐中,这个词的使用仅限于谈论正弦波,所以如果你听到某个频率为x的波,它通常意味着一个每秒有那么多振荡的正弦波

任何任意波,无论周期与否,都可以通过将不同频率的正弦波以不同的量(即具有不同振幅)相加来构造。傅里叶变换的作用是告诉你使用哪个频率,用哪个振幅来产生任何给定的波。快速傅里叶变换(FFT)是一种特殊的算法,它计算波的傅里叶变换,给定表示波振幅随时间变化的数据

当你听到乐器演奏的音符时,它不仅仅由单一频率组成。相反,你得到的是一个基频的不同倍数的组合,数量不同。例如,吹奏特定音符的长笛可能会产生以下组合:

  • 440赫兹,振幅为1
  • 1320 Hz,振幅为1/2
  • 2200 Hz,振幅为1/3
等等。另一方面,吹同一个音符的小号可能会产生

  • 440赫兹,振幅为1
  • 880 Hz,振幅为1/2
  • 1320 Hz,振幅为1/4
  • 1760 Hz,振幅为1/8
等等。(这些不是这些仪器的实际相对振幅;我只是编了一些示例数字)因此,在调谐器应用程序中,当您对输入数据运行FFT时,您将在不同频率下的输出中发现多个峰值,具体取决于正在调校的仪器。关键是FFT的输出将不仅仅是一个数字;它不会告诉你“这个乐器在440赫兹的频率下演奏一个音符。”

现在我们来谈谈,这是一个稍微模糊的概念。一个音符的音高基本上是一个人接触到该音符时实际听到的声音。对于许多乐器,音高与乐器发出的基频相关。但根据较高频率的相对振幅,一个人可能会感觉到两种乐器的音调不同,即使它们实际上演奏的是同一个音符


幸运的是,如果你只是制作一个简单的调谐器,你根本不用担心音高。调谐器的目的是最小化不同乐器之间的节拍,而节拍是由实际频率而不是感知的音调引起的。基频为440 Hz的小号和长笛不会显示节拍,因为它们所有频率之间的差异都是440 Hz的倍数,即使未经训练的耳朵可能认为其中一个音调比另一个高。

音调与信号的周期性有关。的确,它是基于心理声学的,但是当我们听到一个音调时,可以非常准确地说我们检测到了信号的伪周期性

频谱是将音频信号分解为各种频率的正弦和余弦之和。正如David指出的,通常当人们在音乐环境中谈论“频率”时,他们指的是你将信号分解成的这些正弦波的频率。所以频谱是看这些正弦分量中哪一个是大的,它们的频率是多少。频谱广泛地代表了你戴着高帽听到的“高频”,以及你在岩石撞击地面时听到的“低频”。严格地说,这两种声音都不是周期性的,你也感觉不到音调,但你听到的是频谱中高频和低频部分的相对大小

傅里叶变换(或DFT/FFT)是一种数学算法,通过它可以将音频信号分解为正弦和余弦之和。所以通过观察这些正弦和余弦的大小,你可以得到频谱。猜测音高的一种简单方法是直接观察一小段音频的频谱,并假设信号的最大正弦分量对应于其基本周期性

我在另一篇文章中写了一个很长的答案,我认为这将回答你关于如何提取音高的问题: