Disminuir la velocidad de reproducción del file de audio en 600% -900% (sin afectar el tono) en iOS

Debe sonar así.

Yo he tratado:

NSURL* url = [[NSBundle mainBundle] URLForResource:@"Justin Bieber - U Smile" withExtension:@"mp3"]; self.player = [[AVAudioPlayer alloc] initWithContentsOfURL: url error:nil]; self.player.volume = 1.0f; self.player.enableRate=YES; [self.player prepareToPlay]; [self.player setNumberOfLoops:0]; self.player.rate=0.16f; [self.player play]; 

pero suena horrible

Lo que pide no es una tarea simple, la razón de que ese tono esté inherentemente vinculado a la velocidad de reproducción del audio. Por ejemplo, una onda sinusoidal de 10 segundos a 100 Hz, cuando se ralentiza por un factor de dos, se convertirá en una onda de 50 Hz de 20 segundos (Hz está relacionado tanto con la velocidad de la onda como con el tono que escuchas). Para disminuir esta onda sinusoidal por un factor de dos sin afectar el tono, algún algorithm debe averiguar qué sonido falta en los 10 segundos de audio que está insertando, generar este audio y acoplarlo con lo que hay allí. No es fácil, de hecho es muy difícil.

Los buenos progtwigs de edición de audio (por ejemplo, Logic Pro) pueden hacer un trabajo razonablemente bueno, utilizando algunos algorithms complejos. Sin embargo, cualquier cosa más que un factor de unas pocas veces va a producir resultados bastante horribles, la razón es que es difícil generar audio que no existía antes y hacer que suene bien.


Sin embargo, así es como lo haría

(y cómo creo que el enlace anterior suena bien):

En primer lugar, comenzar con audio de muy alta calidad. Manténgase alejado de 128 kpbs mp3s, simplemente no lo van a cortar. Cuanta más información de sonido haya que usar, más fácil será que los algorithms creen algo que suene bien.

Luego, los algorithms de investigación que van a funcionar bien por un factor de 600 a 900%. Mira esto: http://hypermammut.sourceforge.net/paulstretch/ – Es de código abierto, por lo que deberías poder aprender mucho de él. Además, el algorithm está hecho especialmente para factores de gran escala. ¡Bingo!

Diría que se aplicó algún tipo de efecto (o un par) al resultado final en el video de YouTube. El website enlazado anteriormente menciona que se ha aplicado "Spectral Smoothing" al audio. También algo como reverb puede dar al resultado una textura mejor o más interesante, algunas cosas para jugar.


No es una tarea pequeña, especialmente para hacerlo bien. Debe ser interesante / divertido, ¡buena suerte!

En wikipedia, hay un artículo que describe de algún modo lo que debería hacer: enlace . Debe escalar el time y ajustar el tono en consecuencia para compensar el efecto de escalado. Los sonidos no son triviales, tal vez pueda intentar encontrar el código fuente en un proyecto de filter de código abierto ya existente.