Tengo un programa que usa una unidad de audio de reproductor de archivos para reproducir, pausar y detener un archivo de audio. La forma en que lo estoy logrando es inicializando la unidad de audio del reproductor de archivos para reproducir el archivo en la posición cero y luego, cuando el usuario presiona el botón de pausa, detengo el AUGraph, captura la posición actual y luego la uso como posición de inicio cuando el usuario presiona el botón de reproducción. Todo funciona como debería, pero cada 3 o 4 veces que presiono pausa y luego juego, la canción comienza a reproducirse de la mitad a un segundo ANTES del punto donde presioné pausa.En el audio del núcleo IOS, ¿cómo se puede encontrar la posición actual del cabezal de reproducción actual de una unidad de audio de reproductor de archivos?
No puedo entender por qué sucede esto, ¿alguno de ustedes tiene alguna idea? aquí hay una versión simplificada de mi código.
//initialize AUGraph and File player Audio unit
...
...
...
//Start AUGraph
...
...
...
// pause playback
- (void) pauseAUGraph {
//first stop the AuGrpah
result = AUGraphStop (processingGraph);
// get current play head position
AudioTimeStamp ts;
UInt32 size = sizeof(ts);
result = AudioUnitGetProperty(filePlayerUnit,
kAudioUnitProperty_CurrentPlayTime, kAudioUnitScope_Global, 0, &ts,
&size);
//save our play head position for use later
//must add it to itself to take care of multiple presses of the pause button
sampleFrameSavedPosition = sampleFrameSavedPosition + ts.mSampleTime;
//this stops the file player unit from playing
AudioUnitReset(filePlayerUnit, kAudioUnitScope_Global, 0);
NSLog (@"AudioUnitReset - stopped file player from playing");
//all done
}
// Stop playback
- (void) stopAUGraph {
// lets set the play head to zero, so that when we restart, we restart at the beginning of the file.
sampleFrameSavedPosition = 0;
//ok now that we saved the current pleayhead position, lets stop the AUGraph
result = AUGraphStop (processingGraph);
}
¿Qué formato es el archivo de audio? –
son archivos m4a. – Beleg
OK, no soy un experto en compresión de audio, pero los archivos tienden a comprimirse en fragmentos y cuando lo buscas puede ir al fragmento más cercano en lugar de a la posición real. Si encuentro algo más definitivo, publicaré una respuesta. –