#1 Le 15/11/2008, à 19:41
- mathben
[Résolu]python capteur micro GStreamer
Bonjour, je cherche comment faire pour enregistrer sur le périphérique du micro.
J'ai trouvé une bibliothèque qui se nomme GStreamer, mais je ne vois nulle part une façon pour lui demander ce que je veux :s
Quelqu'un aurait une piste ou une solution?
Merci!
Dernière modification par mathben (Le 17/11/2008, à 15:04)
Ubuntu 9.10 Karmic Koala AMD64 ][ Portable Acer Aspire 9300
Hors ligne
#2 Le 15/11/2008, à 20:50
- Link31
Re : [Résolu]python capteur micro GStreamer
Tu peux faire ça très simplement. Un exemple en shell :
cat /dev/dsp > fichier # enregistrement
cat fichier > /dev/dsp # lecture
Je ne connais pas assez Python pour te donner un exemple équivalent, mais le principe est le même. /dev/dsp donne en lecture les données du microphone, et permet en écriture de renvoyer ces données dans les hauts-parleurs.
Le format du fichier ainsi obtenu est assez particulier, c'est en gros un format RAW (sans en-tête) avec un bitrate particulier... il ne sera pas lisible par la plupart des lecteurs multimédia. Il ne sera peut-être même pas lisible sur une autre machine (je n'ai jamais vérifié).
L'avantage, c'est que tu n'as besoin d'aucune bibliothèque, tu as juste à lire ou à écrire un fichier.
Hors ligne
#3 Le 15/11/2008, à 21:09
- mathben
Re : [Résolu]python capteur micro GStreamer
mathben@mathbentu:~$ cat /dev/dsp > ./testMicro
^C
mathben@mathbentu:~$ cat ./testMicro > /dev/dsp
bash: /dev/dsp: Device or resource busy
Ça ne semble pas très bien fonctionner lorsque je suis rendu à la lecture, j'essaie sinon avec des applications et ça ne semble pas fonctionner
J'ai aussi essayer avec vlc...
Ubuntu 9.10 Karmic Koala AMD64 ][ Portable Acer Aspire 9300
Hors ligne
#4 Le 15/11/2008, à 21:22
- Link31
Re : [Résolu]python capteur micro GStreamer
bash: /dev/dsp: Device or resource busy
Ça signifie qu'il y a déjà un programme qui utilise le périphérique. Si tu as un lecteur multimédia ouvert, il suffit de le fermer. Sinon, il est possible que l'utilisation de pulseaudio dans les dernières versions d'Ubuntu pose problème... On trouve pas mal de doc à ce sujet. Regarde aussi le résultat de sudo lsof /dev/dsp
C'est malheureusement une vieille limitation d'OSS (l'ancien système de son qui gère /dev/dsp).
Hors ligne
#5 Le 15/11/2008, à 23:03
- mathben
Re : [Résolu]python capteur micro GStreamer
Puis, est-ce que quelqu'un saurait comment faire avec une Pipe? Je n'ai pas trouvé :s
Ubuntu 9.10 Karmic Koala AMD64 ][ Portable Acer Aspire 9300
Hors ligne
#6 Le 15/11/2008, à 23:55
- human enemy
Re : [Résolu]python capteur micro GStreamer
mathben,
Je ne sais pas exactement ce que tu veux faire mais je vais essayer de t'aider un peu.
Bonjour, je cherche comment faire pour enregistrer sur le périphérique du micro.
Un pipe au sens de gstreamer, c'est une chaine d'opérations (lecture/capture/encodage etc...)
ici la doc de pygst -> http://pygstdocs.berlios.de/
ci-dessous un des exemples disponibles dans la doc modifié pour ton besoin :
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys, os
import pygtk, gtk, gobject
import pygst
pygst.require("0.10")
import gst
class GTK_Main:
def __init__(self):
window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.set_title("Enregistreur")
window.set_default_size(300, -1)
window.connect("destroy", gtk.main_quit, "WM destroy")
vbox = gtk.VBox()
window.add(vbox)
self.button = gtk.Button("Stop")
self.button.connect("clicked", self.stop)
vbox.add(self.button)
window.show_all()
'''Initialisation du pipe'''
PIPELINE = "pulsesrc ! audioconvert ! vorbisenc ! oggmux ! filesink name=sortie"
FICHIER = os.path.join(os.path.expanduser("~"),"toto.ogg")
self.pipeline = gst.parse_launch(PIPELINE)
self.filesink = self.pipeline.get_by_name("sortie")
self.filesink.set_property("location", FICHIER)
self.bus = self.pipeline.get_bus()
self.bus.add_signal_watch()
self.bus.connect( 'message', self.onSendMessage )
self.pipeline.set_state(gst.STATE_PLAYING)
def onSendMessage(self, bus, message):
t = message.type
if t == gst.MESSAGE_ERROR:
self.pipeline.set_state(gst.STATE_NULL)
err, debug = message.parse_error()
print "Error: %s" % err, debug
def stop(self, w):
self.pipeline.set_state(gst.STATE_NULL)
gtk.main_quit()
GTK_Main()
gtk.gdk.threads_init()
gtk.main()
explication du pipe : pulsesrc ! audioconvert ! vorbisenc ! oggmux ! filesink name=sortie
je prends la source pulsesrc (= source pulseaudio) : la sortie de cet élément est de l'audio en RAW
je fais les ajustements de format RAW : audioconvert (car il y a RAW et RAW)
j'encode : vorbisenc
je mux l'audio : oggmux
j'envoie le tout dans un fichier : filesink
A toi d'inventer la suite ...
Dernière modification par human enemy (Le 15/11/2008, à 23:57)
<linux user>463160</linux user>
str = g_strdup_printf ("ubuntu user : %d",20328);
Hors ligne
#7 Le 16/11/2008, à 00:09
- human enemy
Re : [Résolu]python capteur micro GStreamer
c'est beau non ?
En 50 lignes tu obtiens une petite GUI GTK avec bouton d'arrêt tu enregistres et encodes n'importe lequel de tes micros (comme j'ai mis pulsesrc tu peux choisir l'entrée par défaut en 2 clicks via l'applet pulseaudio)
C'est toute la puissance de python et de gstreamer. Les 2 sont installés par défaut dans presque toutes les distro.
Dernière modification par human enemy (Le 16/11/2008, à 00:29)
<linux user>463160</linux user>
str = g_strdup_printf ("ubuntu user : %d",20328);
Hors ligne
#8 Le 17/11/2008, à 15:03
- mathben
Re : [Résolu]python capteur micro GStreamer
Wow, c'est en plein ce que je cherchais
Merci, je manquais juste un peu de documentation et de connaissance à propos de GStreamer...
Ubuntu 9.10 Karmic Koala AMD64 ][ Portable Acer Aspire 9300
Hors ligne
#9 Le 19/11/2013, à 19:57
- phil80
Re : [Résolu]python capteur micro GStreamer
Bonsoir, je souhaiterai créer un programme sur python pour analyser la fréquence d'un son capté par mon micro en temps réel, ce programme permettrai d'analyser et d'afficher la fréquence du son par une variable en temps réel.
J'ai quelques notions de débutant sur python mais ça s' arrête la, pourriez-vous m'aider ?
Hors ligne