
TV-Noise
- 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:
sonst mach den Ton doch aus.
So wird der Bildschirm nicht schwarz und Win98 läuft weiter
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.

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

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.
Hallo Gefährten,
im Interesse der Allgemeinheit hier die Anpassung des herrlichen Progrämmchens auf PB 4.00:
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
cracht hier in Zeile 221
mit einem illegalen Memory Access
Code: Alles auswählen
*Screen\l = (Noise<<16) | (Noise << 8) | Noise
"Papa, ich laufe schneller - dann ist es nicht so weit."
Bei mir ist Zeile 221 = "Next y" und crashen tut nixdige hat geschrieben:cracht hier in Zeile 221mit einem illegalen Memory AccessCode: Alles auswählen
*Screen\l = (Noise<<16) | (Noise << 8) | Noise

:::: WIN 10 :: PB 5.73 :: (x64) ::::
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22