TV-Noise

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Rings
Beiträge: 977
Registriert: 29.08.2004 08:48

TV-Noise

Beitrag von Rings »

Ursprünglich war das dingen von benny, aber ich habs dann mal aufgebohrt und ein bissl -TV Bild gemacht.
Interressant ist das der Sound vorher im Speicher erzeugt wird.

oder als paket(Exe und source) hier runterladbar.

Code: Alles auswählen

;TV-Test-picture

;#Swidht=640
;#SHeight=480
#SCREEN_X=800
#SCREEN_Y=600
#SCREEN_DEPTH=32
#MyFontID=1

Sender.s="PUREBASIC"

XSchritt=#SCREEN_X/20
YSchritt=#SCREEN_Y/15

Mode=1
DelayZeit=5000

;Make tv-noise, generate a sound in mem without a WAV-file

#pi = 3.141593                      ; pi 
fq = 250                           ; frequenz in Hz for sinustone 
#samplerate = 44100                 ; samplerate 
#bitrate = 16                       ; Bits per sample, #bitrate Mod 8 must be 0 ! 
#channels = 2                       ; number of channels 
#secs = 1                           ; time for the tone in seconds 
BytesNeeded=#samplerate * #secs * #channels *2
BytesNeeded=BytesNeeded + 44;(44 is the header)
mem1=GlobalAlloc_(#GMEM_FIXED,Bytesneeded) ;Api only ;)
mem2=GlobalAlloc_(#GMEM_FIXED,Bytesneeded)

avBytesPerSec.l = #channels*#bitrate/8*#samplerate  ; calculate the average bytes per second 
Global  actsamplevalue.w         ; for signed RAW data 
offset=44    
For acttime = 1 To #samplerate * #secs 
 For actchannel = 1 To #channels 
        If fq <= 150 
          m = 1 
        ElseIf fq >= 300 
          m = -1 
        EndIf 
        fq + m 
        actsamplevalue = 32766 * Sin(2 * #pi * fq * acttime / #samplerate) 
        If actsamplevalue <20000 
         actsamplevalue = actsamplevalue +5000
        EndIf 
        PokeW(mem2+offset,Random(32765))
        PokeW(mem1+offset,actsamplevalue )
        offset+2
    Next 
  Next 

  PokeL(mem1,$46464952) ;
  PokeL(mem1+4,36+avBytesPerSec*#secs) ;WriteLong(36+avBytesPerSec*#secs) ; normally filesize - 8 Bytes, here a bit tricky, fmt-chunk + data-chunk 
  PokeL(mem1+8,$45564157)
  PokeL(mem1+12,$20746D66)
  PokeL(mem1+16,16);WriteLong(16)                     ; chunk data size 
  PokeW(mem1+20,1);WriteWord(1)                      ; compression code 
  PokeW(mem1+22,#Channels);WriteWord(#channels)              ; number of channels 
  PokeL(mem1+24,#samplerate);WriteLong(#samplerate)            ; samplerate 
  PokeL(mem1+28,avBytesPerSec);WriteLong(avBytesPerSec)          ; average bytes per second, here 2(channels)*2(block align)*44100(samplerate) 
  PokeW(mem1+32,#bitrate/8*#channels);WriteWord(#bitrate/8*#channels)   ; Block Align ('bytes per sample') 
  PokeW(mem1+34,#bitrate);WriteWord(#bitrate)               ; Bits per sample 
  PokeS(Mem1+36,"data");WriteByte(Asc("d")) 
  PokeL(mem1+40,avBytesPerSec*#secs);;WriteLong(avBytesPerSec*#secs)    ; data chunk size in byes 

  PokeL(mem2,$46464952) ;
  PokeL(mem2+4,36+avBytesPerSec*#secs) ;WriteLong(36+avBytesPerSec*#secs) ; normally filesize - 8 Bytes, here a bit tricky, fmt-chunk + data-chunk 
  PokeL(mem2+8,$45564157)
  PokeL(mem2+12,$20746D66)
  PokeL(mem2+16,16);WriteLong(16)                     ; chunk data size 
  PokeW(mem2+20,1);WriteWord(1)                      ; compression code 
  PokeW(mem2+22,#Channels);WriteWord(#channels)              ; number of channels 
  PokeL(mem2+24,#samplerate);WriteLong(#samplerate)            ; samplerate 
  PokeL(mem2+28,avBytesPerSec);WriteLong(avBytesPerSec)          ; average bytes per second, here 2(channels)*2(block align)*44100(samplerate) 
  PokeW(mem2+32,#bitrate/8*#channels);WriteWord(#bitrate/8*#channels)   ; Block Align ('bytes per sample') 
  PokeW(mem2+34,#bitrate);WriteWord(#bitrate)               ; Bits per sample 
  PokeS(Mem2+36,"data");WriteByte(Asc("d")) 
  PokeL(mem2+40,avBytesPerSec*#secs);;WriteLong(avBytesPerSec*#secs)    ; data chunk size in byes 
 


; Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
     #SoundSync = $0
     #SoundASync = $1
     #SoundMemory = $4
     #SoundLoop = $8
     #SoundNoStop = $10
     #SoundNoDefault = $2

If InitSprite()=0 Or InitKeyboard() = 0
  MessageRequester("Error", "Can't open DirectX 7 Or later", 0)
  End
EndIf

If OpenScreen(#SCREEN_X, #SCREEN_Y, #SCREEN_DEPTH, "TV-TEST")
 Flags=#PB_Font_Bold
 Result = LoadFont(#MyFontID, "Times New Roman", 32, Flags) 
 UseFont(#MyFontID) 

StartDrawing(ScreenOutput()) 
  Pitch        = DrawingBufferPitch() 
StopDrawing() 

White = $FFFFFF
Noise = 0 
Carry = 0 
Index = 0 
Seed  = $12345 

 Repeat
 FlipBuffers()
 If IsScreenActive() 
  ClearScreen($50,$50,$50)
  StartDrawing(ScreenOutput())
  T1=GetTickCount_()
  If T1>T0+DelayZeit
   If Mode=1 
    Mode=2
    result=sndPlaySound_(mem2,#SoundASync |#SoundMemory|#SoundLoop )
   Else
    Mode=1
    result=sndPlaySound_(mem1,#SoundASync |#SoundMemory|#SoundLoop )
   EndIf
   T0=T1  
  EndIf  
  If Mode=1 
  ;Draw grid
  DrawingMode(1)
  X=0
  Y=0
  While x<#SCREEN_X-1
   LineXY(X, 0, X, #SCREEN_Y-1 , $FFFFFF) 
   X+XSchritt
   While y< #SCREEN_Y-1
    LineXY(0, y, #SCREEN_X-1, y , $FFFFFF) 
    y+YSchritt
   Wend
  Wend
  LineXY(#SCREEN_X-1, 0, #SCREEN_X-1, #SCREEN_Y-1 , $FFFFFF) 
  LineXY(0, #SCREEN_Y-1, #SCREEN_X-1, #SCREEN_Y-1 , $FFFFFF) 


  ;draw boxes
  Box(XSchritt*4,YSchritt*2,xSchritt*1.5,YSchritt*3,$FFFFFF) ;white
  Box(XSchritt*5.5,YSchritt*2,xSchritt*1.5,YSchritt*3,$00FFFF);yellow
  Box(XSchritt*7,YSchritt*2,xSchritt*1.5,YSchritt*3,$AAAA00);ligh bluegreen
  Box(XSchritt*8.5,YSchritt*2,xSchritt*1.5,YSchritt*3,$00AA44);green
  Box(XSchritt*10,YSchritt*2,xSchritt*1.5,YSchritt*3,$FF00FF);purple
  Box(XSchritt*11.5,YSchritt*2,xSchritt*1.5,YSchritt*3,$0000FF);red
  Box(XSchritt*13,YSchritt*2,xSchritt*1.5,YSchritt*3,$FF0000);blue
  Box(XSchritt*14.5,YSchritt*2,xSchritt*1.5,YSchritt*3,$000000);black
  
  Box(XSchritt*4,YSchritt*5,xSchritt*3,YSchritt*2,$000000);black
  Box(XSchritt*7,YSchritt*5,xSchritt*3,YSchritt*2,$505050);darkgrey
  Box(XSchritt*10,YSchritt*5,xSchritt*3,YSchritt*2,$A0A0A0);lighgrey
  Box(XSchritt*13,YSchritt*5,xSchritt*3,YSchritt*2,$FFFFFF);white

  Box(XSchritt*4,YSchritt*7,xSchritt*12,YSchritt*3,$FFFFFF);white
  Box(XSchritt*6,YSchritt*7+1,xSchritt*8,YSchritt-1,$000000);black
  Box(XSchritt*5.5,YSchritt*8,xSchritt*10.5,YSchritt,$505050);darkgrey

  For I=1 To 5
   Box(XSchritt*6 + (I* XSchritt/3),YSchritt*8,xSchritt/6,YSchritt,$FFFFFF);white
   Box(XSchritt*6 + XSchritt/6 + (I*XSchritt/3),YSchritt*8,xSchritt/6,YSchritt,$000000);white
   ;Box(XSchritt*4.25+ I*(XSchritt/4),YSchritt*8,xSchritt/4,YSchritt,$000000);black
  Next I

  For I=1 To 10
   Box(XSchritt*8 + (I* XSchritt/6),YSchritt*8,xSchritt/12,YSchritt,$FFFFFF);white
   Box(XSchritt*8 + XSchritt/12 + (I*XSchritt/6),YSchritt*8,xSchritt/12,YSchritt,$000000);white
   ;Box(XSchritt*4.25+ I*(XSchritt/4),YSchritt*8,xSchritt/4,YSchritt,$000000);black
  Next I

  mschritt=2
  For I=1 To 20
   Box(XSchritt*10.5 + (I* Mschritt*2),YSchritt*8,mSchritt,YSchritt,$FFFFFF);white
   Box(XSchritt*10.5 + 2 + (I*mSchritt*2),YSchritt*8,mschritt,YSchritt,$000000);white
   ;Box(XSchritt*4.25+ I*(XSchritt/4),YSchritt*8,xSchritt/4,YSchritt,$000000);black
  Next I
  
  
  Box(XSchritt*13,YSchritt*8,xSchritt*2.5,YSchritt,RGB(174,84,0));brown
  
  FrontColor($FF,$FF,$FF)
  DrawingFont(FontID()) 
  Locate((#SCREEN_X - TextLength(sender) )/2,YSchritt*7-2)
  DrawText(Sender)
  
  LineXY(#SCREEN_X/2, YSchritt*6,#SCREEN_X/2, YSchritt*9 , $FFFFFF) 
  LineXY(#SCREEN_X/2+xSchritt/4, YSchritt*9,#SCREEN_X/2+xSchritt/4, YSchritt*10, $000000) 
  LineXY(xSchritt*9.75, YSchritt*9,#SCREEN_X/2+xSchritt/4, YSchritt*9, $000000) 
  LineXY(xSchritt*9.75, YSchritt*9,#SCREEN_X/2+xSchritt/4, YSchritt*10, $000000) 
  FillArea(#SCREEN_X/2, YSchritt*9.1, 0, 0) 


  Box(XSchritt*4,YSchritt*10,xSchritt*8,YSchritt,$3333FF);red
  Box(XSchritt*4,YSchritt*11,xSchritt*8,YSchritt,$FF3333);blue
  Box(XSchritt*12,YSchritt*10,xSchritt*4,YSchritt*2,$505050);darkgrey

  ;Draw circle
  DrawingMode(4)
  Ellipse(#SCREEN_X/2, #SCREEN_Y/2, #SCREEN_Y/2 -1,#SCREEN_Y/2 -1 , $FFFFFF) 
  EndIf
  If Mode=2
   For y = 0 To #SCREEN_Y 
    For x = 0 To #SCREEN_X 
          noise = seed; 
          noise = noise >> 3 
          noise = noise ! seed 
          carry = noise & 1 
          seed = seed >> 1 
          seed = seed | ( carry << 30) 
          noise = noise & $FF 
           
          *Screen.LONG = DrawingBuffer()
          *Screen + (Pitch * y) +  (x*4)  
          ;*Screen\l =Random(1) * $FFFFFF
          *Screen\l = (noise<<16) | (noise << 8) | noise 
    Next x 
   Next y 
  EndIf
  StopDrawing()
 EndIf
 Delay(1)
 ExamineKeyboard()
 Until KeyboardPushed(#PB_Key_Escape)
  
Else
  MessageRequester("Error", "Can't open a 640*480 - 16 bit screen !", 0)
EndIf
GlobalFree_(mem1)
GlobalFree_(mem2)
End
Rings hat geschrieben:ziert sich nich beim zitieren
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Bei mir beendet sich das Programm sofort :(. Ich sehe zwar kurz nur eine Frame aber dann ist auch Programm sofort wieder weg. Wenn ich den Debugger mit starte wird der gleich mit beendet (ich hab zum test mal ein paar test strings geschrieben). Hab PB 3.92 mit Win XP SP1.
Bild
Benutzeravatar
bluejoke
Beiträge: 1244
Registriert: 08.09.2004 16:33
Kontaktdaten:

Beitrag von bluejoke »

Geilooo!

Ich hab Bennys TV-Noise als Bildschirmschoner, machst du aus deinem auch noch einen?
Ich bin Ausländer - fast überall
Windows XP Pro SP2 - PB 4.00
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

:mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen:

Meine Eltern waren erstmal erschreckt, als ich denen das Ding vorgeführt hab. Bei mir stürtzt nichts ab.
Zuletzt geändert von DarkDragon am 22.02.2005 18:32, insgesamt 1-mal geändert.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Rob
Shadow Admin
Beiträge: 258
Registriert: 26.08.2004 01:39
Kontaktdaten:

Beitrag von Rob »

Das ist gut ^_^
Nur stürzt es leider nach dem ersten Testbild ab: "The specific output is NULL" in Zeile 114 (StartDrawing(ScreenOutput()))Hab PB 3.92.
Build a man a fire and he's warm for a day. Set a man on fire and he's warm for the rest of his life
Benutzeravatar
bluejoke
Beiträge: 1244
Registriert: 08.09.2004 16:33
Kontaktdaten:

Beitrag von bluejoke »

Die Exe funzt bei mir auf jeden Fall tadellos. Mitm source hab ichs nicht probiert.
WinXP Sp.1
Ich bin Ausländer - fast überall
Windows XP Pro SP2 - PB 4.00
Benutzeravatar
benny
Beiträge: 383
Registriert: 29.08.2004 09:18
Wohnort: Am Ende des www's
Kontaktdaten:

Beitrag von benny »

Probiert mal Zeile 2o5 + 2o6 mit folgenden zu ersetzen:

Code: Alles auswählen

   For y = 0 To #SCREEN_Y-1
    For x = 0 To #SCREEN_X-1

@Rings:

Sauber gemacht ... gefällt mir :!:
So long,
benny!
.
nur t0te f1sche schw1mmen m1t dem str0m - 00100 !
orange-blue
Beiträge: 556
Registriert: 04.09.2004 22:23
Kontaktdaten:

Beitrag von orange-blue »

Gefallt ma sehr gut!
Eigentlich könnte man aus diesen ganzen Sachen/Effekten eine PB-Bildschrimschoner Sammlung machen! :mrgreen:
Leo
Beiträge: 420
Registriert: 26.10.2004 18:26

Beitrag von Leo »

Sehr schön :allright:

Ich hatte fast das Gefühl, wirklich TV zu gucken ^^
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Nachdem ich die Änderung von Benny eingebaut habe funzt beides :allright:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten