Aller au contenu

Lire Un Flux De Données Sur Socket Udp Multicast


Vince

Messages recommandés

Bonjour à  tous,
 
Je souhaiterai savoir si il y a possibilité avec la HC2 de récupérer un flux UDP multicast.
Une idée farfelu m'est venu et donc mon but, ici, est de contrôler via un piano numérique MIDI, branché sur mon ordi, les paramètres couleurs du contrôleur RGBW.
J'ai, sur mon système Ubuntu, trouvé une appli "qmidinet" qui permet de faire une diffusion UDP multicast des informations MIDI du clavier.

 
Pas de problème pour "écrire" sur le socket UDP (Merci au passage à  Krikroff pour son code de ping qui m'a bien aidé) :
 

local _deviceIp = "192.168.0.2"; -- adresse ordinateur
local _devicePort = 21928; -- port multicast
socket = Net.FUdpSocket(); 
socket:setBroadcast(true); 
  
--send packet 
local bytes, errorCode = socket:write("Je peux écrire", _deviceIp, _devicePort); 

--check for error      
if errorCode == 0 then 
    return true; 
else
    return false

Le code me retourne bien "true", donc pas de problème pour l'écriture.

 

La question est : comment faire pour "lire" le flux ? (du genre le "socket:read" en tcp)

 

Merci d'avance pour votre aide !

Lien vers le commentaire
Partager sur d’autres sites

  • 1 mois après...

Salut Vince, j'étais passé à  côté de ton post ;)

 

tu peux faire un truc dans le genre...

readSocket = function(socket)
    local err, len = 0, 1;
    local buffer, data = "", "";
    while (err==0 and len>0) do
      data, err = socket:read();
      len = string.len(data);
      buffer = buffer..data;
    end
    return buffer, err;
end

j'utilise cette technique dans la lib tk.Net.* de mon framework LUA :)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Merci pour ta réponse. En fait j'ai fait autrement...  Un programme en python pour récupérer le flux midi. Du PHP pour calculer la couleur à  partir des données midi et un accès à  la fonction du changement de couleur du ruban de Leds avec la HC2 !

Le tout fonctionnant à  merveille et est très apprécié  :D

Lien vers le commentaire
Partager sur d’autres sites

Super !!!

Et c'est juste pour le plaisir ou il y a une application pratique ? Peut être des idées àprendre pour recycler un vieux clavier maître :)

Envoyé de mon iPhone àl'aide de Tapatalk

Lien vers le commentaire
Partager sur d’autres sites

Alors oui, c'est juste pour le plaisir. Un défi personnel de faire varier les couleurs et l'intensité suivant les notes jouées (et leur vélocité).

 

Le principe c'est que seules les notes jouées en basse (1er et 2eme octave) fassent varié la couleur. Les autres notes ne font variées que l'intensité (+ il y a de notes et plus elles sont jouées fortes => + l'intensité est forte ).

 

Pour les couleurs : Elles vont du rouge pour le 1er Do au rouge pour le Do de l'octave suivante. L'astuce a été de reprendre mes cours de trigo (le principe de la roue chromatique) pour calculer les notes intermédiaires pour faire passer : rouge => vert puis du vert => bleu et enfin du bleu => rouge.

 

Après quelques heures (..jours) de prises de tête (par ex : garder le flux des notes maintenues et lesquelles sont relâchées, la vélocité, l'ajout de couleur entre note...etc), le résultat est bien sympa et le tout est très appréciée par la gente féminine  :)

Lien vers le commentaire
Partager sur d’autres sites

Pour le flux midi c'est donc un programme en python :

#!/usr/bin/env python

import sys, pygame, pygame.midi, urllib2, urllib
 
# set up pygame
pygame.init()
pygame.midi.init()
 
for x in range( 0, pygame.midi.get_count() ):
	print pygame.midi.get_device_info(x)

inp = pygame.midi.Input(5) # 5 est l'identifiant de mon midi IN

while True:
	if inp.poll():
 		some_url = "http://localhost/sites/all/modules/domotique/midi/midiover.php?values="+urllib.quote_plus(str(inp.read(1000)))
		content = urllib2.urlopen(some_url).read();
		print(content);
	pygame.time.wait(100) #un peu plus que l'exemple pour laisser le ruban reagir !

Voici la source pour plus d'explication.

 

Au niveau réactivité , c'est pas trop mal, même si ce n'est pas instantané (une demi seconde environ) du à  la réactivité du fibaro RGBW controller et surtout du ruban led.

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...