2015-08-14 14 views
7

Sto cercando un modo per creare un visualizzatore di barre audio simile a questo in iOS.Visualizzatore barre audio in iOS

enter image description here

Ogni barra bianca si muove su e giù a seconda di audio wave. Sono davvero perso perché non ho molta esperienza nel trattare l'audio in Objective-c.

EDIT: Quello che sto cercando è quello che fa Overcast's app sul suo visualizzatore (il gruppo di barre arancioni verticali sulla parte inferiore dell'immagine del podcast)

Chiunque può aiutare? Grazie

MODIFICA: Grazie alla risposta di Tomer, finalmente ce l'ho fatta. Per prima cosa ho fatto il this tutorial per chiarire tutto. Poi ho creato il mio VisualizerView per il mio progetto, lo puoi trovare in this gist. Forse non è perfetto ma fa quello che dovevo fare.

+0

Verificare la risposta di questa domanda http://stackoverflow.com/questions/27733553/equalizer-from-audio-data – arturdev

+0

Vedere qui [https://github.com/prodia/AudioVisualizer](https:// github.com/prodia/AudioVisualizer) –

risposta

7

In generale, si dispone di un paio di opzioni, se si vuole avere un'idea di quello che qualcosa suona come in iOS:

  • Usa il semplice AVAudioPlayer lettore audio, e quindi utilizzare il metodo [audioPlayer averagePowerForChannel:] per ottenere l'audio fuochi d'artificio livello per il momento attuale. Controlla this tutorial.
  • Utilizzare lo Audio Queue API, che consente di inviare qualsiasi audio desiderato all'altoparlante: si legge l'audio dalla fonte e si riempiono i buffer con esso ogni volta. (Se stai leggendo da un file, usa AVAssetReader) In questo modo sai sempre esattamente quale forma d'onda stai suonando, così puoi, ad esempio, calcolare la sua potenza media o elaborarla in altri modi come FFT. Quindi aggiorni le barre di conseguenza.

EDIT: il modo standard di fare una cosa del genere è quello di utilizzare la Fast Fourier Transform (FFT) - estrae informazioni di frequenza da un suono. Here's un buon esempio di utilizzo su iOS (Apple's guide here). Ma, ovviamente, per usarlo devi sapere esattamente quale forma d'onda stai suonando ogni volta, quindi probabilmente vorrai usare un'API di livello inferiore come Audio Queue.

+0

Ho fatto un piccolo test con mediaPowerFor Channel: ma mostra solo due canali perché è un audio stereo. Come può trasformarsi in un display con diverse barre? – WedgeSparda

+0

@WedgeSparda Usa SpriteKit e imposta 'yScale' su un valore' float' per l'ampiezza del suono. – DDPWNAGE

+0

@WedgeSparda Se vuoi davvero che ogni barra sia completamente indipendente dalle altre, puoi usare FFT. Questo ti darà le componenti di frequenza del suono. Basta google per "fft ios" e troverai molto materiale valido. Altrimenti, dovresti creare un algoritmo per cambiare le barre in base al potere medio. – Tomer