- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
首先,我正在做一个小项目来查看一些声音的频谱。
我用麦克风做了这个: alt text http://img25.imageshack.us/img25/4271/spectrumanalyzerfourier.png
上图是我对着麦克风说话和喊叫了几秒钟。这对我来说很好。
但是当我尝试读取 MP3 文件并制作它的频谱图像时,它看起来有点不同。我尝试了 Aphex Twin - Windowlicker,您通常应该在频谱图图像中看到一张脸,或者至少看到一些更深的颜色。但它看起来不太好: alt text http://img10.imageshack.us/img10/3475/aphextwinhmm.png
这是我对麦克风所做的:
byte tempBuffer[] = new byte[10000];
ByteArrayOutputStream out = new ByteArrayOutputStream();
counter = 20;
// Microphone
while (counter != 0) {
int count = line.read(tempBuffer, 0, tempBuffer.length);
if (count > 0) {
out.write(tempBuffer, 0, count);
}
counter--;
}
out.close();
// FFT code below ...
byte audio[] = out.toByteArray();
// ...
这就是我用 MP3 做的:
我使用相同的代码进行转换和可视化,只是音频捕获部分不同(我只是在绘图方法中调整了高度以查看是否有差异,但没有):
byte tempBuffer[] = new byte[10000];
ByteArrayOutputStream out = new ByteArrayOutputStream();
FileInputStream input = null;
File mp3 = new File("Aphex Twin - Widowlicker.mp3");
input = new FileInputStream(mp3);
int len;
while((len = input.read(tempBuffer)) > 0) {
out.write(tempBuffer, 0, len);
}
out.close();
input.close();
// FFT code below ...
byte audio[] = out.toByteArray();
// ...
如果有人能指出我在 MP3 文件上做错了什么,那就太好了。
这些是我的设置:
顺便问一下:这些设置是否正确,或者我应该使用 16bps 或立体声,还是 10000 用于缓冲区过多或 4096 用于小/大?
提前致谢
最佳答案
MP3 是一种压缩音频格式。您应该首先解压缩数据,然后才能将其用作与麦克风数据相当的音频流。原始 MP3 数据具有最大熵,看起来应该很像白噪声,它在您的声谱图中确实如此。
关于Java 频谱图图像 : mp3 and microphone,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3147879/
我对复值频谱执行 iFFT 并通过让第一个样本归零来更改相应的时域信号。最后,我通过 FFT 将其转换回频域。 我想知道这里使用两侧(对称)频谱或仅使用一侧频谱(仅正频率)之间的(物理)差异在哪里,因
我正在尝试提高使用 cython 计算 Jonswap 频谱的性能。但它似乎比原始代码慢得多。我该如何改进? 赛通代码: from libc.math cimport exp from libc.st
我目前可以使用 JavaScript Web Audio API 播放音轨。在播放此轨道时,我可以提取 FFT 频谱数据、峰值、RMS 值等。 但是,出于我的应用程序的目的,我需要能够在开始播放轨道之
我正在尝试将频谱保存在我的 FMOD_DSP_PARAMETER_FFT 中,但我只收到充满零的频谱,如果你能看到我的错误我会同意,我认为我没有很好地将 DSP 连接到 channel 或类似的东西,
我有一个复杂的信号,我想对其进行 FFT。使用 Mathematica 我得到以下结果: (* Some acquisition params *) fS = 100. 10^6; time = 10
我是一名优秀的程序员,十分优秀!