2015-05-11 11 views
7

Chiederò questo a rischio di essere troppo vago o di chiedere troppe cose in una domanda, ma in realtà sto solo cercando un punto nella giusta direzione.iOS registra l'audio e disegna forme d'onda come Memo vocali

Nella mia app, desidero registrare l'audio, mostrare una forma d'onda durante la registrazione e scorrere la forma d'onda per registrare e riprodurre da un momento specifico. Ad esempio, se ho 3 minuti di audio, dovrei essere in grado di tornare alle 2:00 e avviare la registrazione da lì per correggere un errore.

In Memo vocali, questo viene eseguito istantaneamente, senza alcun ritardo o tempo di caricamento. Sto cercando di capire come l'ha fatto, se qualcuno ha la minima idea.

Quello che ho provato:

EZAudio - Questa libreria è grande, ma non fa quello che voglio. Non è possibile scorrere la forma d'onda. Elimina i dati della forma d'onda all'inizio e inizia ad aggiungerli alla fine quando raggiunge una certa lunghezza.

SCWaveformView - Questa forma d'onda è piacevole, ma utilizza le immagini. Una volta che la forma d'onda è troppo lunga, inserirla in una vista a scorrimento causa uno scrolling davvero nervoso. Inoltre, non è possibile creare la forma d'onda durante la registrazione, solo in seguito.

Per quanto riguarda l'aggiunta, ho utilizzato questo metodo: https://stackoverflow.com/a/11520553/1391672 Ma c'è un tempo di elaborazione significativo, anche quando si aggiungono due clip audio molto brevi insieme (nella mia esperienza).

In che modo i memo vocali fanno ciò che fa? Pensi che la forma d'onda sia disegnata in OpenGL o CoreGraphics? Stanno usando Core Audio o AVAudioRecorder? Qualcuno ha costruito qualcosa di simile che possa indicarmi la giusta direzione?

risposta

2

Quando ingrandita, una vista a scorrimento deve solo disegnare la piccola parte della forma d'onda che è visibile. Quando si rimpicciolisce, una vista grafico può solo disegnare ogni N ° punto del buffer audio, o usare un altro algoritmo di campionamento verso il basso DSP sui dati prima del rendering. È probabile che ciò avvenga utilizzando il proprio disegno personalizzato o codice di rendering grafico all'interno di un UIScrollView o di un controller personalizzato simile. Il codice di rendering della forma d'onda durante e dopo la registrazione non deve essere lo stesso.

L'API di registrazione e l'API di disegno utilizzate possono essere completamente indipendenti e possono essere praticamente qualsiasi cosa, da OpenGL a Metal a Core Graphics (su dispositivi più recenti più veloci). Sul lato audio, Core Audio contribuirà a fornire la latenza più bassa, ma potrebbero anche essere utili Code audio e AVAudioEngine.

+0

Grazie. Penso tu abbia ragione. Probabilmente dovrò implementare un qualche tipo di cache per i dati audio e disegnare solo ciò che è visibile sullo schermo. –

+0

@lusus_vir Mi chiedo se si ottiene un risultato simile altrettanto semplice quanto l'app per memo vocali? – alfonsodev

+0

Non è proprio come Memo vocali ma è piuttosto vicino. È decisamente abbastanza fluido per una prima versione dell'app. –

Problemi correlati