' Digitale Sounds spielen @lesen @einschalten ' ' Ton erklingt solange, bis eine Maustaste gedrückt wird REPEAT UNTIL MOUSEK ' @ausschalten END ' Hauptprogramm Ende ' PROCEDURE lesen ' Um die Routine allgemein zu halten, wird FILESELECT benutzt FILESELECT "Sample laden","Laden",":",sample$ ' ' Sicherheitsabfrage, ob überhaupt ein Sample geladen werden ' soll IF sample$="" OR RIGHT$(sample$)=":" PRINT "Kein Sample laden ?" END ENDIF ' ' Die Länge des Samples ermitteln OPEN "I",#1,sample$ lÄnge&=LOF(#1) CLOSE #1 ' Die Wortlänge des Samples darf nicht 65535 (=&Hffff) überschreiten, ' da das Audio-Datenlängen-Register nur wortlang ist. IF SHR(lÄnge&,1)>65000 PRINT "Sampledatei zu lang" END ENDIF ' ' Reservierung des erforderlichen Datenspeichers. ' Chip-Memory soll reserviert werden, darum Code &H2. speicheradr%=MALLOC(lÄnge&,&H2) ' ' Sicherheitsabfrage, ob der Speicher reserviert werden konnte IF speicheradr%=0 PRINT "Speicher kann nicht reserviert werden!" PRINT "Bitte alle anderen Fenster oder Programme schließen, bzw. beenden!" END ENDIF ' ' Informationen ausgeben: PRINT "Sample-Namen: ";sample$ PRINT "Größe: ";lÄnge& PRINT "Adresse: ";HEX$(speicheradr%) ' Das eigentliche Laden: BLOAD sample$,speicheradr% RETURN PROCEDURE einschalten ' Jetzt werden die Audio-Register für Kanal 0 mit Daten versorgt DPOKE &HDFF096,1 ! DMA Kanal 0 stoppen LONG{&HDFF0A0}=speicheradr% ! Adresse der Daten übergeben DPOKE &HDFF0A4,SHR(lÄnge&,1) ! Länge in Worten übergeben DPOKE &HDFF0A6,100 ! Sample Period setzen DPOKE &HDFF0A8,64 ! Lautstärke einstellen DPOKE &HDFF096,&H8201 ! DMA Kanal 0 einschalten RETURN PROCEDURE ausschalten ' Ausschalten des Tons und Speicherrückgabe DPOKE &HDFF096,1 ! DMA stoppen = Ton aus frei%=MFREE(speicheradr%,lÄnge&) ! Speicher freigeben PRINT PRINT "Freigegeben:";frei% RETURN