 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
coolMCcool
Anmeldungsdatum: 23.02.2005 Beiträge: 12 Wohnort: Berlin
|
Verfasst am: 18.10.2005, 17:47 Titel: Hintergrundabspielen über PC-Speaker |
|
|
Hallo liebe Programmierergemeinde,
mich plagt seit längeren der Gedanke, wie ich es ganz simpel lösen kann das unten aufgeführte unterprogramm "nebenbei" laufen zu lassen, ohne dass das Hauptprogramm davon beeinflusst wird, das u.g. unterprogramm jedoch jederzeit auch abgebrochen werden kann:
Quellcode:
InitSpeed = 10
FILE$ = "C:\... .wav"
SampleRate% = 22050
OUT &H43, &HB6
OUT &H42, &HFF
OUT &H42, 0
OUT &H43, &H90
R = INP (&H61) OR 3
OUT &H61, R
OPEN FILE$ FOR BINARY AS #1
z! = TIMER
speed = InitSpeed
DO
s$ = INPUT$(1, #1)
IF s$ <> "" THEN VOL% = ASC (s$) /4: Byte& = Byte& + 1
FOR a% = 1 to speed: Next a%
OUT &H42, VOL%
IF z! + 0.2 < TIMER THEN
z! = TIMER
speed = speed * (Byte& / (SampleRate% / 5))
Byte& = 0
IF speed < 0.1 THEN GOTO Fast:
END IF
LOOP WHILE NOT EOF (1)
GOTO Ende:
Fast:
DO
s$ = INPUT$ (1, #1)
IF s$ <> "" THEN VOL% = ASC (s$) / 4: Byte& = Byte& + 1
OUT &H42, VOL %
LOOP WHILE NOT EOF (1)
Ende:
OUT &H43, &HB6
R = INP (&H61) AND &HFC
OUT &H61, R
Soweit zum kleinen Programm. Wenn jemand weiß, wie ich es noch schneller kriege, bitte auch melden. Ich hoffe das Problem ist klar? Also ich weiß, dass es möglich ist, nur weiß ich nicht, wie es in Qbasic lösbar sein könnte. Vielen dank und einen schönen Abend noch.
cool MC cool
P.S. Ich liebe Maschinensprache. Sie ist so.... direkt  |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 18.10.2005, 19:01 Titel: |
|
|
Das kannst du mit ON TIMER() lösen:
Code: |
TIMER(1) ON
ON TIMER GOSUB DeinUnterprogramm
' Hauptprogramm...
END
DeinUnterprogramm:
' Deine SUB
RETURN
|
Dabei wird das, was unter DeinUnterprogramm steht nahezu parallel zum Hauptprog ausgeführt.
Lediglich bei INPUT/LINE INPUT klappt das nicht.
Das Abbrechen kannst du mit einer Variable lösen, die auf 1 gesetzt wird, wenn das (Unter-)Programm
nicht mehr ausgeführt werden soll.
Bsp:
Code: |
TIMER(1) ON
ON TIMER GOSUB ZeigeDatum
' Datum anzeigen
Datum = 1
' Hauptrogramm
DO
PRINT "Blablabla"
E$ = INKEY$
IF E$ = CHR$(13) THEN Datum = Datum XOR 1
LOOP
END
' Dein Unterprogramm
ZeigeDatum:
IF Datum THEN
PRINT DATE$
END IF
RETURN
|
Dabei wírd das Aufrufen der SUB durch Drücken der ENTER-Taste getoggelt.
Hoffe, ich konnte helfen,
jb |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|