Domanda

Voglio riprodurre un mp3 piuttosto che un file non compresso utilizzando RemoteIO / AudioUnit. Utilizzo di file non compressi utilizza, ovviamente, spazio su disco troppo (30MB vs 3 MB per MP3).

Questo è anche possibile? Se è così, si può fornire un po 'di codice vantaggio iniziale?

Un milione di Grazie.

È stato utile?

Soluzione

Sì, è possibile. Ma richiede l'uso di API audio multiple e le discussioni più.

A causa dei vincoli di tempo reale del filo buffer di callback Audio Unit, si avrà fare la conversione di file compressi a campioni PCM prime al di fuori della richiamata Audio Unit. Si potrebbe utilizzare esteso File Services o AVAssetReader audio per eseguire la conversione a campioni non compressi al di fuori della richiamata Audio Unit. Tuttavia, non è necessario decomprimere l'intero file in una sola volta. Una breve tampone non compresso di una frazione di secondo probabilmente fare, fino a quando si mantiene il riempimento di gran lunga abbastanza avanti del tasso di consumo del tampone di callback Audio Unit. Questo può essere fatto in un filo guidato timer separato che controlla consumo del tampone, e decomprime appena sufficiente audio conseguenza, forse in un buffer FIFO anello o circolare.

Cosa si finirà con sarà simile a una riscrittura dello strato di API Audio coda, ma con più possibilità di personalizzazione.

Altri suggerimenti

Come basso livello vuoi andare? È possibile utilizzare l'API AudioHardware:

err = AudioDeviceAddIOProc(deviceID, ioProc, self);

e nella tua IOProc riempire i buffer da soli, ascoltare modifiche hardware, e affrontare in tempo reale threading e un sacco di altre cose di basso livello.

sto supponendo che si sta già decodificare i file MP3 a AudioConverter e sapere come fare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top