Streaming *update* V1.0.7
Übersicht

![]() |
StepTigerBetreff: Streaming *update* V1.0.7 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab nun lange Überlegungen in diesen Code investiert.
ENDLICH habe ich es geschafft. Ganz ohne zusätzliche DLLs ^^ Streaming via Internet, Netzwerk oder Ähnliches. Ihr benötigt einen Ordner namens music, in den ihr die Wave Dateien ablegt. (Ja, leider nur wav!) Hier der Server: Code: [AUSKLAPPEN] ;Host
SeedRnd MilliSecs() SetBuffer BackBuffer() tdir$="music\" hsize=44 scrollspeed#=30 Type musik Field pfad$ Field title$ End Type dir=ReadDir(tdir$) If dir=0 Then RuntimeError "Es existiert kein Verzeichnis "+Chr$(34)+tdir$+Chr$(34) mes$=" - brought to you by StepTiger. - " chspd=300 lch=MilliSecs() count=0 Repeat d$=NextFile$(dir) If Instr(d$,".wav") a.musik=New musik a\pfad$=d$ a\title$=Left$(d$,Len(d$)-4) count=count+1 EndIf Until d$="" If count=0 Then RuntimeError "Keine wav-Dateien im Verzeichnis "+Chr$(34)+tdir$+Chr$(34)+"." RandomizeTitles(count) mus.musik=First musik musik$=tdir$+mus\pfad$ stream=CreateTCPServer(8480) If stream=0 Then RuntimeError "Couldn't create TCP Server!" title$=mus\title$+mes$ mfile=ReadFile(musik$) AppTitle "..."+title$ Const MAX_FPS=200 header=CreateBank(hsize) ReadBytes(header,mfile,0,hsize) SeekFile mfile,28 abps=ReadInt(mfile) sendsize=96*1024 sendbank=CreateBank(sendsize) overflow=64*1024 Print abps Type listener Field Hndl Field ping End Type n=PlayMusic(musik$) ChannelVolume n,0 starttimer#=MilliSecs() opos=hsize vol#=.75 While Not KeyHit(1) time=MilliSecs()-starttimer# pos=(time*Float#(abps/1000))+hsize If KeyDown(200) Then vol#=vol#+.01 If KeyDown(208) Then vol#=vol#-.01 If vol#>1 Then vol#=1 If vol#<0 Then vol#=0 If (vol# Mod .01)<.005 Then vol#=vol#-(vol# Mod 0.01) If (vol# Mod .01)>.005 Then vol#=vol#+(.01-(vol# Mod 0.01)) If vol#<>ovol# For r.listener=Each listener WriteByte r\hndl,Asc("V") WriteFloat r\hndl,vol# Next EndIf ovol#=vol# Cls Text 1,1,"SERVER" For r.listener=Each listener While ReadAvail(r\hndl) ReadByte r\hndl r\ping=MilliSecs() Wend If MilliSecs()>r\ping+5000 If MilliSecs()<msg1time+3000 If msg2$ Then msg1$=msg2$ msg2$="Connection "+r\hndl+" has left!" msg2time=MilliSecs() Else msg1$="Connection "+r\hndl+" has left!" msg1time=MilliSecs() EndIf CloseTCPStream r\hndl Delete r EndIf Next If MilliSecs()>lch+chspd And chspd>0 title$=Right$(title$,Len(title$)-1)+Left$(title$,1) AppTitle "..."+title$ lch=MilliSecs() For r.listener=Each listener WriteByte r\hndl,Asc("N") WriteLine r\hndl,title$ Next EndIf newone=AcceptTCPStream(stream) If newone<>0 r.listener=New listener r\hndl=newone WriteLine r\hndl,hsize WriteLine r\hndl,"HEADER" WriteBytes(header,r\hndl,0,hsize) WriteInt r\hndl,sendsize If MilliSecs()<msg1time+3000 If msg2$ Then msg1$=msg2$ msg2$="Connection "+r\hndl+" has joined!" msg2time=MilliSecs() Else msg1$="Connection "+r\hndl+" has joined!" msg1time=MilliSecs() EndIf WriteByte r\hndl,Asc("N") WriteLine r\hndl,title$ WriteByte r\hndl,Asc("V") WriteFloat r\hndl,vol# r\ping=MilliSecs() EndIf While FPS_LAST>(MilliSecs()-(1000./MAX_FPS)):Delay FPS_LAST-(MilliSecs()-(1000./MAX_FPS))-1:Wend se=0 If pos>(opos+sendsize-overflow) SeekFile mfile,opos ReadBytes(sendbank,mfile,0,sendsize) opos=opos+sendsize For r.listener=Each listener WriteByte r\hndl,Asc("D") WriteBytes(sendbank,r\hndl,0,sendsize) se=1 Next EndIf ;Fps berechnen und anzeigen fps#=(19*fps#+(1000./(MilliSecs()-FPS_LAST)))/20.:FPS_LAST=MilliSecs() proz#=Float#(pos)/(FileSize(musik$)-hsize)*100. If se=1 Then m$="Transmitting..." Else m$="Waiting..." Text 1,15,"Transmitting: "+m$ Text 1,30,"FPS: "+fps# Text 1,45,"File Position: "+pos Text 1,60,"Secs Played: "+time/1000. Text 1,75,"Percent Played: "+Str$(proz#-(proz# Mod .1)+"%") Text 1,90,"Volume: "+vol# Text 1,105,"Online: "+Count() If MilliSecs()<msg1time+3000 Text 1,135,"Message: "+msg1$ Else Text 1,135,"Message: " msg1$="" EndIf If MilliSecs()<msg2time+3000 Text 1,150,"Message: "+msg2$ Else Text 1,150,"Message: " msg2$="" EndIf If proz#>=100 mus=After mus If mus=Null Then mus=First musik title$=mus\title$+mes$ musik$=tdir$+mus\pfad$ CloseFile mfile mfile=ReadFile(musik$) ReadBytes(header,mfile,0,hsize) SeekFile mfile,28 abps=ReadInt(mfile) SeekFile mfile,hsize opos=hsize starttimer=MilliSecs() n=PlayMusic(musik$) ChannelVolume n,0 For r.listener=Each listener WriteByte r\hndl,Asc("H") WriteBytes header,r\hndl,0,hsize WriteByte r\hndl,Asc("N") WriteLine r\hndl,title$ Next EndIf cb=KeyHit(203) ca=KeyHit(205) If (cb Or ca) And cb<>ca If ca mus=After mus If mus=Null Then mus=First musik ElseIf cb mus=Before mus If mus=Null Then mus=Last musik EndIf title$=mus\title$+mes$ musik$=tdir$+mus\pfad$ CloseFile mfile mfile=ReadFile(musik$) ReadBytes(header,mfile,0,hsize) SeekFile mfile,28 abps=ReadInt(mfile) SeekFile mfile,hsize opos=hsize starttimer=MilliSecs() n=PlayMusic(musik$) ChannelVolume n,0 For r.listener=Each listener WriteByte r\hndl,Asc("H") WriteBytes header,r\hndl,0,hsize WriteByte r\hndl,Asc("N") WriteLine r\hndl,title$ Next EndIf Flip 0 Wend For r.listener=Each listener CloseTCPStream r\hndl Delete r Next CloseTCPServer stream CloseFile mfile End Function RandomizeTitles(count) For f.musik=Each musik rn=Rand(count) n.musik=SelectTitle(rn) If n<>Null And f<>n Insert f Before n ElseIf n=Null Insert f Before First musik EndIf If KeyHit(57) Then RuntimeError "" Next End Function Function SelectTitle.musik(num) n=0 f.musik=Null For x=0 To num If f<>Null f=After f Else f=First musik EndIf Next Return f End Function Function Count() n=0 For f.listener=Each listener n=n+1 Next Return n End Function hier der Client: Code: [AUSKLAPPEN] ;Client
ip$="192.168.0.2" fend$=".wav" SetBuffer BackBuffer() stream=OpenTCPStream(ip$,8480) Const MAX_FPS=200 If stream=0 Then RuntimeError "Couldn't connect to server!" hsize=ReadLine$(stream) headerbank=CreateBank(hsize) If ReadLine$(stream)="HEADER" ReadBytes(headerbank,stream,0,hsize) abps=ReadInt(stream) Else RuntimeError "Couldn't read header!" EndIf num=0 readbank=CreateBank(abps) pt=MilliSecs()+3000 vol#=1 While Not KeyHit(1) Cls While FPS_LAST>(MilliSecs()-(1000./MAX_FPS)):Delay FPS_LAST-(MilliSecs()-(1000./MAX_FPS))-1:Wend If MilliSecs()>pt Then WriteLine stream,"PING":pt=MilliSecs()+3000 d$="" While ReadAvail(stream) d$=Chr$(ReadByte(stream)) If d$="D" num=1-num fl=WriteFile("file"+num+fend$) ReadBytes(readbank,stream,0,abps) WriteBytes(headerbank,fl,0,hsize) WriteBytes(readbank,fl,0,abps) CloseFile fl n=PlayMusic("file"+num+".wav") ChannelVolume n,vol# EndIf If d$="H" ReadBytes(headerbank,stream,0,hsize) EndIf If d$="N" title$=ReadLine$(stream) AppTitle "..."+title$ EndIf If d$="A" abps=ReadInt(stream) EndIf If d$="V" vol#=ReadFloat#(stream) ChannelVolume n,vol# EndIf Wend msg$="" Text 1,1,"CLIENT" If d$<>"" Then msg$="Receiving..." Else msg$="No Data!" Text 1,15,"Status: "+msg$ Text 1,30,"FPS: "+fps# ;Fps berechnen und anzeigen fps#=(19*fps#+(1000./(MilliSecs()-FPS_LAST)))/20.:FPS_LAST=MilliSecs() Flip 0 Wend CloseTCPStream stream End Die wichtigsten Variablen: tdir$ ist das Verzeichnis, in dem sich die Musik befindet. mes$ ist für eine Zusatznachricht an dem Titel. MAX_FPS ist wichtig für die maximalen FPS. Zu hoch und der PC wird überlastet, zu niedrig und es stockt im Sound. chspd ist die Geschwindigkeit, mit der der Text scrollt. Höher ist langsamer, 0 ist aus. sendsize ist die Anzahl an byte, die für ein Soundsegment gesendet wird overflow ist die Anzahl an byte, die gesendet werden, bevor sie abgespielt werden. IP$ ist die IP des Server hsize zum festlegen der Größe des Headers vol# zum festlegen der Anfangslautstärke Das dürfte es soweit gewesen sein. Da es wave dateien sind, sind sie nur in minimaler Qualität für Internetübertragung geeignet (aber es geht, hab es schon getestet.) *edit* Server und Client Update ![]() *edit* Nun version 1.3 *edit* Nun 1.0.6 *edit* 1.0.7 |
||
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer: AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t Gewinner: BP Code Compo #2 Π=3.141592653589793238...<--- und das aus dem kopf ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
- Zuletzt bearbeitet von StepTiger am Mo, Dez 18, 2006 18:11, insgesamt 10-mal bearbeitet
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
kann amn auch sowas machen, damit man dann mit winamp oder windows media player den stream hören kann?? | ||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
![]() |
StepTiger |
![]() Antworten mit Zitat ![]() |
---|---|---|
nein, weil es ein eigens von mir erstelltes Protokoll ist. Ich habe noch nicht herausgefunden, wie das Icecast Protokoll funktioniert. | ||
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer: AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t Gewinner: BP Code Compo #2 Π=3.141592653589793238...<--- und das aus dem kopf ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
Coffee |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
die idee is sehr geil mhh...
schade das nur wav aber egal ich werd moren mal im homenetzwerk testen. |
||
*Mjam* |
![]() |
StepTiger |
![]() Antworten mit Zitat ![]() |
---|---|---|
Changelog:
ALLGEMEIN -Versionsnummer von 1.3 auf 1.4 auf 1.0.4 verändert HOST -Zufälliges Mischen der Titel -Einige Fehler beseitigt CLIENT -Geschwindigkeit verbessert ----------------------------------------------------------------------- ALLGEMEIN -Versionsnummer auf 1.0.5 HOST -Druck auf Leertaste zum Wechseln zum nächsten Titel ----------------------------------------------------------------------- ALLGEMEIN -Versionsnummer auf 1.0.6 HOST -Sehr viel, unter Anderem: -Titelwechsel nun mit Pfeil Links und Pfeil Rechts -GUI verschönert CLIENT -Sehr viel, unter Anderem: -GUI verschönert -Besser anschaubar für Leute, die mit dem Quellcode nichts anzufangen wissen ----------------------------------------------------------------------- ALLGEMEIN -Versionsnummer 1.0.7 -Lautstärke veränderbar HOST -Kann Lautstärke festlegen (PFEIL OBEN und PFEIL UNTEN) -Neue Anzeige: Volume -Neue Variable: hsize zum festlegen der Größe des Headers -Neue Variable: vol# zum festlegen der Anfangslautstärke PLANUNG HOST -Scrolling während des Liedes CLIENT -Eigene Lautstärkeeinstellung |
||
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer: AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t Gewinner: BP Code Compo #2 Π=3.141592653589793238...<--- und das aus dem kopf ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
- Zuletzt bearbeitet von StepTiger am Mo, Dez 18, 2006 18:11, insgesamt 2-mal bearbeitet
![]() |
Dante |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schonmal sehr gut ![]() Aber würd die print Befehle rausnehmen, sind voll die Speed-Bremsen ![]() MfG |
||
![]() |
StepTiger |
![]() Antworten mit Zitat ![]() |
---|---|---|
die ersetze ich bald durch text ^^ | ||
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer: AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t Gewinner: BP Code Compo #2 Π=3.141592653589793238...<--- und das aus dem kopf ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
![]() |
BlitzChecker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Habs grad mal ausprobiert...
...und funzt ![]() Stockt nur n bisschen (Aber ist ja normal, da PlayMusic immer n bisschen Speed nimmt)... mfg BlitzChecker |
||
www.xairro.com |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group