2010-01-24 5 views
1

J'écris un programme multiplateforme qui consiste à faire défiler une forme d'onde avec la lecture audio wav/aiff non compressée. La faible latence et la précision sont très importantes. Quelle est la meilleure bibliothèque audio multiplateforme pour la lecture audio lors de la synchronisation avec une horloge externe? Je veux dire par là que j'aimerais pouvoir écrire le code de lecture de façon à ce qu'il envoie des événements à un auditeur plusieurs fois par seconde qui inclut le "cadre d'écoute" au moment de la notification. C'est tout ce que j'ai besoin de faire. Pas d'enregistrement, pas de mixage, pas d'audio en 3D, rien. Juste la lecture avec les meilleures notifications possibles de cadre d'audience disponibles.Meilleure bibliothèque audio multiplateforme pour la synchronisation de la lecture audio

En ce moment je considère RTAudio et PortAudio, principalement le premier car il utilise ALSA. Les plates-formes cibles, par ordre d'importance, sont Mac OSX 10.5/6, Ubuntu 10.11, Windows XP/7. C/C++ sont tous deux bien.

Merci pour votre aide!

Répondre

3

La bibliothèque multi-plateforme la plus performante pour cela est jack. Correctement configuré, Jack sur Linux peut surpasser Windows asio facilement (en termes de traitement à faible latence sans décrocheurs). Mais vous ne pouvez pas vous attendre à ce que les utilisateurs normaux utilisent jack (le démon doit être lancé par l'utilisateur avant le démarrage de l'application, et il peut être un peu difficile à configurer). Si vous faites une application spécifiquement pour pro-audio, je vous recommande fortement de regarder à la prise.

Edit:

Portaudio est pas aussi haute performance, mais est beaucoup plus simple pour l'utilisateur (pas de configuration particulière doit être nécessaire à leur fin, contrairement à la prise). La plupart des programmes audio cross plate-forme open source que j'ai utilisés utilisent portaudio (beaucoup plus que openal), mais contrairement à jack je ne l'ai pas utilisé personnellement. Il est basé sur le rappel, et semble assez simple cependant.

+1

Merci pour l'idée. Est-il possible de lier statiquement à une version redistribuable de jack? Sinon, je ne pense pas que ça marchera pour moi. Nous sommes très préoccupés par le déploiement facile. Je vais continuer à lire sur eux. –

+1

Pour la commodité d'enduser Portaudio est probablement votre meilleur pari, j'ai édité ma réponse pour refléter cela. –

+1

Je relis et je vois que vous utilisez déjà portaudio - si vous avez des problèmes de performance en affichant simplement une forme d'onde, je recommande de supprimer les fonctions non-rt-safe de votre callback et de les déplacer dans le thread principal. Les fonctions non-rt sont principalement: printf ou tout autre io aux fichiers ou aux sockets, tout ce qui attend sur une sémaphore, ou malloc. –

1

OpenAL peut-être une option pour vous.

+1

Bonjour Simon, Merci pour vos commentaires. J'ai regardé OpenAL mais je suis préoccupé par le fait qu'il n'est supporté que par les cartes créatives et que son avenir est incertain. Êtes-vous en désaccord ou y a-t-il des avantages supplémentaires pour OpenAL sur une bibliothèque multiplateforme qui enveloppe l'API audio native du système? Merci encore. –

+2

OpenAL est pris en charge sur beaucoup de cartes et plates-formes de l'iPhone à Linux à Windows à Mac OS X. Il a été initialement lancé par creative mais peut maintenant être considéré comme l'équivalent audio d'OpenGL et des autres standards Open *. En fait, OpenAL est l'API audio native de l'iPhone. – Cromulent

Questions connexes