2017-07-10 3 views
0

Je suis un débutant qui essaie de trouver un moyen de diffuser de l'audio sur un serveur local. J'ai un script Python qui crée des données binaires à partir du microphone d'un robot, et je veux envoyer ces données à afficher sur un serveur Go local que j'ai créé.Transférer des tampons audio à partir d'un script Python vers un serveur Go?

J'ai lu quelque part que les sockets Web pourraient être une solution. Mais quel est le moyen le plus simple pour télécharger les tampons audio à partir du script Python? Et comment puis-je récupérer ces données binaires brutes afin qu'elles puissent être diffusées à partir de l'application Web?

Merci beaucoup.

Répondre

0

Il n'y a pas de "Best" unique. Si le protocole doit passer par les ports 80/443 sur l'Internet ouvert, vous pouvez utiliser des sockets Web. Vous pouvez également POSTER des blocs de données codées en base64 à partir de python vers votre serveur.

Si le robot et le serveur sont sur le même réseau, vous pouvez envoyer des paquets UDP du robot à votre serveur. (Habituellement, un paquet ou deux manquant sur l'audio n'est pas un problème). Même si vous avez un serveur Go basé sur le Web, vous pouvez toujours déclencher une routine go pour écouter sur UDP pour les paquets entrants.

Si vous pouviez être plus précis, peut-être que moi ou quelqu'un d'autre pourrait donner une meilleure réponse?

+0

Ah oui le robot et le serveur sont sur le même réseau, voici mon script Go: [link] (https://play.golang.org/p/l_1E-TYSbB) et mon script python est la réponse à cette question Q [link] (https://stackoverflow.com/questions/24243757/nao-robot-remote-audio-problems). Vous dites donc que je dois créer des paquets UDP dans mon script Python à partir des données binaires (enregistrées en tant que .raw) et les écouter dans mon script Go. Est-ce que je convertis les données en HEX? Comment puis-je convertir ces données en .WAV ou un autre format de musique jouable? Merci. – stucklen

+0

Normalement, l'audio est un PCM 8 bits. On dirait que Numpy prend les données en les traduisant en nombres (ils devraient être entre 0 et 255) avec une colonne pour chaque canal. Vous devriez être capable de base64 1000 octets à la fois (pourquoi 1000 ?, car Ethernet est de 1500 octets par défaut). Coder cela comme base64, ce qui devrait être d'environ 1300 octets. Envoyez-le comme un paquet UDP à votre serveur Go, alors peut-être quelque chose comme https://github.com/cryptix/wav pour ré-encoder cela comme un fichier WAV. J'espère que vous pouvez simplement écrire ce fichier WAV sur votre mélangeur ou votre appareil audio. Mais je n'ai jamais essayé cette dernière partie. – ipaul

+0

Merci, mais encore des difficultés. Voici la méthode processRemote de mon code Python [link] (https://trinket.io/python/ca15d63ae6) J'ai réussi à envoyer des données de test (PACKETDATA) sur UDP et réussi à obtenir Go pour le recevoir . Cependant, mon niveau de compétence est débutant et je ne sais pas exactement ce que je dois envoyer. J'ai une variable appelée 'aSoundData' qui pourrait être l'audio mais quand je l'imprime, elle montre des nombres au-delà de 255, alors quel genre de données cela pourrait-il être et comment puis-je le convertir en hexadécimal? Il ressemble à ceci: [[408 -283 -962 ..., 1546 1784 1946] (il y a 3 lignes comme ça) – stucklen