Konuşma verilerini iletmek için gereken bant genişliğini kaydetmek için ham pcm verilerini uLaw olarak kodlamaya çalışıyorum.Android PCM'den wav dosyasını wav kodlama
This page üzerinde UlawEncoderInputStream adlı bir sınıfla karşılaştım ancak belge yok! :(
yapıcı bir giriş akışı ve (yani her neyse) maksimum pcm değerini alır.
/**
* Create an InputStream which takes 16 bit pcm data and produces ulaw data.
* @param in InputStream containing 16 bit pcm data.
* @param max pcm value corresponding to maximum ulaw value.
*/
public UlawEncoderInputStream(InputStream in, int max) {
kodu ile baktıktan sonra ben bir ürünle kullanarak bu "max" değerini hesaplamak gerektiğini şüpheli fonksiyon: maxAbsPcm Sorun şu ki, gerçekten neye geçmek istediğimi anlamadım! Ham pcm'imi sdcard'daki bir dosyaya kaydediyorum, bu yüzden buna geçmek için bir sürekli bellek yerleşik veri dizim yok
/**
* Compute the maximum of the absolute value of the pcm samples.
* The return value can be used to set ulaw encoder scaling.
* @param pcmBuf array containing 16 bit pcm data.
* @param offset offset of start of 16 bit pcm data.
* @param length number of pcm samples (not number of input bytes)
* @return maximum abs of pcm data values
*/
public static int maxAbsPcm(byte[] pcmBuf, int offset, int length) {
Bu kodu kullanmamdaki bir diğer sorun, uLaw verileri için başlık için hangi değerlerin yazılacağından emin değilim. ULaw ile kodlandıktan sonra bayt verilerinin ne kadar olduğunu nasıl belirleyebilirim?
VLC ortam yürütücüsünde oluşturduğum (potansiyel olarak) uLaw kodlanmış dosyalardan birini (dosyayı okumaya çalışacağım tek oyuncum) ve seslerini bozuk, bozuk ve tıklattığını dinledim, ancak yine de sesin dışında.
Dalga başlığımı, Here adresinde bulabileceğiniz WaveHeader adlı bir sınıfa benzer bir kod kullanarak yazıyorum!
herkes bu konuda herhangi bir düşünce varsa ben bunları duymak çok minnettar kalacağım! :)
çok teşekkürler Dexter
Bir .wav dosyası oluşturuyorsanız. Dalga başlığı dosyasını başlangıçta saklayın ve kaydınızın sonunda tekrar değiştirin. Tipik olarak, sonuna ulaşana kadar boyutu (kayıt sayısı) bilmezsiniz. Max'iniz zaten 0x7f olmalıdır. –