[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