Le pub des programmeurs
- 1 927 réponses
- 117 participants
- 131 746 vues
- 130 followers

Anonyme



J-Luc


10 min, c'est moins bon pour un pilotage automatique d'avion...
Il y a deux moyens d’oublier les tracas de la vie : la musique et les chats.
Albert Schweitzer

Anonyme

Désolé, j'arrive un peu comme ça comme de la pelouse sur la soupe, mais c'est juste que là on se galère comme des chiens.
Ca fait deux mois que mon père se leve vers 6h du mat avant d'aller bosser à sa boite, fait 4 Km, pour appuyer sur un bouton, parce qu'un pc à planté...
Donc voilà, ça rendrait bien bien service à une petite radio, pratiquement sans subventions...POur l'instant, on fait avec un programmateur récupéré pour synchroniser des réfrigérateurs....bref, on bricole, mais des fois, ça chie.
merçi.

Anonyme


Pov Gabou

Citation :
Ok. Ca devient interressant N'est ce pas le rôle du ring buffer justement ? D'un côté le thread traitement "fixe" écirt ses blocs dans le ring buffer et de l'autre le thread traitement flottant prend ce dont il a besoin dans le ring buffer. A voir.
J'ai profite d'une conf en japonais a laquelle je comprenais rien pour programmer un petit exemple utilisant les ring buffer, et en fait, c'est relativement simple, il faut juste faire attention a la bonne initialisation. Bref, j'ai programme un petit script python avec une classe Engine qui modelise le moteur audio, et qui file des buffer de taille variable, une classe qui modelise l'algo dsp qui marche sur une taille fixe, et une classe Plugin qui fait le boulot entre les deux pour adapter taille variable -> taille fixe. J'ai suppose que la partie DSP generait des blocs de meme taille que les blocs en entree, ce qui est quand meme le cas le plus courant je pense.
Si ca interesse d'autres qui comme moi ne sont pas au fait de ce genre de conneries, je peux mettre le script dispo sur le net... Comme c'est du python, ca devrait marcher aussi sous windows ou mac, et ca fait une centaine de lignes a tout casser (sans inclure la classe ring buffer, qui a ete le plus chiant a faire finalement).
N:empeche, en tres peu de temps, j'ai reussi a faire un truc en python que j'ai jamais reussi a faire en C. C'est classe, python

Je me dis que ce serait sympa d'arriver a faire un petit prototype sous jack qui implemente un algo trivial, mais de taille fixe (ca doit pouvoir se generaliser a d'autres trucs trivialement, style VST, etc... CoreAUdio, je connais pas, mais ca doit fonctionner pareil a ce niveau la, je pense).

Pov Gabou


Rémy M. (chimimic)


Romain,
je pourrai te bricoler un petit soft qui permet de lancer une appli en cas d'absence audio prolongée (genre app gerant une play-list), mais patiente jusqu'à aout. Je viens de déménager et n'ai pas encore fini de m'installer.
Formateur en techniques sonores ; électronicien ; auteur @ sonelec-musique.com

zieQ

Edit: et en fin de thèse télécom/3D

Anonyme


miles1981

Audio Toolkit: http://www.audio-tk.com/

Wolfen


Développeur de Musical Entropy | Nouveau plug-in freeware, The Great Escape | Soundcloud

J-Luc

https://en.wikipedia.org/wiki/Circular_buffer
Très utilisé aussi dans l'industrie dans les process d'assemblage (on suit les produits dans une machine à l'aide d'un buffer circulaire de structures).
Il y a deux moyens d’oublier les tracas de la vie : la musique et les chats.
Albert Schweitzer

Pov Gabou

http://www.ar.media.kyoto-u.ac.jp/members/david/ring.zip
Si t'as jamais utilise python, tu peux installer la version (windows): https://www.python.org/ftp/python/2.4.3/python-2.4.3.msi
Il y a deux fichiers: ringbuff.py qui implemente une classe ring buffer, que tu peux oublier au depart (l'implementation suit le truc de base explique sur wikipedia avec les puissances de 2), et le fichier fakeengine.py qui a 3 classes, en gros:
- BlockAlg: une classe toute con qui ne peut calculer que n samples en entree et ressort n samples en sortie, avec n fixe.
- Plugin: une classe un peu moins con, qui utilise BlockAlg pour faire le calcul, mais dont la function process peut prendre un nombre n de samples variables entre chaque appel (exactement comme la fonction process de VST, par exemple, avec la variable nframes). C'est elle qui fait l'adaptation nombre variables de sample / nombre fixe pour BlockAlg.
- Engine: modelise le moteur audio, cad ici ne fait qu'instancier un plugin, et fournit a un objet plugin des blocs de taille variable.
Je crois que la latence est gardee au minimum donnee les contraintes (taille fixe pour l'algo, taille maximale d'un bloc de la part du moteur audio).
La classe BlockAlg ne fait rien (je multiplie l'entree par -1 pour facilement regarder les eventuels pbs d'alignement avec en entree la suite 0, 1, 2....). par contre, il y a besoin de modifications si l'algo ne sort pas le meme nombre de sampels qu'en entree.
J'exige 10 % des parts pour le premier produit torpedo


Wolfen


Développeur de Musical Entropy | Nouveau plug-in freeware, The Great Escape | Soundcloud

Pov Gabou

La, je suis en train de decouvrir ctypes, qui permet d'ecrire des wrapper de librairies C entierement ecrits en python. Quand tu vois la merde pour ecrire des extensions C sous matlab, c'est quand meme plus sympathique.

Wolfen


Développeur de Musical Entropy | Nouveau plug-in freeware, The Great Escape | Soundcloud

zieQ


Pov Gabou


zieQ


Pov Gabou

Mais pour le moteur audio lui meme, c'est pas propre a VST. Si tu programmes correctement, le moteur audio est totalement separe de la GUI, et idealement des specs VST. Et la, pour tout ce qui est dsp, tu peux le faire sous python. Typiquement, tu veux tester un filtre, verifier sa reponse frequentielle graphiquement, en C, ca peut etre penible. Sous python, c'est trivial.
J'avais commence a m'interesser a la prog avec l'audio il y a maintenant 4-5 ans, et evidemment, vu mon niveau a l'epoque, je savais rien faire, et tester un truc comme un ring buffer + conditions aux bords en C... La, en python, ca a ete fait en une heure a tout casser, avec 150 lignes de code.
Je suis bien conscient du buzz autour des langages dits dynamiques, mais je trouve que pour python, c'est assez bien merite, car il y a un bon compromis syntaxe claire / syntaxe puissante / bonne librairie standard / facilite d'extension a partir de langages compiles / bien supporte. Perso, je m'y suis interesse pour faire un truc un peu trop complexe pour awk/sed, puis apres j'en ai profite pour me mettre a numpy/scipy (https://www.scipy.org/), et je trouve que c'est super efficace pour pas mal de taches.

Dr Pouet

Python est également réputé pour ses bonnes capacités d'interfaçage avec le C et C++. C'est d'ailleurs sûrement l'une des raisons qui lui ont permis de grignoter Perl, lequel est moins bien (je trouve que le coup de l'indentation en Python est un super choix) mais arrivé avant (et donc initialement beaucoup plus populaire)...

Anonyme

Bon je vais casser un peu la conversation désolé


Dr Pouet


Anonyme

Citation : je trouve que le coup de l'indentation en Python est un super choix
oue mais du coup finis les joie du code C sur une ligne incompréhensible....


Pov Gabou

Citation :
Clair que une fois que tu as goûté à Perl ou Python, tu te sers plus de awk sed et autres shell scripts...
Au depart, je me disais que c'etait plus portable d'utiliser awk ou sed, parce que c'est present partout... Puis j'ai realise que sous windows, bof bof. En fait, python est utilise par de plus en plus d'admin sous windows en remplacement de cmd.exe qui faut bien l'avouer, est une vraie merde.
Citation :
C'est d'ailleurs sûrement l'une des raisons qui lui ont permis de grignoter Perl, lequel est moins bien (je trouve que le coup de l'indentation en Python est un super choix) mais arrivé avant (et donc initialement beaucoup plus populaire)...
Je connais pas vraiment perl, j'ai du faire quelques lignes de programme, difficile de juger. Je supporte pas la syntaxe au premier abord en tout cas. Python, j'ai maintenant programme des trucs de l'ordre du millier de lignes, suffisant pour voir un peu les capacites.
Deja, il y a l'interpreteur ipython, qui rend les choses vraiment sympa, car il utilise pas mal les capacites d'introspection du langage:
- help fonction -> tu as la docstring (docstring, c'est la premiere chaine de charactere suivant la declaration d'une fonction, qui permet la documentation automatique du code).
- completion de commande
- coloration, gestion du graphique
- interface avec le shell systeme (ie bash sous linux ou OS X, cmd sous windows j'imagine)
http://ipython.scipy.org/screenshots/index.html
Pour l'interfacage avec le C, il y a enormement de possibilites:
- l'API python: un peu chaud a cause de la gestion du reference counting
- SWIG
- boost-python: assez baleze, il utilise les trucs imbitables du C++ "moderne" avec template pour generer automatiquement les modules python
- pyrex: langage entre le C et python, qui permet de generer ensuite du C. C'est assez pratique
- ctypes: le plus recent. La, c'est carrement genial, car tu ecris tout le wrapper en python directement. Par exemple, dans mon cas, je veux souvent ecrire des fonctions C qui prennent en argument des vecteurs, matrices, etc... Par exemple, une fonction double sum(const double*, size_t ndim, const size_t* dim) definie dans une librairie libfoo.so.
Sous python + ctypes, ca donne:
from ctypes import cdll, c_double, c_uint, POINTER
_foo = cdll.LoadLibrary('libfoo.so')
def sum(data):
_foo.sum(data.ctypes.as_data(POINTER(c_double)), data.ndim, data.shape.ctypes.as_data(POINTER(c_double)))
Aucune compilation a faire, 4 lignes, et tu as wrappe une fonction qui prend des tableaux en arguments ! Et si les arguments sont pas bon, gestion par exception. Quand tu vois la merde pour faire la meme chose sous matlab (en gros, il faut au moins 40 lignes de code en C, dont les 3/4 pour la gestion d'erreur).

Pov Gabou

Citation :
Je connais bien ces problèmes avec les VSTs mais il n'existe pas vraiment d'alternative non plus. Du coup, le fait de prototyper en python vient de perdre beaucoup d'intérêt d'un coup
Il y a par contre un wrapper pour ladspa (utilisant gstreamer), qui permet donc de tester le moteur audio au moins.
Je viens juste de tester le truc pour un de mes projets, et si tu as un plugin ladspa, il suffit de faire:
gst-launch-0.10 filesrc location=/home/david/Desktop/lux_club_house_mix_2.mp3 ! mad ! audioconvert ! ladspa-delay-5s ! audioconvert ! alsasink
pour tester ton plug de delay sur un mp3 !
- < Liste des sujets
- Charte