2010-03-28 14 views
6

Program aracılığıyla ses dalgası oluşturmak ve AVAudioPlayer ile çalmak istiyorum. Dalga formumu örnek başına doğrusal PCM, 44100Hz, mono, 8 bit olarak kodlayacak kodum var.AVAudioPlayer initWithData için bellekte bir LPCM arabelleği oluşturma

AVAudioPlayer uygulamasının bunu PCM olarak tanıması için bu tamponun etrafına ne tür zarflar sarmam gerektiğini anlayamıyorum.

cevap

4

Belki bir WAV header ekleyerek yardımcı olur?

+0

Bu, deneyim veya spekülasyondan bahsediyor mu merak ediyorum. – iter

+0

Denemedim, ama çalışması gerekiyor. – zoul

+0

Açıklamalarınız için teşekkür ederiz. Kendi WAV kodlayıcımı yuvarlama hatları boyunca daha azını ve benim için kaldırma işlemini yapmak için AudioToolbox'ı kullanma hatları boyunca daha çok düşünüyorum. – iter

4

PCM, analog ses sinyalinin sadece dijital bir gösterimidir. Ne yazık ki, ses - kanallar, bit derinliği veya numune oranı hakkındaki meta verilerden herhangi birini kapsamayacak - hepsi söz konusu PCM verisini doğru bir şekilde okumak için gerekli. Bu değişkenleri AVAudioPlayer nesnesinde manuel olarak ayarlayabildiğiniz sürece, AVAudioPlayer'ın bir NSData nesnesine sarılmış bu PCM verilerini kabul edeceğini varsayardım. Ne yazık ki, bu değişkenler salt okunur, bu yüzden belgeler AVAudioPlayer'ın Core Audio'nun başa çıkabileceği her şeyi ele alabileceğini söylemesine rağmen, ham LPCM verilerinin işlenmesinin bir yolu yoktur.

Zoul'un belirttiği gibi, bu konuyla ilgili en kolay yöntemin, üstbilginin yukarıdaki gerekli değişkenlerden AVPlayer'ı bilgilendirmesi nedeniyle bir WAV başlığına atıldığını tahmin ediyorum. 44 bayttır, kolayca alay edilir ve güzel bir şekilde tanımlanır - wav header kodlama ve kod çözme uygulamak için yukarıda verilen aynı definition'u kullandım. Ayrıca, sadece değiştirilmemiş LPCM verilerinize hazırlanmıştır.