Java'nın -buffer'ını nasıl kullanacağım konusunda biraz kafam karıştı: Programımda ses üretmeye çalışıyorum SourceDataLine üzerinden oynattığım veri. Ancak, double
-values üretiyorum ve bir örnek için 4 bayt kullanıyorum (AudioFormat
: new AudioFormat(8000f, 32, 1, true, true)
).SourceDataLine.write üzerinden ses çalma - Byte [] - Buffer çift değerlerle nasıl kullanılır
Bir double
'u dört byte
s'ye dönüştürmenin en iyi yolu nedir (çift için "oynat")?
[Not: normal ses oynatımı için iyi 32 bis örnek boyutu var mı?]
İlgili: http://stackoverflow.com/q/26824663/2891664. Cevabım genellikle baytları örneklere dönüştürmekle ilgili olsa da, ne sorduğunuzu gösteren bir kod örneği var. Diğer bir ortak yöntem ise java.nio.ByteBuffer/java.nio.DoubleBuffer'ın kullanılmasıdır. – Radiodef
32 bit örnek boyutu, ses için aldığı kadar iyidir, ancak 8kHz oldukça korkunç bir örnekleme oranıdır. 8kHz frekans aralığını 4kHz'nin altında sınırlar; bu da genellikle konuşma için sadece kabul edilebilir (VOIP/telefon). – Radiodef
Referans için, 16100 fps'de 16 bit kodlama, yaygın olarak "CD Kalitesi" olarak bilinir. Stereo ile, bu çerçeve başına dört bayt (iki şort) gelir. İki katına sahip olmak, bu kadar düşük bir örnekleme oranını telafi etmeyecektir. (Radiodef'in kaliteyle ilgili yorumunu güçlendirir.) –