[HELP] Comment faire jouer un MP3 ou un WAV en python avec Snips?


#1

Bonjour,
Comme indiqué, j’aimerais pouvoir jouer un fichier son à la place du TTS.
J’ai essayé plein de truc, mais rien ni fait.
Bon, après, soyons honnête, je ne développeur niveau 0 :wink:

Voila mon dernier essai:

current_session_id = intentMessage.session_id
wav_file = open(’/usr/share/snips/assistant/custom_dialogue/sound/error.wav’,‘rb’)
audio_wav = wav_file.read()
wav_file.close()
publish.single(‘hermes/audioServer/default/playBytes/’+current_session_id+’/’,payload=bytearray(audio_wav),qos=0, retain=False, hostname=127.0.0.1, port=1883,client_id=’’, keepalive=60, will=None, auth=None, tls=None,protocol=mqtt.MQTTv311)

Si je commente la derniere ligne, Snips ne bloque plus, donc c’est dans celle-çi que j’ai un probléme, mais je ne sais pas trop où


#2

Bonjour,
Moi aussi je suis interressé par pouvoir le faire 100% en python (je découvre python avec Snips :wink:), je n’ai pas compris comment encoder le payload du message MQTTpour que le fichier soit joué… (décoder payload audio de snips, ça par contre OK)
En attendant j’utilise la commande systeme “mosquitto_pub” et l’option -f, c’est bourrin et moche, mais ça fait à peu pret ce que je veux.
Voila le code de ma fonction si ca peut aider, en attendant une version full python si quelqu’un peut dépanner :

La fonction prend en argument le chemin complet du fichier audio (wav) et un id optionnel (dans mon cas, j’ai besoin d’identifier ce qui est joué sur le “bus” MQTT via un id)

 def PlaySound(wav="", id=""):
    global DEBUG
    global SOUND_DEFAULT
    from subprocess import call

    if(not wav):
            wav=SOUND_DEFAULT
    if(not id):
            id=os.path.basename(wav)

    try:
            retcode = call("/usr/bin/mosquitto_pub" + "  -h 127.0.0.1 -t 'hermes/audioServer/default/playBytes/"+id+"' -f "+ wav, shell=True)
            if retcode != 0:
                    _logger.error('{} : PlaySound - ERROR - Child was terminated by signal ({})'.format( id, retcode))
            else:
                    if(DEBUG > 1): _logger.info('{} : PlaySound - OK({}) - {}'.format( id, retcode, wav))
    except OSError as e:
            _logger.error('{} : PlaySound - ERROR - Execution failed ({})'.format( id, e))