2009-06-02 20 views
14

Ses dosyalarını işlemek zorunda olan bir uygulama üzerinde çalışıyorum. Mp3 dosyalarını kullanırken verileri nasıl kullanacağımı bilmiyorum (ilgilendiğim veriler duyduğumuzu temsil eden ses baytlarıdır).MP3'ten ses verileri nasıl alınır?

Bir wav dosyası kullanıyorum, 44 baytlık bir üstbilgiye sahibim ve sonra da veriyorum. Bir mp3 söz konusu olduğunda, bunların her bir karenin bir başlık ve ses verileri içeren, kareler tarafından oluşturulduğunu okudum. Tüm ses verilerini bir mp3 dosyasından almak mümkün mü?

java kullanıyorum (MP3SPI, Jlayer ve Tritonus ekledim) ve bu dosyadan baytları alabiliyorum, ancak bu baytların neyi temsil ettiğinden veya nasıl işleneceğinden emin değilim . documentation for MP3SPI itibaren

cevap

26

:

File file = new File(filename); 
AudioInputStream in= AudioSystem.getAudioInputStream(file); 
AudioInputStream din = null; 
AudioFormat baseFormat = in.getFormat(); 
AudioFormat decodedFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, 
              baseFormat.getSampleRate(), 
              16, 
              baseFormat.getChannels(), 
              baseFormat.getChannels() * 2, 
              baseFormat.getSampleRate(), 
              false); 
din = AudioSystem.getAudioInputStream(decodedFormat, in); 

Daha sonra sadece din verileri okumak - bu decodedFormat uyarınca "ham" veri olacaktır. (Daha fazla bilgi için docs for AudioFormat bakınız.)

(bu örnek kod böyle akışı ya da bir şey kapatmak unutmayın -. Normal olarak uygun try/finally bloklarını kullanın)

+0

Merhaba Jon, Hızlı cevabınız için teşekkürler! Teklifinizde; 'decodedFormat' diğer formatta kodu çözülen mp3 verilerinin bir temsilidir? "din.read()" yazsam, veri baytlarını çözülmüş formatta alıyorum mı? Teşekkürler – dedalo

+0

Evet. Bu decodedFormat, "İmzalı PCM verileri olarak kodunu çözmenizi istiyorum" diyor. –

+0

Merhaba. Tavsiyeni takip ettim ve işe yaradı. Kullandığım verileri görselleştirmek için: ((numBytesRead = din.read (audioBytes))! = -1) {} Bu, "din" içindeki baytları okur ve bunları audioBytes dizisinde saklar. Verileri görsel olarak kullanarak çalışıyorum: ((numBytesRead = din.read (audioBytes))! = -1) { System.out.println ("Bytes Kod Çözme değeri" + audioBytes [0]);} Bu veriler hakkında bir sorum var: Her örnek 16 bit kullanır, yani audioBytes dizisinde 2 konum var mı? Her numunenin değerini nasıl alabilirim? Kod çözülmüş format (wav) 44 başlık baytına sahip mi? Yardımlarınız için çok teşekkür ederim! – dedalo

0

sen istediğiniz veri gerçek örnekler, MP3 ise verileri farklı şekilde gösterir. Yani, herkesin söyledikleri gibi - MP3 verilerini amacınız için gerçek örneklere dönüştürmek için bir kütüphaneye ihtiyacınız var.

0

Diğer cevaplarda da belirtildiği gibi, MP3'ü normal ses örneklerine dönüştürmek için bir kod çözücüye ihtiyacınız vardır.

Bir popüler seçenek JavaLayer (LGPL) olur.

İlgili konular