Прежде всего, я работаю над небольшим проектом, чтобы увидеть спектр из некоторых звуков.Java spectrogram images: mp3 и микрофон
Я получил эту работу с микрофоном: 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
- Каналы: 1 (моно)
- подписанного: истинный
- большой Endian: истинный (я использую AudioFormat в Java)
- tempBuffer для чтения аудио: 10000 (байт tempBuffer [] = новый байт [10000];)
- и для FFT я разделить аудио в chuncks 4096 (должен быть мощностью 2)
Кстати: эти настройки нормально, или я должен использовать 16bps или стерео или 10000 для слишком много буфера или 4096 на малый/большой?
Заранее спасибо
Я всегда получаю исключение GC OutOfMemoryException. Является ли мой буфер (10000) слишком большим (некоторые исследования и большинство людей принимают 10000). Я использовал MP3 SPI-библиотеку для декодирования mp3 (теперь он работает, но все еще имеет слишком много данных хмм) – juFo