In questo caso, quale file audio/formato dovrei usare? Posso usare i file .avi?
È possibile scegliere un formato compresso o non compresso. I formati comuni non compressi includono Wav e AIFF. CAF può rappresentare dati compressi e non compressi. .avi non è un'opzione (offerta dal sistema operativo).
Se i file sono grandi e lo spazio di archiviazione (su disco) è un problema, è possibile considerare il formato AAC salvato in un CAF (o semplicemente .m4a).Per la maggior parte delle applicazioni, i campioni a 16 bit saranno sufficienti e si può anche risparmiare spazio, memoria e CPU salvando questi file ad una frequenza di campionamento appropriata (rif: i CD sono 44.1kHz).
Poiché l'interfaccia ExtAudioFile estrae il processo di conversione, non è necessario modificare il programma per confrontare le dimensioni e le differenze di velocità dei formati compressi e non compressi per la distribuzione (AAC in CAF andrebbe bene per le normali applicazioni).
L'audio di qualità CD non compresso consuma circa 5,3 MB al minuto, per canale. Pertanto, se si dispone di 2 file audio stereo, ciascuno di 3 minuti e un buffer di destinazione di 3 minuti, i requisiti di memoria saranno di circa 50 MB.
Poiché si dispone di "minuti" di audio, potrebbe essere necessario evitare di caricare tutti i dati audio in memoria contemporaneamente. Per leggere, manipolare e combinare l'audio, avrete bisogno di una rappresentazione non compressa con cui lavorare in memoria, quindi i formati di compressione non sono d'aiuto. Inoltre, la conversione di una rappresentazione compressa in pcm richiede una buona quantità di risorse; la lettura di un file compresso, sebbene con meno byte, può richiedere più (o meno) tempo.
Come aggiungere il secondo audio dopo l'ora dinamica impostata sul primo file audio a livello di programmazione? Ad esempio: se il primo tempo totale dell'audio è di 2 minuti, potrebbe essere necessario mixare il secondo file audio (audio di 3 secondi) da qualche parte in 1 minuto o 1,5 minuti o 55 secondi del primo file. La sua dinamica.
per leggere i file e convertirli nel formato che si desidera utilizzare, utilizzare le API ExtAudioFile - questo convertirà nel formato campione destinazione per voi. Le comuni rappresentazioni campione PCM in memoria includono SInt32
, SInt16
e float
, ma possono variare in modo selvaggio in base all'applicazione e all'hardware (oltre a iOS). Le API ExtAudioFile converte anche i formati compressi in PCM, se necessario.
I file audio di input devono avere la stessa frequenza di campionamento. In caso contrario, sarà necessario ricampionare l'audio, un processo complesso che richiede anche molte risorse (se eseguite correttamente/accuratamente). Se devi supportare il ricampionamento, raddoppia il tempo che hai assegnato per completare questa attività (non descrivendo qui il processo).
Per aggiungere i suoni, è necessario richiedere campioni PCM dai file, elaborare e scrivere sul file di output (o buffer in memoria).
Per determinare quando aggiungere gli altri suoni, è necessario ottenere le frequenze di campionamento per i file di input (tramite ExtAudioFileGetProperty). Se vuoi scrivere il secondo suono nel buffer di destinazione a 55 secondi, inizi ad aggiungere i suoni al numero di campione SampleRate * 55
, dove SampleRate
è la frequenza di campionamento dei file che stai leggendo.
Per miscelare l'audio, sarà solo utilizzare questo modulo (pseudocodice):
mixed[i] = fileA[i] + fileB[i];
ma bisogna essere sicuri di evitare un eccesso/underflow e altri errori aritmetici. In genere, si esegue questo processo utilizzando un valore intero, poiché i calcoli in virgola mobile possono richiedere molto tempo (quando ce ne sono così tanti). Per alcune applicazioni, puoi semplicemente spostare e aggiungere senza preoccuparti di un overflow: questo ridurrebbe in modo efficace ogni input di una metà prima di aggiungerli. L'ampiezza del risultato sarebbe la metà. Se hai il controllo sul contenuto dei file (ad es. Sono tutti raggruppati come risorse), puoi semplicemente assicurarti che nessun campione di picco nei file superi la metà del valore di fondo scala (circa -6dBFS). Ovviamente, il salvataggio come float risolverebbe questo problema a scapito dell'introduzione di richieste di I/o di CPU, memoria e file più elevate.
A questo punto, avresti 2 file aperti per la lettura e uno aperto per la scrittura, quindi alcuni piccoli buffer temporanei per l'elaborazione e il missaggio degli input prima di scrivere nel file di output. È necessario eseguire queste richieste in blocchi per l'efficienza (ad esempio, leggere 1024 campioni da ciascun file, elaborare i campioni, scrivere 1024 campioni). Le API non garantiscono molto per quanto riguarda la memorizzazione nella cache e il buffering per l'efficienza.
Come salvare il file audio di output finale sul dispositivo? Se salvi il file audio in modo programmatico da qualche parte, posso riprodurre di nuovo?
Le API ExtAudioFile potrebbero funzionare per le tue esigenze di lettura e scrittura. Sì, puoi leggerlo/riprodurlo più tardi.
no non è possibile salvarlo come .avi perché un avi è solo un contenitore (e può contenere video pure). Non sono sicuro di cosa devi usare sul dispositivo iOS, ma suppongo che dovrai scrivere un documento wav (in altre parole, picchi/onde audio puri). Per combinare quelli hai bisogno di una conoscenza avanzata di lavorare con l'audio che non ho. E quindi non sono in grado di dire qualcosa di informativo a riguardo. –
http://developer.apple.com/library/ios/#codinghowtos/AudioAndVideo/_index.html –