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] [EINKLAPPEN] .lib \"winmm.dll\" waveOutSetVolume%(hwaveout%, volume%):\"waveOutSetVolume\" waveOutGetVOlume%(hwaveout%, volumebank*):\"waveOutGetVolume\"
sec.bb
BlitzBasic: [AUSKLAPPEN] [EINKLAPPEN] 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
|