2011-02-15 20 views
5

Sorunsuz bir ses döngüsünü çalmanın en iyi yolunu bulmaya çalışıyorum; kullanıcı, mümkün olan en kısa sürede, makul bir numarayla (30-150)) çok kısa döngüler mevcuttur. OpenAL bunun için yeterli mi, yoksa Ses Birimleri'ni araştırmam gerekecek mi? Apple Belgeleri, bir enstrüman gibi gerçek zamanlı geri bildirim için Ses Birimleri'nin doğru seçim olduğunu söylüyor.Gerçek Zamanlı Ses Döngüsü iPhone için Değiştirme

Sadece toplumun bu konudaki fikrini almak istiyorum ve tüm linkler ve örnek projeler büyük beğeni topluyor.

cevap

3

için AVAudioPlayer sorunsuz döngü, bir sıkıştırılmış ses dosyası kullanabilir (numberOfLoops = 1). IMA4 kodlu CAF dosyalarının kullanılmasını öneririm, çünkü bunlar donanımsal dekompresyondan faydalanmak için söylentilerdir (diğer şeyler için CPU döngüleri tasarrufu).

Dosya boyutunu küçültmek için, bit hızını (96 kbps'yi deneyin) ve/veya mono kullanabilirsiniz.

AVAudioPlayer uygulamasının tempoyu veya çalma sıklığını değiştirmenize izin vermediğini unutmayın.

+0

OpenAL vs. Ses Birimleri hakkında daha fazla bilgi için: http://stackoverflow.com/questions/1002838/audio-on-the-iphone –

+0

Başlangıçta farklı örnekleri bir araya getirmeme izin verdiğim konusunda şüphem vardı ama Çeşitli NSTimeInterval komutları (şimdiki zaman, toplam süre) Bilmem gereken şeyi anlayabilmem gerekir. Bir ton teşekkür ve bana şans diliyorum! – DanF

+0

İyi şanslar. Hexaphone'da kesintisiz döngü/döngü geçişini nasıl yönetirim - AVAudioPlayerDelegate olayları ihtiyaçlar için yeterince hızlı olmadığından AVAudioPlayer'ı (aynı zamanda görünür bir beat göstergesini güncellemek için de faydalı) "gölgelendirmek için bir NSTimer (scheduleTimerWithTimeInterval) kullanıyorum). –

2

Bu muhtemelen sorunuzu cevaplamıyor, ancak hiç Finch modeline baktınız mı? Sadece kaynağa bakmak bazı göstergeler sağlayabilir.

  • Johannes
+0

Bu, uygulanması için çok heyecan verici derecede kolay bir ses uygulamasıdır, ancak ne yazık ki bir örneklemin sona ermesini veya ilmeklemeyi kolaylaştıracak başka bir şeyi tespit etme konusunda hiçbir şey göremiyorum. – DanF

1

Yeniden oynatma gecikmesi olmayan başka bir ses örneğine geçmeniz gerekiyorsa, OpenAL kullanmanız gerekir. AVAudioPlayer oynatılmaya başlamadan önce bir gecikme var.

PreparatToPlay'i arayarak bu gecikmeyi en aza indirebilirsiniz, ancak gecikmeyi her zaman tamamen ortadan kaldırmaz. Ayrıca, kullanıcının oynatma için seçtiği 30 ila 150 örneğiniz varsa, hangi örneklerin önceden yüklenmesi gerektiğini önceden bilmezsiniz. http://kstenerud.github.com/ObjectAL-for-iPhone/documentation/index.html#choosing_sec

+0

Örnekler yeterince küçükse, hepsini önceden yükleyebileceğimi düşünüyordum. Önbellek boyutunu biliyor musun? – DanF

+0

OpenAL'deki örnekler sıkıştırılmamış PCM, 16 bit olmalıdır (teknik olarak 8 bit izin verilir, ancak iPhone üzerinde çalışmaya başlamadım). Yani eğer bu formatta değilse, sıkıştırılmamış olarak depolamak veya yükü açmak zorunda kalacaksınız. Her şeyi yüklemek için yeterli serbest raminiz olduğu sürece iyisiniz. Eski arm6 tabanlı iOS cihazları (iPhone 3g gibi) için toplam RAM limiti 24MB civarındadır. Bundan sonra işletim sistemi tarafından kapatılma riskiyle karşı karşıyasınız. Daha sonraki cihazlarla oynamak için çok daha fazla RAM'iniz var. – Karl

+0

AVAudioPlayer'ı hala düşünüyorsanız bir başka şey: Önceden yüklenmiş ses içeren 30-150 AVAudioPlayers'ınızın olabileceğini düşünmüyorum. Ben aslında TRIED, düşünmüyorum, ama AVAudioPlayer için tasarlanan bu değil. – Karl

0

Bunun için Cocos2d ses kitaplığını kullanarak sona erdi ve Beklediğimden daha çok daha fazla ölçülebilir oldu:

İşte OpenAL'in ve AVAudioPlayer arasındaki lehte ve aleyhte bir özet. AVAudioPlayer, ihtiyaç duyduğumdan biraz daha iyi bir seviye oldu.

İlgili konular