[B+] Sound Effect Control (Spielerei)

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Xenon

Betreff: [B+] Sound Effect Control (Spielerei)

BeitragSa, Nov 06, 2004 1:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

hab das aus Spaß gemacht, beinhaltet aber nur 2 Effekte die ganz spaßig sind aber beim Musikhören nicht wirklich zum gebrauchen sind =)
Ahja wenn keine Musik oder Sound läuft, werdet ihr von den Effekten nix hören =)

Für einen gewissen Teil hab ich ganxtas (buggy) FormDesigner genommen =)
Ich werde nun diesen Programm nach C++ portieren und wenn ihr wollt auch davon den Code posten...

Mfg Xenon

winmm.decls
BlitzBasic: [AUSKLAPPEN]
.lib "winmm.dll"
waveOutSetVolume%(hwaveout%, volume%):"waveOutSetVolume"
waveOutGetVOlume%(hwaveout%, volumebank*):"waveOutGetVolume"


sec.bb
BlitzBasic: [AUSKLAPPEN]
Local hwndMain = CreateWindow("Sound Effect Control", 284, 231, 258, 237, 0, 1)
Global rbNone = CreateButton("None", 8, 8, 49, 17, hwndMain,3)
SetButtonState rbNone, 1
Global rbBalance = CreateButton("Balance", 8, 32, 57, 17, hwndMain,3)
Global rbVolume = CreateButton("Volume", 8, 56, 57, 17, hwndMain,3)
Local lbMin = CreateLabel("Min Value:", 8, 88, 50, 13, hwndMain)
Local lbMax = CreateLabel("Max Value:", 8, 120, 53, 13, hwndMain)
Local lbUpdate = CreateLabel("Update:", 8, 152, 38, 13, hwndMain)
Local lbVolume = CreateLabel("Volume:", 8, 184, 38, 13, hwndMain)
Global edUpdate = CreateTextField(72, 152, 65, 21, hwndMain)
SetGadgetText edUpdate,""
Global edMax = CreateTextField(72, 120, 65, 21, hwndMain)
SetGadgetText edMax,""
Global edMin = CreateTextField(72, 88, 65, 21, hwndMain)
SetGadgetText edMin,""
Global edVolume = CreateTextField(72, 184, 65, 21, hwndMain)
SetGadgetText edVolume,""
Local btUpdate = CreateButton("Update", 72, 8, 65, 25, hwndMain)
Local btQuit = CreateButton("Quit", 72, 48, 65, 25, hwndMain)
Local canvas = CreateCanvas(145, 8, 100, 197, hwndMain)

Global max, min, update, effect
Global volume = GetVolume()
waveOutSetVolume(0, volume)

SetGadgetText edVolume, Hex(volume)
SetGadgetText edMax, "FFFF"
SetGadgetText edMin, "0000"
SetGadgetText edUpdate, "FFFF"

Local time# = 0
Local OneVlm# = volume And $FFFF
Local lasttime = MilliSecs()

SetBuffer CanvasBuffer(canvas)

Repeat
Select WaitEvent(0)
Case $803
End
Case $401
Select EventSource()
Case btUpdate
Input
Case btQuit
End
End Select
End Select
time = (MilliSecs()-lasttime)/1000.0
lasttime = MilliSecs()

If effect <> 0 Then
OneVlm = OneVlm + (update*time)
If OneVlm > max Then
OneVlm = max
update = -update
Else If OneVlm < min
OneVlm = min
update = -update
End If

volume = Int(OneVlm) And $FFFF

If effect = 1 Then
volume = volume Or (($FFFF - volume) Shl 16)
Else If effect = 2
volume = volume Or (volume Shl 16)
End If
End If

waveOutSetVolume(0, volume)

Cls

Rect 10, 187-((volume And $FFFF)/65535.0*177), 35, ((volume And $FFFF)/65535.0*177)
Rect 55, 187-(((volume Shr 16) And $FFFF)/65535.0*177), 35, (((volume Shr 16) And $FFFF)/65535.0*177)

FlipCanvas canvas
Forever


Function Input()
If ButtonState(rbNone) Then
effect = 0
Else If ButtonState(rbBalance) Then
effect = 1
Else
effect = 2
End If
update = HexToInt(TextFieldText(edUpdate))
min = HexToInt(TextFieldText(edMin)) And $FFFF
max = HexToInt(TextFieldText(edMax)) And $FFFF
volume = HexToInt(TextFieldText(edVolume))
End Function

Function GetVolume()
Local bank = CreateBank(4)

waveOutGetVolume(0, bank)

Local volume = PeekInt(bank, 0)

FreeBank bank

Return volume
End Function

Function HexToInt(s$)
If Len(s) > 8 Then
s = Left(s, 8)
End If

s = Upper(s)

Local i, char$
Local num = 0

For i = 1 To Len(s)
char = Mid(s, i, 1)
If Instr("0123456789ABCDEF", char) Then
If Instr("ABCDEF", char) Then
num = (num Shl 4) Or (Asc(char)-Asc("A")+10)
Else
num = (num Shl 4) Or (Asc(char)-Asc("0"))
End If
Else
Return 0
End If
Next

Return num
End Function

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group