2011-07-28 6 views
6

Bir ses dosyası yürüten, ancak şu ana kadar başarısız olan bir program yazmayı denedim. kod bazı kısımlarını anlamak için kuramıyorum: Ben kanallar ne örnek hızını, önceden dosya boyutunu, biliyorum nasıl AudioFormat yapıcısı olarakAudioFormat, AudioInputStream yapıcıyı ve başlangıç ​​yöntemini anlama

InputStream is = new FileInputStream("sound file"); 
    AudioFormat af = new AudioFormat(float sampleRate, int sampleSizeInBits, int channels, boolean signed, boolean bigEndian); // I don't understand it's constructor 
    long length ; // length in sample frames 
    // how cani i know the length of frames ? 
    AudioInputStream ais = new AudioInputStream(is , af , length); 
    // open (ais); 
    // start playing by invoking start method 
  • ve 2 boolean değişken son?
  • (length) örnek karelerinin değerini nasıl alabilirim?
  • Ayrıca başlangıç ​​yöntemini nasıl çağırırım? Ben herhangi bir hattan ancak dosyadan veri kodlama yanı sıra bir klasöre içinde (yani bir klip)

cevap

3

tuttu istemiyoruz, ses biçimi ayrıca belirtmek diğer özelliklerini içerir Verilerin kesin düzenlenmesi. Bunlar arasında kanal sayısı, örnek oranı, örnek boyutu, bayt sırası, kare hızı ve çerçeve boyutu bulunur. Sesler farklı kanallarda ses kanalına sahip olabilir: biri mono, ikisi stereo için. Numune oranı , ses basıncının kaç tane "anlık görüntüsünün" (örnek), kanal başına saniyede alınan olduğunu ölçer. (Ses, mono yerine stereo ise, iki örnek aslında her bir anda ölçülür: bir kanal için sol kanal için bir ve bir diğeri sağ kanal için, ancak örnek oranı hala kanal başına düşen sayıyı ölçer. Bu, kanal sayısına bakılmaksızın oranıdır. Bu, standardın standart terimidir.) Örnek boyutu, her anlık görüntüyü depolamak için kaç bit kullanıldığını gösterir; 8 ve 16 tipik değerlerdir. 16 bit örnekler için (veya herhangi bir bayttan daha büyük olan diğer örnek boyutu) bayt sırası önemlidir; Her örnekte bayt, "küçük endian" veya "big-endian" tarzında düzenlenmiştir. PCM gibi kodlamalar için, bir çerçeve tüm kanallar için belirli bir noktada örnek kümesinden oluşur ve böylece bir çerçevenin (bayt cinsinden) boyutu her zaman bir örneğin boyutuna eşittir ( bayt cinsinden) Kanalların sayısı kez. Bununla birlikte, başka bir çeşit kodlaması ile bir çerçeve, serisinin tamamı için örneklerin yanı sıra ek, örnek olmayan veriler için bir sıkıştırılmış veri demeti içerebilir. Bu kodlamaları için, örnek oranı ve örnek boyutu, PCM'ye kodu çözüldükten sonra verilere başvurur ve bu nedenle kare hızından ve çerçeve boyutundan tamamen farklıdırlar. Bu yaklaşım

Link

+0

Küçük endian, büyük ender nedir? 16'dan 8 farklı nasıl? –

+0

İpucu: 'ClassName + 6' üzerinde arama yapmak sizi genellikle Java 6 JavaDocs'a yönlendirecektir (Tamam, 'Thread' gibi genel bir sınıf adı ise 'javadoc' aramasına ekleyin). –

+0

[Endianness] (http://en.wikipedia.org/wiki/Endianness) – James

1

Muhtemelen daha iyi bir yol Java Sound info. sayfasında gösterilen 'oynamak Clip kaynak kodunun çizgisinde olduğunu. Bu soruların çoğunu gereksiz hale getirir (Clip kullanırken ince detaylar için endişelenmenize gerek yoktur).

Kaynağı denedikten sonra başka sorularınız varsa, bildirin.

+0

Ses dosyasını bir URL’den oynatmak istemiyorum. –

+0

Zamanınızı ve sabrımı boşa harcamayı durdurmak için geri dönün ve bu kaynağın 25 satırını, özellikle de ilk tek satır yorumunu okuyun. Yaptığını bana kanıtlamak için lütfen bu yorumu geri al. –

+0

'// getAudioInputStream() ayrıca bir Dosya veya InputStream' –