Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Hintergrundabspielen über PC-Speaker

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
coolMCcool



Anmeldungsdatum: 23.02.2005
Beiträge: 12
Wohnort: Berlin

BeitragVerfasst am: 18.10.2005, 17:47    Titel: Hintergrundabspielen über PC-Speaker Antworten mit Zitat

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 zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 18.10.2005, 19:01    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz