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.
Poser
Beiträge: 33
Registriert: 09.03.2005 21:02

Beitrag von Poser »

Schmiert bei Win98 ab: Schwarzer Screen und nix geht mehr. Nur ein Neustart :-( Liegt aber wohl nur an der Tonausgabe...
Benutzeravatar
Rings
Beiträge: 977
Registriert: 29.08.2004 08:48

Beitrag von Rings »

Pech wer heutzutage immer noch Win89 nutzt ;)
Rings hat geschrieben:ziert sich nich beim zitieren
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

Sei nicht so schadenfroh @Rings!

Obwohl... :lol:


Greetz Laurin

PS: Poser, hast du schon andere Treiber probiert?
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

sonst mach den Ton doch aus. :mrgreen:

Code: Alles auswählen

If Mode=1
    Mode=2
   ; result=sndPlaySound_(mem2,#SoundASync |#SoundMemory|#SoundLoop )
   Else
    Mode=1
    ;result=sndPlaySound_(mem1,#SoundASync |#SoundMemory|#SoundLoop )
   EndIf
   T0=T1
  EndIf 
So wird der Bildschirm nicht schwarz und Win98 läuft weiter :wink:
Oder anstelle der vielen Pokes und Mem-APIS für die Erstellung der Wav
mal versuchen zwei wav-dateien aufzunehmen und diese
includen und mit Load-, Catch- und Playsound() den Ton einsetzen.
Dann wird es auch mit Win98 laufen.
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Hyper
Beiträge: 194
Registriert: 19.04.2005 19:14

Beitrag von Hyper »

Hallo Gefährten,

im Interesse der Allgemeinheit hier die Anpassung des herrlichen Progrämmchens auf PB 4.00:

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)
 SetGadgetFont( #PB_Default, FontID(#MyFontID))

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

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

 Repeat
 FlipBuffers()
 If IsScreenActive()
  ClearScreen(RGB($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(RGB ($FF,$FF,$FF))
  DrawingFont(FontID(#MyFontID))
 ; Locate((#SCREEN_X - TextLength(sender) )/2,YSchritt*7-2)
  DrawText((#SCREEN_X - TextWidth(sender)) /2,YSchritt*7-2,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 
PB 5.72
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

Das Programm ist nicht so ganz aktuell, oder?

Früher gab es nachts dieses Testbild mit Rauschen.
Heutzutage hüpfen da eher nackige Mädels rum.
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
Hyper
Beiträge: 194
Registriert: 19.04.2005 19:14

Beitrag von Hyper »

Und das mit PureBasic! Das wäre doch mal was zum Aschermittwoch :-)
PB 5.72
Benutzeravatar
dige
Beiträge: 1235
Registriert: 08.09.2004 08:53

Beitrag von dige »

cracht hier in Zeile 221

Code: Alles auswählen

*Screen\l = (Noise<<16) | (Noise << 8) | Noise
mit einem illegalen Memory Access
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Beitrag von rolaf »

dige hat geschrieben:cracht hier in Zeile 221

Code: Alles auswählen

*Screen\l = (Noise<<16) | (Noise << 8) | Noise
mit einem illegalen Memory Access
Bei mir ist Zeile 221 = "Next y" und crashen tut nix :)
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

weder noch.
wenn ihr zeilennummern nennt, dann stellt sicher, den code 1:1 kopiert zu haben.
Next y ist in 222. der Fehler ist in 220.

bestätigt: IMA auch hier!
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten