IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Entendre le son du microphone


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Points : 413
    Points
    413
    Par défaut Entendre le son du microphone
    Bonjour,

    J'ai écrit un module dont le but est de reproduire une sorte de Skype, une vidéoconférence quoi avec des classes permettant cela. Pour l'instant j'ai à peu près réussi pour la vidéo (c'est relativement simple comparé au son, il suffit de transférer des images les unes à la suite des autres) mais reste le problème du son.
    J'ai installé pyaudio mais je ne connais rien, je sais juste faire un fichier audio mais ça ne va pas le faire pour transférer du son en direct. J'ai donc trouvé une solution théorique mais je ne sais pas si c'est envisageable avec cette lib (je peux toujours en télécharger une autre, sous Python 3 de préférence) :
    récupérer de manière directe ou indirecte la sortie du micro et la découper en petites unités d'un millier d'octets tout au plus et les envoyer puis les décoder.
    Est-ce envisageable ? si oui comment ?

    Merci d'avance de vos réponses.

    EDIT : rien à voir avec le son mais c'est une autre partie de mon programme qui pose problème, je dois envoyer des données dans leur intégralité (presque un million d'octets) mais le problème c'est qu'à l'autre bout j'ai une très grande partie des données de perdues, au bout de quelques secondes de vidéo, j'ai de moins en moins d'octets et ça finit par me lever une exception pas Pythonesque, pourtant j'ai fait ce qu'il faut pour réceptionner (socket.recv(999999)) et j'ai mis sendall, savez-vous comment je peux résoudre le problème ?
    Bouddha : Tout n'est qu'illusion en ce bas monde.
    Jésus : Tout est amour divin.
    Einstein : Tout est relatif dans cet espace-temps.
    Moi : Tout est binaire sur ce forum.

  2. #2
    Membre averti
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Points : 413
    Points
    413
    Par défaut
    Je me donne déjà un début de réponse par ce code trouvé sur le net pour enregistrer le flux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    import pyaudio
    import wave
     
    CHUNK = 1024
    FORMAT = pyaudio.paInt16
    CHANNELS = 2
    RATE = 44100
    RECORD_SECONDS = 5
    WAVE_OUTPUT_FILENAME = "output.wav"
     
    p = pyaudio.PyAudio()
     
    stream = p.open(format=FORMAT,
                    channels=CHANNELS,
                    rate=RATE,
                    input=True,
                    frames_per_buffer=CHUNK)
     
    print("* recording")
     
    frames = []
     
    for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
        data = stream.read(CHUNK)#peut-être un nombre d'octets par frame, ah non en fait la véritable valeur est de 4096 octets
        frames.append(data)
     
    print("* done recording")
     
    stream.stop_stream()
    stream.close()
    p.terminate()
     
    #frames : liste des frames audio, on va envoyer frame par frame dans le projet final
     
    #plus qu'à trouver le moyen de lire tout ça
     
    wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
    wf.setnchannels(CHANNELS)
    wf.setsampwidth(p.get_sample_size(FORMAT))
    wf.setframerate(RATE)
    wf.writeframes(b''.join(frames))
    wf.close()
    J'en conclus que le son peut être également divisé en frames de quelques octets, on a environ 43 frames de 4096 octets par seconde d'après ce que j'ai calculé et il ne reste plus qu'à trouver un moyen autre que de passer par un fichier pour les lire. Pensez-vous qu'en me penchant sur le code source de wave je trouve de quoi faire ce que j'attends ? ou alors connaissez-vous une fonction permettant de lire directement ces frames ?
    Bouddha : Tout n'est qu'illusion en ce bas monde.
    Jésus : Tout est amour divin.
    Einstein : Tout est relatif dans cet espace-temps.
    Moi : Tout est binaire sur ce forum.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Points : 413
    Points
    413
    Par défaut
    Comme d'habitude, je me réponds à moi-même :
    petit script pour afficher le son entrant au microphone
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    import pyaudio
    import wave
     
    FORMAT = pyaudio.paInt16
    CHUNK = 1024
    CHANNELS = 2
    RATE = 44100
    RECORD_SECONDS = 5
    WAVE_OUTPUT_FILENAME = "output.wav"
     
    p = pyaudio.PyAudio()
     
    stream = p.open(format=FORMAT,
                    channels=CHANNELS,
                    rate=RATE,
                    input=True,
                    frames_per_buffer=CHUNK)
     
    p2 = pyaudio.PyAudio()
    stream_lecture = p2.open(format=FORMAT,
                    channels=CHANNELS,
                    rate=RATE,
                    output=True)
     
    frames = []
     
    for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
        data = stream.read(CHUNK)#peut-être un nombre d'octets par frame
        stream_lecture.write(data)
     
    stream.stop_stream()
    stream.close()
    p.terminate()
     
    stream_lecture.stop_stream()
    stream_lecture.close()
     
    p2.terminate()
    Bouddha : Tout n'est qu'illusion en ce bas monde.
    Jésus : Tout est amour divin.
    Einstein : Tout est relatif dans cet espace-temps.
    Moi : Tout est binaire sur ce forum.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2012
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Et bien, merci!!

  5. #5
    Membre averti
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Points : 413
    Points
    413
    Par défaut
    De rien.
    Bouddha : Tout n'est qu'illusion en ce bas monde.
    Jésus : Tout est amour divin.
    Einstein : Tout est relatif dans cet espace-temps.
    Moi : Tout est binaire sur ce forum.

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Merci stalacta !

    Je bosse en ce moment sur un projet d'analyse audio et force est d'admettre que le traitement audio est assez obscur en python.
    Et rares sont ceux qui rendent compte de leur avancement.. Alors encore merci pour ton geste

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Entendre le flux du microphone
    Par stalacta dans le forum Contribuez
    Réponses: 1
    Dernier message: 04/12/2013, 18h26
  2. Lire le son du Microphone en C#
    Par olibara dans le forum C#
    Réponses: 2
    Dernier message: 29/04/2012, 14h23
  3. Enregistrer le son du microphone sur serveur
    Par forzaakz dans le forum Flash
    Réponses: 5
    Dernier message: 21/12/2011, 11h51
  4. [PPT-2003] Impossible d'entendre le son sur vista!
    Par cotcot29 dans le forum Powerpoint
    Réponses: 7
    Dernier message: 15/04/2010, 15h07
  5. mettre le microphone de la carte son à muet
    Par lassmust dans le forum Delphi
    Réponses: 3
    Dernier message: 21/09/2006, 12h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo