2010-01-22 2 views
2

Je veux faire une synthèse de son sous Mac OS X (et idéalement autres systèmes d'exploitation Unix) en utilisant la norme ANSI C.Quel est un moyen simple de produire un son synthétisé homebrewed sous Unix?

Ceci est pour des fins d'apprentissage plutôt que « je besoin d'une solution, une solution rapide! » Dites que j'ai un tampon de 8 bits dans mon programme C que je mets à jour 22050 fois par seconde. Comment puis-je obtenir mes haut-parleurs pour produire cela comme une forme d'onde?

+0

pas exactement ce que vous avez demandé, mais peut-être qu'il peut vous aider aussi: http://stackoverflow.com/questions/379353/what-is-a-lightweight-cross-platform-wav-playing-library/ – quinmars

+0

@ quinmars libao a l'air excellent et léger. S'il vous plaît le mettre comme une réponse afin que vous puissiez obtenir quelques points de rep. – xyz

+0

fait, mais je n'ai trouvé aucune référence que libao supporte OSX – quinmars

Répondre

1

Il n'y a pas d'API audio POSIX ou quelque chose de similaire. Donc, si vous voulez une prise en charge du son sous Linux, OSX, etc., vous avez besoin d'une bibliothèque qui entoure les API de son natives des différents systèmes d'exploitation. Jetez un oeil sur ce SO question. Ce n'est pas demander directement pour OSX, mais la plupart des réponses devraient aussi fonctionner, sauf peut-être libao. Au moins, je n'ai rien trouvé sur leur page d'accueil, qui dit qu'ils supportent OSX.

+0

libao-0.8.8 \ src \ plugins \ macosx :-) – xyz

+0

ok, bien alors :) – quinmars

+0

A accepté celui-ci car c'est un peu plus simple. Tout le monde sur OS X, si vous ne parvenez pas à initialiser le pilote avec une version compilée manuellement, installez-le en utilisant MacPorts – xyz

3

SDL peut lire des buffers de son. Mais PortAudio peut fonctionner mieux PA appellera votre callback C quand il a besoin de plus de données, et vous pouvez ensuite passer le tampon suivant. C'est assez facile en fait.

+2

+1 pour portaudio. Une sortie audio simple peut être écrite en moins de 20 lignes. Ouvrez un Output-Stream et écrivez-le .. Fait! –

+0

Ça a l'air bien! Merci – xyz

Questions connexes