winamp besturing via wap-gsm

Pagina: 1
Acties:
  • 212 views sinds 30-01-2008

Acties:
  • 0 Henk 'm!

  • Punksmurf
  • Registratie: September 2002
  • Laatst online: 06-01-2024
beste allemaal,

ik heb mij vandaag eens zinloos ingespannen om een applicatie te schrijven zodat ik winamp met mijn wap-mobieltje kan besturen. ik had er gewoon zin in, want mja, echt nuttig is het niet :P

ik heb besloten het hier neer te dumpen, zodat jullie er misschien ook nog wat lol van hebben.

het geheel bestaat uit een aantal onderdelen, onder te verdelen in een kleine server die je op de pc draait, en een stukje php-code die je op je webserver moet draaien. het is geschreven voor winamp 2.x, ik weet niet of het werkt met versie 3.

zoals het er nu is, zijn de volgende functies beschikbaar:
  • previous;
  • play;
  • pause;
  • stop;
  • next;
  • volume in 8 stappen van 0 tot 100%.
(let op, dat is het volume van winamp, niet je system volume)

je kan de webpagina (xhtml) opvragen met een browser die dat ondersteund, bijvoorbeeld de browsers van de SE t68i, t300 en t310. ik denk dat alle nieuwe SE telefoons xhtml ondersteunen maar ik weet het niet zeker, als je een beetje creatief te werk gaat kun je de code ook gemakkelijk aanpassen aan standaard wap1.1 compatible uitvoer.
als je de webpagina opvraagt zul je eerst het volgende zien (hé, ik heb nooit beweerd dat ik goed kan tekenen :P):

Afbeeldingslocatie: http://www.punksmurf.nl/got_wwc/wwc_pb.gif

met de toetsen onder de symbooltjes kan je dan de playback regelen, als je op 6 toetst, ga je naar het volume-control-scherm:

Afbeeldingslocatie: http://www.punksmurf.nl/got_wwc/wwc_vol.gif

0 - 8 voor het volume, 0 = mute.
9 brengt je terug naar het vorige scherm.

onder de plaatjes staan de links met een accesskey om de nummers te laten werken.

nou, genoeg gezwetst, hier heb je de code...

allereerst de server, deze heb ik geschreven in Visual Basic en is echt supersimpel. een moduletje met 3 dll aanroepen, en een formpje (dat zichzelf hide, maar dat heb ik er voor de duidelijkheid uitgelaten) met een winsock control erop en wat code om winamp aan te sturen. dit kan als het goed is ook allemaal in een module als je geen form wil gebruiken, maar ik weet niet precies hoe dat moet, dus ik doe het zo.
de server kent maar een paar simpele 1-letterige commando's (van a - n), die de verschillende acties uitvoeren die hierboven genoemd zijn.

de module:

Visual Basic:
1
2
3
4
5
6
7
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Public Const WM_COMMAND = &H111
Public Const WM_USER = &H400
Dim hwndWinamp As Long


de code van het form (de gebruikte socket heet dus 'socket')

Visual Basic:
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
Private Sub Form_Load()

socket.LocalPort = 6001
socket.Listen

End Sub

Private Sub socket_Close()
    socket.Close
    socket.Listen
End Sub

Private Sub socket_ConnectionRequest(ByVal requestID As Long)
socket.Close
socket.Accept requestID

End Sub

Private Sub socket_DataArrival(ByVal bytesTotal As Long)
    Dim strText As String
    socket.GetData strText
    
    exec (strText)
        
    socket.Close
    socket.Listen
    
End Sub

Private Sub exec(comm As String)

hwndWinamp = FindWindow("Winamp v1.x", vbNullString)

Select Case comm
    Case "a" 'prev
        dummy = SendMessage(hwndWinamp, WM_COMMAND, 40044, vbNull)
    Case "b" 'play
        dummy = SendMessage(hwndWinamp, WM_COMMAND, 40045, vbNull)
    Case "c" 'pause
        dummy = SendMessage(hwndWinamp, WM_COMMAND, 40046, vbNull)
    Case "d" 'stop
        dummy = SendMessage(hwndWinamp, WM_COMMAND, 40047, vbNull)
    Case "e" 'next
        dummy = SendMessage(hwndWinamp, WM_COMMAND, 40048, vbNull)
    Case "f" 'vol 0
        dummy = PostMessage(hwndWinamp, WM_USER, 0, 122)
    Case "g" 'vol 1
        dummy = PostMessage(hwndWinamp, WM_USER, 31, 122)
    Case "h"
        dummy = PostMessage(hwndWinamp, WM_USER, 63, 122)
    Case "i"
        dummy = PostMessage(hwndWinamp, WM_USER, 95, 122)
    Case "j"
        dummy = PostMessage(hwndWinamp, WM_USER, 127, 122)
    Case "k"
        dummy = PostMessage(hwndWinamp, WM_USER, 159, 122)
    Case "l"
        dummy = PostMessage(hwndWinamp, WM_USER, 191, 122)
    Case "m"
        dummy = PostMessage(hwndWinamp, WM_USER, 223, 122)
    Case "n" 'vol 9
        dummy = PostMessage(hwndWinamp, WM_USER, 255, 122)
End Select

End Sub


ik denk dat deze code wel voor zich spreekt? die msgs zijn dus om winamp te bestuderen, deze info vind je op de winamp site.

verder bestaat het zwikje nog uit 2 stukjes php, dat kan ook in 1 maar ik heb het zo opgelost. de php code maakt verbinding met de server, en spuugt daar een teken heen overeenkomstig het protocol wat je wel uit de code hierboven kan halen, waarna de verbinding weer wordt verbroken.

het bestand heet pb.php (van PlayBack)

PHP:
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
<?

header("Content-type: application/xhtml+xml");  

echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML Basic 1.0//EN\" \"DTD/xhtml-basic10.dtd\">\n";

Function sendcommand ($host, $comm) { 
  @$rc=fsockopen($host, 6001); 
  if ( (trim(gethostbyaddr($host)) != $host) && trim($host != "") && ($rc) ) {
      socket_set_timeout($rc, 2);
      @fputs($rc,"$comm");
      fclose($rc);
  } else {
    return -1;
  }
} 

$comm = $_GET['comm'];

if ($comm) {
   sendcommand ('!!!  vul hier je ip-nummer of hostname in  !!!',$comm);
}

?>
<html>
<head>
<title>playback</title>
</head>
<body>
<p>[img]"./wwc_pb.gif"[/img]</p>
<p><a title="prev" href="./pb.php?comm=a" accesskey="1">previous</a><br/>
<a title="play" href="http://www.punksmurf.nl/pb.php?comm=b" accesskey="2">play</a><br/>
<a title="pause" href="./pb.php?comm=c" accesskey="3">pause</a><br/>
<a title="stop" href="./pb.php?comm=d" accesskey="4">stop</a><br/>
<a title="next" href="./pb.php?comm=e" accesskey="5">next</a><br/>
<a title="vol" href="./vol.php" accesskey="6">volume</a><br/></p>
</body>
</html> 


het volgende bestandje doet hetzelfde, maar dan dus voor t volume. het heet dan ook vol.php.

PHP:
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
43
<?

header("Content-type: application/xhtml+xml");  

echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML Basic 1.0//EN\" \"DTD/xhtml-basic10.dtd\">\n";

Function sendcommand ($host, $comm) { 
  @$rc=fsockopen($host, 6001); 
  if ( (trim(gethostbyaddr($host)) != $host) && trim($host != "") && ($rc) ) {
      socket_set_timeout($rc, 2);
      @fputs($rc,"$comm");
      fclose($rc);
  } else {
    return -1;
  }
} 

$comm = $_GET['comm'];

if ($comm) {
   sendcommand ('!!!  vul hier je ip-nummer of hostname in  !!!',$comm);
}

?>
<html>
<head>
<title>volume</title>
</head>
<body>
<p>[img]"./wwc_vol.gif"[/img]</p>
<p><a title="vol0" href="./vol.php?comm=f" accesskey="0">mute</a><br/>
<a title="vol1" href="./vol.php?comm=g" accesskey="1">[:</a><br/>
<a title="vol2" href="./vol.php?comm=h" accesskey="2">[::</a><br/>
<a title="vol3" href="./vol.php?comm=i" accesskey="3">[:::</a><br/>
<a title="vol4" href="./vol.php?comm=j" accesskey="4">[::::</a><br/>
<a title="vol5" href="./vol.php?comm=k" accesskey="5">[:::::</a><br/>
<a title="vol6" href="./vol.php?comm=l" accesskey="6">[::::::</a><br/>
<a title="vol7" href="./vol.php?comm=m" accesskey="7">[:::::::</a><br/>
<a title="vol8" href="./vol.php?comm=n" accesskey="8">[::::::::</a><br/>
<a title="back" href="./pb.php" accesskey="9">back</a><br/></p>
</body>
</html> 


het enige probleem dat ik ervaar, is dat mijn telefoon (SE t300) de pagina's cached, dus dat hij m niet meer echt opvraagt (en dus de php-code niet wordt uitgevoerd, en dus winamp er niet mee bestuurd wordt). t enige wat ik dus eigenlijk nog zoek is een manier om dat te voorkomen. een manier is om een form te gebruiken, met diverse submit 'buttons', maar dat vind ik nogal omslachtig. momenteel refresh ik de pagina (option button, 7)

voor diegenen die de server niet kunnen compilen, je kunt deze hier downloaden. de enige manier om m af te sluiten is via ctrl+alt+del. visual basic 5 runtimes en mswinsck.ocx zijn vereist.

veel plezier ermee!

[ Voor 39% gewijzigd door Punksmurf op 06-09-2003 21:37 ]

met een hamer past alles


Acties:
  • 0 Henk 'm!

  • Xof
  • Registratie: Juni 2001
  • Laatst online: 12-05 10:38

Xof

Bestond zo'n script niet al? Kan me herinneren zoiets tegengekomen te zijn tussen de plugin archive van winamp.com :)

Misschien dat ik dit nog een keer ga uitproberen :D

Acties:
  • 0 Henk 'm!

  • Punksmurf
  • Registratie: September 2002
  • Laatst online: 06-01-2024
kheb geen idee of het al bestond, maar ik doe per definitie alles wat ik zelf kan liever zelf :P
en ik verveelde me ;)

met een hamer past alles


Acties:
  • 0 Henk 'm!

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 02:06

alienfruit

the alien you never expected

Volgens mij best wel een dure grapje om via WAP je WinAmp te besturen. Wel leuk voor in de discotheek als je daar een mp3 bak hebt draaien ;)

Acties:
  • 0 Henk 'm!

  • Punksmurf
  • Registratie: September 2002
  • Laatst online: 06-01-2024
hoezo is het een dure grap? weinig transfer (zonder plaatjes helemaal), en wappen is bij orange (dat ik heb) zowiezo al onbeperkt (voor €6 per maand)

met een hamer past alles


Acties:
  • 0 Henk 'm!

Anoniem: 36579

ALs je nou zoiets kon verzinnen voor bluetooth :D

Acties:
  • 0 Henk 'm!

  • Punksmurf
  • Registratie: September 2002
  • Laatst online: 06-01-2024
hmm bij mij op school deden een aantal gasten dat met powerpoint
dus dat moet vast kunnen... moet je telefoon alleen wel blauwtand ondersteunen...

met een hamer past alles


Acties:
  • 0 Henk 'm!

Anoniem: 80403

Anoniem: 36579 schreef op 06 September 2003 @ 22:15:
ALs je nou zoiets kon verzinnen voor bluetooth :D
Dit is er dus ook voor bluetooth (iniedergeval i.c.m. de t68i) en het werkt perfect, tot ongeveer een afstand van 30 meter.

Acties:
  • 0 Henk 'm!

Anoniem: 86754

Anoniem: 80403 schreef op 06 september 2003 @ 22:21:
[...]


Dit is er dus ook voor bluetooth (iniedergeval i.c.m. de t68i) en het werkt perfect, tot ongeveer een afstand van 30 meter.
offtopic:
sorry voor de enorme kick

Waar kan ik zoiets vinden? Ik kon echt niks nuttigs vinden @ google.. :(

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13-06 16:32

gorgi_19

Kruimeltjes zijn weer op :9

Anoniem: 86754 schreef op 02 mei 2004 @ 15:20:
offtopic:
sorry voor de enorme kick

Waar kan ik zoiets vinden? Ik kon echt niks nuttigs vinden @ google.. :(
idd een enorme kick. :) Verder krijg ik het idee dat je een standaard applicatie of plugin wilt en hem niet zelf wil maken.

Zie P&W FAQ - Scriptrequests ; dit verhaal geldt ook voor component requests, wat jij in principe doet. :) Dit zien we liever niet in PW.

Mocht je het zelf willen maken, dan kan je een nieuw topic openen volgens de quickstart.
P&W FAQ - De "quickstart"

Deze gaat iig dicht. :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo

Pagina: 1

Dit topic is gesloten.