JAVA获取音频的波峰值_java – 音频分析:频率与音高
我正在设计一个简单的调谐器,所以我的目标是显示一个音符名称(A,B,F#)和理论声音与实际输入之间的距离.
我对音频和信号处理完全陌生,所以我做了一些研究,我找到了一个名为快速傅立叶变换的东西,它将分析字节并给出频率.另外,我发现了一些Java库,如common math和JTransforms,所以我不会自己编写硬代码.
我相信这一切,因为每个范围频率可以直接映射到平等气质的音符,但后来我发现这个新的(对我来说)单词称为音高:它被认为与频率紧密相关,但并不完全相同事情并且要难得多,属于那个心理声学领域.
所以我的问题是,有人可以清楚地概述音高和频率之间的差异,也许可以告诉我哪个调谐器处理?
解决方法:
Frequency只是波每秒经过的振荡次数.任何周期性的波都有一个频率.但通常在音乐中,使用该术语仅限于谈论正弦波,所以如果你听到有关频率x的波动,它通常意味着每秒钟有很多振荡的正弦波.
任何波,无论是周期性的还是非周期性的,都可以通过将不同频率的不同频率的正弦波(即具有不同幅度)相加来构建.傅立叶变换的作用是告诉您使用哪些频率以及使用哪些幅度来创建任何给定的波.快速傅立叶变换(FFT)是计算波的傅里叶变换的特定算法,给定表示作为时间的函数的波的幅度的数据.
当您听到乐器演奏的音符时,它不仅包含一个频率.相反,你得到的是不同数量的基频不同倍数的组合.例如,演奏特定音符的长笛可能会产生组合
> 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赫兹的速度播放音符.”
现在我们到了pitch,这是一个稍微模糊的概念.音符的音高基本上是一个人在接触到音符时实际听到的音符.对于许多乐器,音高与乐器发出的基频相关.但是,根据较高频率的相对幅度,一个人可能会感觉到两个乐器具有不同的音高,即使它们实际上正在播放相同音符.
幸运的是,如果你只是制作一个简单的调音器,你根本不必担心音调.调谐器的要点是最小化不同乐器之间的节拍,并且节拍是由实际频率引起的,而不是由感知到的音高引起的.小音和长笛都以440赫兹的基频播放,不会出现节拍,因为它们所有频率之间的差异是440赫兹的倍数,即使未经训练的耳朵可能认为其中一个比另一个更高音.
标签:java,audio,signal-processing,physics
来源: https://codeday.me/bug/20191001/1837996.html
JAVA获取音频的波峰值_java – 音频分析:频率与音高相关推荐
- java 获取三天前时间_java 获取前几天时间
标签: java 获取前几天时间 一.toLocaleString()函数过时: //当前时间 Date endDate=new Date(); String endTime=endDate.to ...
- java获取0点的时间戳_Java获取凌晨时间戳的方法分析
本文实例讲述了java获取凌晨时间戳的方法.分享给大家供大家参考,具体如下: 这两天有一个需求是查询用户匹配的推荐信息,包含一个有效时间段,以天为单位,0时0分0秒这种. 通常java中有两种方案: ...
- java获取系统当前时间格式化_java 获取系统当前时间并格式化
java 获取系统当前时间并格式化 CreateTime--2018年5月9日11:41:00 Author:Marydon 实现方式有三种 updateTime--2018年7月23日09点32分 ...
- java 获取当前第几周_java获取第几周
java获取第几周 1.首先创建一个getWeek函数,接收一个Date类型的参数: 2.然后在函数内创建一个GregorianCalendar实例: 3.之后设置GregorianCalendar实 ...
- java 获取每月每一天_java 求取某一段时间内的每一天、每一月、每一年
1.求取某一段时间内的每一天 Date date0 = new SimpleDateFormat("yyyy-MM-dd").parse("2014-01-01" ...
- java获取date的时分秒_Java 之 Date 获取 年月日时分秒
package com.util; import java.text.DateFormat; import java.util.Calendar; import java.util.Date; pub ...
- java获取下一季末_java取当前周期、月初至月末、季度初至季度末日期。
常用日历操作辅助类 @author steven 2010-08-10 @email:qing.tan@iwode.com */ public class CalendarUtil { private ...
- java 获取md5值报错_java获取文件的MD5值
package com.sichang.util; import java.io.File; import java.io.FileInputStream; import java.math.BigI ...
- java获取xlsx某列数据_Java读取Excel指定列的数据详细教程和注意事项
本文使用jxl.jar工具类库实现读取Excel中指定列的数据. jxl.jar是通过java操作excel表格的工具类库,是由java语言开发而成的.这套API是纯Java的,并不依赖Windows ...
最新文章
- python打开文件_python如何学习
- 【Numpy】学习笔记1
- 使用ABAP和JavaScript代码生成PDF文件的几种方式
- python解析器原理_Python程序运行原理图文解析
- java 拦截html请求参数值_javaweb项目,html文件放在了WebRoot下,如何拦截访问html的请求呀?...
- 基于mapreducer的图算法
- 51NOD-1029 大数除法【大数】
- 【笔记——Java】读取properties文件
- Win11 ARM64深度解析
- WPF——OXY绘图_old
- [Growth]Steve Jobs——Follow your heart and intuition, everything else is secondary.
- 借助python用Tushare查询股票价格并存入Mysql数据库中
- 那些你需要知道的互联网广告投放知识
- 浅谈C#中的抽象类(abstract)和接口(interface)
- 【Kafka笔记】4.Kafka API详细解析 Java版本(Producer API,Consumer API,拦截器等)
- chrome插件推荐---自动刷新网页
- 搭建机器人电控系统——器件选型——如何选择电机?
- Axure RP9教程 常用函数
- JavaScript——运算符的全面解析
- csgo内置服务器文件夹,[服务器架设] CSGO 服务器架设新手全教程(WIN)(带图) | 视频迟些送上...