Question

Je veux lire un mp3 plutôt que d'un fichier non compressé en utilisant RemoteIO / AudioUnit. L'utilisation de fichiers non compressés utilise évidemment beaucoup trop d'espace disque (30 Mo vs 3 Mo MP3).

Est-ce même possible? Si oui, pouvez-vous fournir un peu de code Headstart?

Merci un million.

Était-ce utile?

La solution

Oui, il est possible. Mais il faut utiliser plusieurs API audio et plusieurs threads.

En raison des contraintes en temps réel du fil de rappel tampon Audio Unit, vous devrez faire la conversion des fichiers compressés à des échantillons PCM brut en dehors du rappel Audio Unit. Vous pouvez utiliser les services de fichiers audio ou Extended AVAssetReader pour effectuer la conversion des échantillons non compressés en dehors du rappel Audio Unit. Cependant, vous ne avez pas besoin de décompresser le fichier entier à la fois. Un tampon court non compressé d'une fraction de seconde fera probablement, aussi longtemps que vous gardez le remplir suffisamment en avance sur le taux de consommation de tampon de rappel Audio Unit. Cela peut être fait dans une minuterie séparée fil qui conduit surveille la consommation de la mémoire tampon, et décompresse audio juste assez en conséquence, peut-être dans un tampon circulaire ou FIFO circulaire.

Ce que vous finirez avec sera semblable à une réécriture de la couche API File d'attente audio, mais avec plus customizability.

Autres conseils

Comment bas niveau ne voulez-vous aller? Vous pouvez utiliser l'API AudioHardware:

err = AudioDeviceAddIOProc(deviceID, ioProc, self);

et dans votre ioProc remplir les tampons vous, écoutez les modifications matérielles, et de traiter avec filetage en temps réel et beaucoup d'autres choses de bas niveau.

Je suppose que vous êtes déjà décoder les données mp3 avec AudioConverter et de savoir comment faire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top