gpt4 book ai didi

Java 频谱图图像 : mp3 and microphone

转载 作者:搜寻专家 更新时间:2023-11-01 03:14:20 29 4
gpt4 key购买 nike

首先,我正在做一个小项目来查看一些声音的频谱。

我用麦克风做了这个: 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 文件上做错了什么,那就太好了。

这些是我的设置:

  • 采样率:44100
  • 每个样本的位数:8
  • channel :1(单声道)
  • 签名:真实
  • big endian:true (我在 Java 中使用 AudioFormat)
  • 读取音频的 tempBuffer:10000 ( byte tempBuffer[] = new byte[10000]; )
  • 对于 FFT,我将音频分成 4096 个 block (必须是 2 的幂)

顺便问一下:这些设置是否正确,或者我应该使用 16bps 或立体声,还是 10000 用于缓冲区过多或 4096 用于小/大?

提前致谢

最佳答案

MP3 是一种压缩音频格式。您应该首先解压缩数据,然后才能将其用作与麦克风数据相当的音频流。原始 MP3 数据具有最大熵,看起来应该很像白噪声,它在您的声谱图中确实如此。

关于Java 频谱图图像 : mp3 and microphone,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3147879/

29 4 0
文章推荐: java - SOAP 消息的输入参数的大小限制是多少
文章推荐: c# - 使用 DataContractSerializer 反序列化 XML
文章推荐: c# - 将 List 转换为 List