burada belgelere göre ben çok AudioQueue
imha true
kullanmak https://developer.apple.com/library/mac/documentation/MusicAudio/Reference/AudioQueueReference/#//apple_ref/c/func/AudioQueueDisposeAudioQueueDispose gecikme
err = AudioQueueDispose(queue, true);
, hemen gerçekleşir cihaz. err = AudioQueueStop(queue, true)
da aynı soruna sahiptir.
Benim anlayış her iki işlevi zaten tampon salınımlı temizlemek için denemek ve yaklaşık ...
ben bile çağrılacak gidiyor AudioQueueDispose
eğer arabellekleri temizlemesini benim geri arama işlevini yardımcı kuyruğa edilecek olmasıdır. Bir parça çalınırken sonra AudioQueues
kullanarak bir şey kaydetmek için gidiyorum yana
static void MyAQOutputCallBack(void *inUserData, AudioQueueRef inAQ, AudioQueueBufferRef inCompleteAQBuffer)
{
if (player.shouldDispose) {
printf("player shouldDispose !!!!!!!!!!!\n\n\n\n\n\n");
OSStatus dispose = AudioQueueFlush (inAQ);
return;
}
}
, bu fonksiyonlar gecikme olmadan iade gerekir. iki yüz milisaniye iyi ama 3-4 saniye mi? bu kabul edilemez. Aynı iş parçacığı üzerinde de çağrılıyor ve düzgün çalışıyor gibi görünüyor.
Ben de bunu yapmak herhangi bir fark[self performSelectorOnMainThread:@selector(tryOnMain) withObject:nil waitUntilDone:NO];
veya
dispatch_sync(dispatch_get_main_queue(),^{
daha hiç bir şeyi değiştirmeyecek olup olmadığını emin olmak için ana iş parçacığı bu aramaya çalıştık
Herhangi fikir neler olabilir?
-(void)stopAudio
{
@synchronized(audioLock) {
audioLock=[NSNumber numberWithBool:false];
OSStatus err;
err=AudioQueueReset (_audioQueue);
if (err != noErr)
{
NSLog(@"AudioQueueReset() error: %d", (int)err);
}
err=AudioQueueStop (_audioQueue, YES);
if (err != noErr)
{
NSLog(@"AudioQueueStop() error: %d", (int)err);
}
err=AudioQueueDispose (_audioQueue, YES);
if (err != noErr)
{
NSLog(@"AudioQueueDispose() error: %d", (int)err);
}
}
}
Ve benim,:
Farklı ses kodeklerini denediniz mi? Bazı kodekleri kullanırken garip şeyler gördüm. Apple Lossless'ı sadece Apple olduğu için tavsiye ederim :) – Jaro