Outil (ligne de commande) pour enregistrement audio

Bonjour,

Comme je ne comprenais pas grand chose au son sous Linux en particulier, et avec alsa, wasapi, pulse SDL2 et compagnie, j’ai décidé de prendre le taureau par les cornes et de tester (voir: https://framagit.org/ericb/audiorecord )

Alors, à force de tâtonner, j’ai un peu progressé, et j’ai créé une petite application (à compiler soi-même) qui permet d’enregistrer le son venant d’une webcam ( hw:1,0 d’après pulseaudio).

Important : je viens de tester … si vous voulez enregistrer la musique que vous êtes en train d’écouter, vous pouvez changer hw:1,0 par default dans le code pour le périphérique d’entrée:

Soit, dans alsa_record.cpp, la ligne

ar.set_sound_device("hw:1,0");

devient:

ar.set_sound_device("default");

Et vous pouvez enregistrer le bureau :slightly_smiling_face:

Tout est là (avec quelques explications) : https://github.com/ebachard/Linux_Alsa_Audio_Record

En fait, je n’ai pas encore terminé, mais ça fonctionne plutôt bien.

Merci d’avance si je pouvais avoir quelques retours :slight_smile:

1 « J'aime »

[mise à jour]

Bon, je n’ai pas eu de retour du tout, mais comme tout le monde s’en doutait, un outil en ligne de commande, c’est super facile à intégrer. Alors j’ai intégré (pour tests) alsa_recorder dans miniDart (voir les diff sur framagit) et l’enregistrement SON et IMAGE fonctionne. Attention : quand j’enregistre, je n’ai pour l’instant qu’un .mp4 avec les images et un .wav avec le son, mais on doit pouvoir les assembler avec ffmpeg pour vérifier qu’ils sont synchronisés, J’ajoute que la charge est de moins de 50% sur un coeur pendant l’enregistrement et c’est plutôt bien sans aucune optimisation. Côté mémoire, 2s de son en mémoire, ça doit ne pas gêner beaucoup :wink:

Il me reste encore pas mal de travail, car je dois attraper les deux flux et les multiplexer pour obtenir une vidéo finale synchronisée, mais c’est passionnant, et je mets les bouchées doubles pour y arriver rapidement.

Rappel : si j’arrive au bout, j’aurai créé mon propre logiciel qui permet de m’enregistrer pour mettre des courtes séquences de cours / exercices en ligne. Le tout sans aucune aide.

Enfin, j’ai peut-être trouvé encore mieux pour l’enregistrement, car je passe cette fois par SDL et la portabilité est quasi automatique pour Windows. Mais elle me semble bien buggée cette lib avec le son :-/

J’ajoute que j’ai mis à jour (je vais compléter prochainement si j’ai oublié quelque chose) pour compiler le logiciel sous Linux. Je suis parti d’une Linuxmint cinnamon 20.x et ça fonctionne plutôt très bien.

J’ai aussi mis en ligne la version Windows, mais je vais en mettre une nouvelle bientôt car j’ai -entre temps- corrigé un bug merd… avec l’antialiasing des polices (dû au HiDPI, qui nous empoisonne un peu, car ça devient difficile de passer d’une machine à l’autre facilement).

Merci d’avance pour toute aide.

Salut,

Ravi de savoir que tu t’amuses bien :slight_smile: et te voir te débrouiller comme ça tout seul, ça fait plaisir également :slight_smile:

J’ai regardé un peu ton code. A première vue, c’est plutôt propre. Juste un truc: peut-être penser à paramétriser le nom du device au lieu de le coder en dur dans ton code. Donc, le mieux serait d’en faire un argument à ta commande. Et si tu veux faire ça proprement également, il faudrait que tu regardes sur des outils plutôt standard. Genre getopt ou argp

Merci pour les compliments :slight_smile:

En fait, le code n’est pas propre, encore, car je dois le factoriser. En particulier, je dois mettre en oeuvre la classe Application, qui va « cacher » toutes les variables et fonctions « statiques » qu’on trouve un peu partout dans le programme principal, mais je le ferai peut-être après la 1.0, car c’est beaucoup de travail. Et pour l’instant, je préfère ajouter des fonctionnalités.

EDIT : Important : je parle de miniDart ici, plus de Linux Alsa Audio Recorder, qui n’était qu’une preuve de concept.

Il me manque encore plusieurs choses, mais c’est déjà très très utilisable. Je pense même dériver le logiciel en plein de petits logiciels différents. Par exemple, en physique, on peut enregistrer une expérience, et la revoir au ralenti (je permets de 5 à 60 images par seconde, onglet Atelier Analyse ). Je fais ça pour visualiser le mouvement apparent d’une corde tendue qui vibre, excitée par un haut parleur (oscillations forcées) mais aussi pour une cuve à onde etc.

Dès que je pourrai faire ce que je veux du son « capté », je dois ajouter de quoi dessiner en temps réel (oscilloscope !) et même de la FFT, donc ce n’est vraiment pas terminé !

Maintenant, pour te répondre, le périphérique codé en dur, c’est du hack car l’enregistrement ne fonctionne BIEN que depuis hier ! (note : j’ai mis un FIXME dans le code pour pas oublier de corriger).

LA difficulté, c’est d’utiliser en même temps les images (via v4l2 + OpenCV) et le son (via alsa + pulseaudio) venant du même périphérique SANS que celui-ci parte en vrille. Apparemment, c’est possible :slight_smile:

En réalité, le système découvre tout seul ce qui est branché, et les noms sont bien écrits, et le périphérique est bien celui que l’on veut: on le sélectionne, et ça fonctionne. C’est plus simple :wink:

=> j’ai créé une page de wiki pour illustrer ce que je raconte: Enregistrement

Et si cela t’intéresse, j’ai aussi écrit un canvas -basique- (en C++) et il y aura 8 billets sur developpez.com sur le sujet (je crois que l’article 1 est en ligne en actualité dans les publications)

À ceux qui lisent: il faut savoir ce que l’on fait pour tester ce logiciel, car il est en développement et surtout il ne faut pas oublier de faire des sauvegardes des vidéos qu’on lit avec. Vous l’utilisez à vos risques et périls !

Bonjour,
félicitations pour la création de votre logiciel alors ! j’avoue ne pas avoir tout compris les termes techniques, mais c’est génial que vous ayez pu aboutir.

Which operating system you are using? if it is Linux, ubuntu then it is easy to do other wise take help from another resource.

Hello,

Well, I’m using Linux indeed, but I’d like to provide the equivalent under windows (cross compilation, using mingw)

I know there are a lot of solutions on Linux, but my need was to integrate the feature in my software.

As I wrote, I provide the code, and it is very easely reusable in any other project. As you probably understood, this current tool is just a proof of concept.

To tell you more, I know how to :

  • capture images from any source / stream : miniDart can record images from webcam, rtsp stream (french TV e.g. ) any video or even from a smartphone, through Droidcam )

-the sound was missing, so I’m working at capture it from several sources and I did it, but some features are still missing :

  • wav currently => convert into .mp3 or .aac is still missing
  • last but not least, I’m missing a muxer,to turn images + sound into final .mp4

To my knowledge, there is no such fre code doing that today on Linux, and portable for Windows users.

Last but not least, I’m able to cpature thermal images, and record them (~ 15 fps)

See : IR termography

Bonjour,

Merci pour les encouragements. Il me manque encore plusieurs choses, mais je ne désespère pas d’y arriver pendant l’été 2021 :

L’idée principale, c’est de fournir du code pour celle ou celui qui voudrait s’enregistrer (juste le son). C’est la raison pour laquelle je n’ai PAS mis d’UI, comme ça ne force pas Qt ou GTK ou quoi que ce soit : ca marche en ligne de commande, avec un simple appui sur une touche pour arrêter. Et le code est sous licence permissive, pour autoriser une réutilisation facile dans un autre projet.

  • enregistrer directement en .aac ou .mp3

  • écrire le muxer qui permettrait d’associer les images et le son venant de n’importe quelle source : vidéo, flux rtsp (image de TV avec la freebox par exemple), images captées par un smartphone (via DroidCam).

C’est le son qui pose problème : alsa, ça semble bien fonctionner, mais j’aimerais l’encapsuler dans SDL2 pour la portabilité, et je suis coincé depuis quelques temps avec Alsa (mais j’ai peut être compris ce qui ne va pas, le problème : je suis noyé dans les corrections de copies, et je n’ai pas le temps avant l’été).

Actuelllement, je sais enregistrer (synchrone) le son et l’image, mais je dois les assembler pour former un .mkv à la fin.

À suivre :slight_smile:

Bravo !
Mais c’est tout ce que je te dirai en tant que créatrice et membre de la #TeamJePigeRienMaisJaimeBien :wink: :slightly_smiling_face:

1 « J'aime »