sea*_*owg 4 java audio scala signal-processing wav
我正在为我的第四年项目(处理功能反应式编程)开发一个小型示例应用程序.我们的想法是创建一个简单的程序,可以播放.wav文件,然后显示播放歌曲当前音量的"弹跳"动画(如音频录制软件).我在Scala中构建它,因此主要是查看Java库和现有解决方案.
目前,我已经设法轻松播放.wav文件,但我似乎无法实现第二个目标.基本上有一种方法可以解码.wav文件,这样我可以在任何给定的时间访问'音量'吗?按体积我认为我的意思是它的幅度,但我可能错了 - 高等物理学不久前......
显然,我对此一点都不太了解,所以如果有人能指出我正确的方向,那就太棒了!
在wav文件中,流中给定点的数据是体积(移动动态范围的一半).换句话说,如果你知道什么类型的wav文件(例如8位,单声道),每个字节代表一个样本.如果您知道采样率(比如44100 HZ),那么将时间乘以44100,这就是您要查看的字节.
字节的值是体积(距离中间的距离.. 0和255是峰值,127是零).这假设编码不是mu-law编码.我发现了一些关于如何区分这些格式的好信息,或者更好的是,在这些格式之间进行转换:
http://www.gnu.org/software/octave/doc/interpreter/Audio-Processing.html
您可能希望通过一些固定数量的样本窗口来平均这些样本.
在数字音频处理中,您通常会参考信号的瞬时峰值幅度(这也称为PPM - 峰值程序计量).根据您想要的准确程度或者您是否希望为某些标准化计量进行建模,您也可以
另一种测量模式是RMS,它是通过在某个时间窗上积分计算的(加上平方样本值,除以窗口长度,取平方根,即均方根RMS).这样可以更好地了解信号的"能量",比峰值测量更平滑,但不能捕获观察到的最大值.该模式有时也称为VU表.您可以使用某种滞后(低通)滤波器y[i] = y[i-1]*a + |x[i]|*(a-1)来估算它,例如,某些值0 < a < 1
您通常以对数方式显示值,即以分贝为单位,因为这与我们对信号强度的感知更好地对应,并且对于大多数信号也可以更加规则地覆盖屏幕空间.
我参与的三个项目可以帮助您:
| 归档时间: |
|
| 查看次数: |
2694 次 |
| 最近记录: |