ios - pistas - importar mp3 en garageband
Falla de audio cuando se reproducen dos archivos de audio AVPlayer simultáneamente (2)
Probablemente esto se deba a que el codificador del software se está activando. Verá un pico muy grande en la memoria cuando el codificador de software intente reproducir el segundo clip de sonido. Consulte la sección de Apple Docs "Códecs de audio y hardware de iOS" http://developer.apple.com/library/ios/#DOCUMENTATION/AudioVideo/Conceptual/MultimediaPG/UsingAudio/UsingAudio.html
"Cuando se utiliza la decodificación asistida por hardware, el dispositivo puede reproducir solo una instancia de uno de los formatos compatibles a la vez".
Además ... "Para reproducir múltiples sonidos con el mejor rendimiento, o para reproducir de manera eficiente los sonidos mientras el iPod se reproduce en segundo plano, use audio lineal PCM (sin comprimir) o IMA4 (comprimido)".
Si no tiene otra opción en los códecs multimedia que puede proporcionar, eche un vistazo al marco AudioUnit para obtener una mezcla más perfecta. En particular, el "Mezclador de audio (MixerHost)" en http://developer.apple.com/library/ios/#samplecode/MixerHost/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010210
Tengo una aplicación de iOS que reproduce una banda de sonido de fondo con un AVPlayer y reproduce otros clips de sonido "en la parte superior" con un segundo AVPlayer. (Los clips de sonido se transmiten desde Internet, de ahí el requisito de AVPlayer). El problema es que cuando el segundo AVPlayer comienza a reproducirse, hace que el fondo de AVPlayer se detenga por una fracción de segundo, similar a lo que se describe en este comentario:
Reproduce múltiples archivos de audio con AVPlayer
Estoy preparando los clips de audio con este método:
- (void)prepareAudio:(NSURL *)assetURL {
asset = [AVURLAsset URLAssetWithURL:assetURL options:nil];
playerItem = [AVPlayerItem playerItemWithAsset:asset];
[player replaceCurrentItemWithPlayerItem:playerItem];
[playerItem addObserver:self forKeyPath:@"playbackBufferEmpty" options:NSKeyValueObservingOptionNew context:nil];
[playerItem addObserver:self forKeyPath:@"playbackLikelyToKeepUp" options:NSKeyValueObservingOptionNew context:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(playerItemDidReachEnd:)
name:AVPlayerItemDidPlayToEndTimeNotification
object:[player currentItem]];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(playerItemFailedToReachEnd:)
name:AVPlayerItemFailedToPlayToEndTimeNotification
object:[player currentItem]];
}
... y luego invocando [player play];
cuando quiero escuchar cada sonido
¿Hay algo que deba hacer cuando configuro la sesión de audio o cada instancia de AVPlayer, para que los sonidos se combinen sin problemas?
Finalmente descubrí cuál es el problema. Estoy escribiendo una aplicación en la que estoy ajustando el volumen usando la clase AVMutableAudioMixInputParameters, y estoy intentando normalizar el audio usando esta clase subiendo o bajando el volumen por muestra.
Si bien este enfoque funciona cuando hay solo unas pocas rampas de volumen, parece que la aplicación de las rampas ocurre en el mismo hilo que almacena el audio, así que cuando uso demasiados (> ~ 1000) de ellos, finalmente se consume el La CPU debe estar ocupada almacenando el audio, y luego tiene un ggg-glitch en el audio.
Mi solución fue refactorizar mi algoritmo de normalización de volumen para usar menos rampas de volumen para lograr lo mismo. Una vez que pude obtener cada conjunto de rampas de volumen / canción a aproximadamente 500 o así, ya no tuve el problema, y el problema de audio desapareció.