.pl72 .mt3 .mb2 .po4 Nutzun de Soundkan{le PLA Tongenerierun mittel Notenname bzw -nummern PLAY(n Abfrag de Musikpuffer SOUN Direkt Programmierun de Soundgenerators Mi de i Computergrundger{ vorhandene Soundgenerato k|nne f} di einzelne Tonkan{l (max Kan{l 1) beliebig T|n bzw Rausche (nu mi Sound i de verschiedenste Frequenze erzeug werden De Tonumfan betr{g Oktaven Weiterhi gib e fes vorgegeben H}llkurven dere Abarbeitungsgeschwindigkei ver{nderlic ist. Nac de Netzeinschalten mi de RBASIC-Befeh BEE un be jede Fehler meldun wir de Soundgenerato mi Standardparameter initialisiert. A End diese Abschnitte folg ein zusammenfassend Darstellun de Anweisunge PLA un SOUND. Tongenerierung mittels Notennamen Format: PLAY zka(,zkb(,zkc)) zk - Zeichenkett (Konstant ode Variable f} de jeweilige Soundkanal di de z spielende Tonverlau beinhaltet Di Zuordnun de Zeichenkette z de Tonkan{le erfolg entsprechen ihre Positio i de PLAY-Anweisung d.h zk wir de Kana A usw zugewiesen. Funktion Ei z spielende Tonverlau wir mi Hilf spezielle Musik- Macro-Kommando beschrieben Au dies Weis k|nne u.a di Note direk i zk stehen De Leistungsumfan de PLAY-Anwei sun entsprich de de DRAW-Anweisun f} grafisch Ausgaben. Musik-Makro-Kommandos An Bn Cn Dn En Fn G De erst Buchstab stell di Notenbezeich- A#n,..,G# bzw.A+n,..,G+ nun da (de deutsche Not entsprich A-n,...,G- (n=1...64 dabe di international Bezeichnun B) Di (Standard n=4 Halbt|n werde durc di nachgestellte Zeiche ode (z.B Fi mi F ode F+ bzw durc da Zeiche - (z.B De mi D- gekennzeichnet Ei ode bzw ei - bedeutet da ei Halbto h|he bzw tiefe gespiel wird. De Paramete gib di L{ng de Not i 1/n-te a (1/1 1/2 1/4..,1/64) E k|nne auc Zwischenwert (z.B n=3 angegebe werden. Is n= bzw nich angegeben s wir automatisc di L{ng angenommen di durc den Befehl L definiert wurde. Beispie 1 1 BEE :RE Standardwert einstellen 20 PLAY "C4 D8 E8 F2 G4 A8 B8 C2":REM Tonleiter mit unter- schiedlich langen Noten 1) z.Zt. (bis Ende 1990) ist nur Kanal A im vollen Umfang nutzbar. .pa Ln (n=1..64) Einstellen der L{nge (in 1/n-tel) f}r die (Standard n=4 Noten dene kei L{ngenparamete folgt Di Einstellun kan f} jede Kana getrenn erfolgen Wir nich angegeben s wir n= als l{nge eingestellt. Beispiel 2: 10 BEEP :REM Standardwerte einstellen 15 PLAY "L8" :REM Notenl{nge f}r Kanal A 20 PLAY "C4 D E F2 G4 A B C2" :REM Tonleiter wie im Beispiel 1 Nn(;l (n=1..95 l=1..64 Festlege de z spielende Not anhan ihre Positio innerhal de chromatische Tonleiter d.h vo tiefste (n=1 bi zu h|chste To (n=95 mi alle Halbt|nen Di L{ng (i 1/l-tel de entsprechende Not kan durc Angab eine 2 Parameter (l eingestell werden Is kei L{ngenparamete angegeben s wir di f} de jeweilige Kanal eingestellte Notenl{nge benutzt. Beispie 3 I Unterschie z de vorangegangene Beispiele wir di letzt Not de Tonleite i de 5 Oktav gespiel (PLA "N48 entspricht PLAY "O5 C"). 10 BEEP :REM Standardwerte einstellen 20 PLAY "L8" :REM Notenl{nge f}r Kanal A 30 PLAY "N36;4 N38 N40 N41;2 N43;4 N45 N47 N48;2" O (n=1..8 Mi diese Macro-Kommand kan di momenta (Standard n=4 eingestellt Oktav (nac Netzeinschalte bzw BEE gil n=4 ver{nder werden Di Einstellun de Oktav kan f} jede Kana gesonder erfolge un beh{l ihr G}ltigkei bi zu n{chste O-Kommando Wir nich angegeben s gil n=4 Ein Oktav beginn immer bei C und endet bei B (H). Beispie 4 Dreistimmig Tonausgabe wobe Kana i de 4 un Kana i de 5 Oktav spielt I Kana wir dagege nu di Not i der 5. Oktave gespielt. 10 BEEP 20 PLAY "L2","L2","L2 O5" :REM Notenl{nge vereinbaren 30 PLAY "GGGF+G","B O5 C O4 B A B","DCDDD" R (n=1..64 Definier ein Paus bestimmte L{ng i de (Standard n=4 For 1/n Sinnvol sin z.B 1/1 1/2 1/4 ..,1/6 Pausen Zwischenwert sin ebenfall m|glich Wir nich angegeben s gil ebenfalls der Standardwert (n=4). Beispie 5 I Gegensat z de Tonleite i Beispie is i folgende Beispie ein deutlich Paus (R4 zwische de Note un h|rbar. 10 BEEP :REM Standardwerte einstellen 20 PLAY "L8" :REM Notenl{nge f}r Kanal A 30 PLAY "C4 D E F4 R4 G4 A B O5 C2" .pa M (n=1..65535 Festlege de Periodendaue f} di mi de (Standard n=255 Befeh festgelegt H}llkurve J kleine ist dest schnelle wir di charakteristi sche Wellenform (siehe S) durchlaufen. Beispie 6 I diese Beispie wir di gleich Tonfolg wi i Beispie ausgegeben allerding wir de Lautst{rkeverlau durc ein H}llkurve (in Zeile 25) bestimmt. 10 BEEP :REM Standardwerte einstellen 20 PLAY "L8" :REM Notenl{nge f}r Kanal A 25 PLAY "S1 M1800" :REM max. Lautst{rke, abschwellend 30 PLAY "C4 D E F4 R4 G4 A B O5 C2" S (n=1..15 Festlege de Lautst{rkeverlaufe eine Ton folg mittel verschiedene H}llkurven De Lautst{rkeverlau wir somi durc di jewei lig H}llkurv gesteuert d.h ein zuvo mi V programmiert Lautst{rk is wirkungslos Einig Paramete ergebe di gleich H}ll kurve. Bei fehlendem Parameter gilt n=1. Folgende H}llkurven sind m|glich: Parameter n ! Kurve ! Lautst{rkeverlauf ----------------------------------------- 0,1,2,3,9 ! @_____ ! sofort max. Lautst{rke, dann abklingend und aus 4,5,6,7,15 ! /_____ ! ansteigend bis max. Lautst{rke, dann aus 8 ! @@@@@@ ! anfangs ganz laut, dann leiser werdend und ! ! danach wieder ganz laut usw. 10 ! @/@/@/ ! anfangs ganz laut, dann abklingend und wieder ! ! langsam ansteigend usw. 11 ! @ ! anfangs ganz laut, dann leiser werdend und ! ! danach sofort max. Lautst{rke, so bleibend 12 ! ////// ! ansteigend bis max. Lautst{rke, dann aus usw. 13 ! / ! ansteigend auf max. Lautst{rke, so bleibend 14 ! /@/@/@ ! langsam ansteigend, danach abklingend usw. .. @ ^ Schr{gstrich Ziffer 3 Beispie 7 Dreistimmig Tonausgab mi jeweil aktive H}llkurve I diese Fal k|nne all Kan{l nu mi de gleiche H}llkurv arbeiten (Beachte Si bitt di weite unte angegebene Hinweise zu diesem Sachverhalt !) 10 BEEP 15 PLAY "S1 M1800","S1 M1800","S1 M1800 O5":REM H}llkurve 1 20 PLAY "GGGF+G","B O5 C O4 BAB","DEDDD" :REM alles 1/4-Noten T (n=32..255 Festlege de Tongeschwindigkeit De Para (Standard n=120 mete gib di Anzah de z spielende 1/4-Note pr Minut an Dami k|nne Musikst}ck seh variabe i Temp gestalte werden Be fehlende Paramete gil n=120 Da Kommand is ebenfall f} di Kan{l getrennt verwendbar. Beispie 8 Durc Einf}ge de Zeil 2 i da Program vo Beispie ergib sic da folgend Beispiel Hie kan durc Variatio de Parameter vo (i Zeil 28 desse Wirkun erprob werden. 10 BEEP 20 PLAY "L8" :REM Notenl{nge f}r Kanal A 25 PLAY "S1 M1800" :REM max. Lautst{rke, abschwellend 28 PLAY "T200" :REM 200 1/4-Noten pro Minute 30 PLAY "C4 D E F4 R4 G4 A B O5 C2" V (n=0..15 Einstelle de Lautst{rk f} di einzelne (Standard n=8 Kan{le Ein zuvo aktiviert H}llkurv wir mi de Befeh f} de betreffende Kana wirkungslos. Be n= wir f} de jeweilige Kana di Tonausgab beendet Fehl de Parameter s wird n=8 verwendet. Beispiel 9: Wird die Zeile 25 vom Beispiel 8 durch die Zeile 25 PLAY "S1 M1800 V4" :REM H}llkurve wirkungslos !!! ersetzt s wir mi V ein konstant Lautst{rk eingestellt d.h. die die zuvor vereinbarte H}llkurve ist wirkungslos. (Punkt Durc Anf}ge eine Punkte a ein Not bzw Paus wir di Not bzw Paus u di H{lft des urspr}nglichen Wertes verl{ngert. string F}hr di i strin enthaltene Macro Kommandos au. Beispie 10 Di z spielend Tonfolg wir eine Zeichenkettenvariabl zugewiesen di ]bergab de Variabl a di PLAY-Anweisun erfolgt in der geforderten Form. 10 BEEP: A$="C E G" :REM Tonfolge f}r Kanal A und B 20 PLAY "O4","O5" :REM Kanal B in der 5. Oktave 30 PLAY "XA$;","XA$;" :REM zweistimmige Tonausgabe =num-variable Erlaub di Verwendun eine numerische Variable zu Angab de Paramete (n be de zuvor angef}hrten Macro-Kommandos. (Numerisch Ausdr}ck sin nich erlaubt f}hre be Verwendun jedoc z keine Fehlermeldung !) Beispiel 11: 10 BEEP 20 FOR I=36 TO 48 30 PLAY "N=I;" :REM Ausgabe der chromatischen Tonleiter 40 NEXT : in der 4. Oktave Hinweise 1 Fall be mehrstimmige Tonausgab f} mehrer Kan{l H}ll kurve programmier werden komm nu di H}llkurv de h|chstwertigen i Abarbeitun befindliche Kanal zu An wendung Al h|chstwertige gil de jeweil a weiteste rechts stehende Kanal innerhalb der PLAY-Anweisung. 2 Wir i eine PLAY-Anweisun f} eine Kana sowoh da Macro Kommand al auc benutzt s wirk nu da i de Anweisung zuletzt angegebene Kommando. Abfrage der Musikpuffer D di Daue de Musikausgab abh{ngi vo de z spielende Noten Pausen usw ist kan e vorkommen da di Abarbeitun de PLAY-Anweisun (durc de BASIC-Interpreter ehe ferti is al di eigentlich Tonausgabe Da lieg daran da di dre Kan{l Puffe haben i dene durc de Inter prete di Macro-Kommando un Paramete i geeignete For abgeleg werden Da Lese diese Puffe un di ]bergab de Date a de Soundgenerato erfolg interruptgesteuert d.h unabh{ngi vo weitere Programm I manche F{lle kan e nu wichti sein da ma feststelle kann o i de Puffer noc Date f} di Abarbeitun vorhande sin ode nicht Dies Abfrage kann mit der Funktion PLAY(n) erfolgen. Format: PLAY(n) n - Nummer des Tonkanals Funktion Is da Ergebni diese Funktio gleic - (TRUE) s bedeute das da f} de angegebene Kana (be n=1,2,3 bzw be eine de dre Kan{l (n=0 noc Date i Musikpuffe vorhande sind Eine 0 (FALSE) gibt an, da~ keine Daten mehr vorhanden sind. Beispie 12 I diese Beispie erfolge di Ausschrifte 'Oktav ... fortlaufen ohn direkte Bezu zu tats{chliche Tonausgab Durc L|sche de Anweisun RE i Zeil 8 komm di Funktio PLAY(1 zu Anwendung Be erneute Star erfolge di Ausschriften synchron mit der Tonausgabe! 10 BEEP 20 FOR I=2 TO 5 30 PRINT "Oktave Nr. ";I 40 J=I*12 : X1=J : X2=J+4 : X3=J+7 50 PLAY "N=X1;" :REM Note C 60 PLAY "N=X2;" :REM Note E 70 PLAY "N=X3;" :REM Note G 80 REM IF PLAY(1)=-1 THEN 80 90 NEXT Direkte Programmierung des Soundgenerators Format: SOUND reg,par reg - Register des Soundgenerators (0...13) par - Parameter f}r das selektierte Register Bedeutung der einzelnen Register und der m|glichen Parameter: Registerpaa 0-1 Mi diese Registerpaa erfolg di Einstellun des pa 0...25 Frequenzwerte (FW de Tones welche i Kana (f}r Reg. 0) ausgegeben werden soll Dabe enth{l da Registe da Low-Byt (FL de pa 0...1 Frequenzwerte un da Registe da High-Byt (FH de (f}r Reg. 1) im Kanal A auszugebenden Frequenzwertes. Registerpaar 2-3: wie Registerpaar 0-1, aber f}r Kanal B Registerpaar 4-5: wie Registerpaar 0-1, aber f}r Kanal C Registe 6 Mi de Wer diese Register wir di Rauschfrequen pa 0...3 eingestellt d.h mi diese Paramete wir di h|chst m|glich Frequen de i Frequenzgemisc enthaltene Grundwelle festgelegt Mi par= wir di h|chst Frequen eingestellt Diese Registe wir f} all Kan{l verwendet d.h f} di mi Registe fest gelegten Kan{le gilt die gleiche Rauschfrequenz. Registe 7 Mi diese Registe werde di Kan{l ausgew{hlt f} di pa 0...3 ein Tonausgab und/ode da Rausche erfolge soll. Is da entsprechend Bi vo pa gesetzt s is di Betriebsar f} diese Kana aktiv andernfall inaktiv E k|nne auc beid Betriebsarte f} eine Kana gleichzeiti akti sein F} di einzelne Bit vo pa gilt folgende Zuordnung: Bit n = 0/1 -> Tonausgabe bzw. Rauschen aus/an n=0,1,2 -> Tonausgabe f}r Kanal A, B, C n=3,4,5 -> Rauschen -#- Registe 8,9,10 Dies Registe enthalte di Lautst{rkewert f} di pa 0...1 Kan{l A B bzw C Mi par= wir f} de jeweilige Kana jeglich Tonausgab abgeschalten Mi par=1-1 wir di Lautst{rk eingestellt Be par=1 wir di H}llkurv aktiviert d.h di Lautst{rk wir entsprechen de eingestellte H}llkurv (mi Registe 13 un de H}ll kurvenfrequenz (Register 11/12) ver{ndert. Registerpaa 11-12: Mi diese Registerpaa erfolg di Einstellun de par=0...25 H}llkurvenfrequenz wobe Registe 1 de Low-Byt (FLH (f}r beide Reg.) und Register 12 dem High-Byte (FHH) entspricht. J kleine de Frequenzwer (FHH*256+FHL ist dest schneller wird die H}llkurve durchlaufen. Registe 13 De Wer diese Register gib an nac welche H}llkurv di Lautst{rk ver{nder wird Di Zuordnun de m|gli che H}llkurve z de Parameter is dieselb wi be de PLAY-Anweisung Dami ein H}llkurv wirksa wird mu dies mi de Wer 1 i zugeh|rige Lautst{rke registe aktivier werden De Wer diese Register gil einheitlich f}r alle Kan{le (analog zu Register 6). Hinweise: 1. F}r die Tonausgabe mu~ f}r den jeweiligen Kanal - im Register 7 das Bit f}r die Tonausgabe gleich 1 sein, - im Lautst{rkeregister ein Wert von 1-15 stehen, sowie - ein geeigneter Frequenzwert (FW) in den Tonregistern stehen. 2. Damit f}r einen beliebigen Kanal Rauschen erzeugt wird, mu~ - im Register 6 eine Rauschfrequenz eingestellt werden, - im Register 7 das Bit f}r Rauschen gleich 1 sein, sowie - im Lautst{rkeregister ein Wert von 1-15 stehen. 3 Fall Rausche und/ode Tonausgab mi aktive H}llkurv mehrstimmi programmier wird s arbeite di beteiligte Kan{l mi de gleiche Rauschfrequen und/ode de gleiche H}llkurve. 4 Wen di Registe de Soundgenerator programmier sind erfolg di Tonausgab bi zu erneute Programmierun diese Registe st{ndig D.h w{hren de Rechne ander Ding bearbeitet, kann weiterhin eine Tonausgabe erfolgen. Beispiel Mi de folgende Beispie wir da Ger{usc eine Hubschrauber angedeutet Durc Dr}cke eine Tast wir di Tonausgab beendet 10 SOUND 0,111 :REM Frequenzwert (Low-Byte) 20 SOUND 1,0 : f}r Kanal A (High-Byte) 30 SOUND 6,30 :REM Rauschart einstellen 40 SOUND 8,16 :REM H}llkurve f}r Kanal A an 50 SOUND 11,44 :REM H}llkurvenfrequenz (Low-Byte) 60 SOUND 12,1 : (High-Byte) 70 SOUND 13,14 :REM H}llkurvenform (auf- und abschwellend) 80 SOUND 7,&B00001001 :REM Kanal A Tonausgabe u. Rauschen an 90 IF INKEY$ =""THEN 90 100 BEEP :REM Standartwerte einstellen .pa Umrechnungen zwischen der echten Tonfrequenz und dem Frequenzwert F echte Tonfrequenz in Hz FT Taktfrequenz des Rechners (3750000) in Hz FW Frequenzwert FL Low-Byte des Frequenzwertes FH High-Byte " " Tonfrequenz in Frequenzwert FW = FT / (32 * F) Es gilt: 28 Hz < F < 117188 Hz FL = FW MOD 256 FH = FW / 256 Frequenzwert in Tonfrequenz FW = FL + FH * 256 Es gilt: 0 < FL < 255 F = FT / (32 * FW) 0 < FH < 15 Kurz}bersicht zu PLAY und SOUND PLAY-Kommando ! Funktion -----------------!--------------------------------------------------- C D E F G A B ! Tonname mit m|glicher L{ngenangabe (1...64) und ! Tonh|henver{nderung um 1/2 Ton (+ # -) O ! Auswahl zwischen 8 Oktaven (1...8) N ! Tonh|he durch Zahlenangabe (1...96) L ! Tonl{nge (1...64) . ! Tonl{nge um die H{lfte verl{ngern R ! Pause (1...64) T ! Tempo (32...255) V ! Lautst{rke (0...15) S ! H}llkurve (1,4,8,10,11,12,13,14) M ! H}llkurvenabstimmung (1...65535) Sound- ! Funktion ! Bit register ! ! 7 ! 6 ! 5 ! 4 ! 3 ! 2 ! 1 ! 0 ----------------------------------------------------------------- 0 ! Tonfrequenz Kanal A ! FL(A) FH(A) -------------------------------------------------------------- 2 ! Tonfrequenz Kanal B ! FL(B) 3 ! ! x ! x ! x ! x ! FH(B) -------------------------------------------------------------- 4 ! Tonfrequenz Kanal C ! FL(C) 5 ! ! x ! x ! x ! x ! FH(C) -------------------------------------------------------------- 6 ! Rauschfrequenz ! x ! x ! x ! RP --------------------------------------------------------- 7 ! Auswahl Ton- bzw. ! ! Rauschen ! Ton ! Rauschkanal ! x ! x ! C ! B ! A ! C ! B ! A -------------------------------------------------------- 8 ! A ! x ! x ! x ! H ! L(A) 9 ! Lautst{rke Kanal B ! x ! x ! x ! H ! L(B) 10 ! C ! x ! x ! x ! H ! L(C) -------------------------------------------------------------- 11 ! H}llkurvenfrequenz ! FHL 12 ! ! FHH ---------------------------------------------------- 13 ! H}llkurvenform ! x ! x ! x ! x ! HKF ------------------------------------------------------------ Parameter f}r Tonfrequenz FW = 3750000 / (32 * F) ; F - reale Tonfrequenz (in Hz) FH(n) = FW /256 FL(n) = FW mod 256 Rauschparameter RP = 3750000 / (32 * F) ; F - max. Frequenzanteil im Rauschen (3780 Hz < F < 117188 Hz) Kanalauswahl ! 7 6 5 4 3 2 1 0 ! ! x ! x ! ! ! ! ! ! ! Bit n = 0/1 --> Kanal aus/ein --------------------------- ! ! ! ! ! ! ! ! ! ! ! ---- Kanal A Tonausgabe ! ! ! ! -------- " B " ! ! ! ------------ " C " ! ! ! ! ! ---------------- " A Rauschen ! -------------------- " B " ------------------------ " C " Lautst{rkeeinstellung ! 7 6 5 4 3 2 1 0 ! ! x ! x ! x ! 1 ! ! ! ! --------------------------- ! ! ! ! ! ! ---------------------- Lautst{rke L (0...15) ! -------------------------- =1 Aktivierung H}llkurve =0 konstante Lautst{rke entsprechend Bit 0-3 H}llkurvenform (HKF) Nr. ! Bit ! Kurvenform ! 7..4 ! 3 ! 2 ! 1 ! 0 ! ------------------------ 0 ! x ! 0 ! 0 ! x ! x ! @_____ x - beliebig (0/1) 4 ! x ! 0 ! 1 ! x ! x ! /_____ 8 ! x ! 1 ! 0 ! 0 ! 0 ! @@@@@@ 9 ! x ! 1 ! 0 ! 0 ! 1 ! @_____ 10 ! x ! 1 ! 0 ! 1 ! 0 ! @/@/@/ 11 ! x ! 1 ! 0 ! 1 ! 1 ! @ 12 ! x ! 1 ! 1 ! 0 ! 0 ! ////// 13 ! x ! 1 ! 1 ! 0 ! 1 ! / 14 ! x ! 1 ! 1 ! 1 ! 0 ! /@/@/@ 15 ! x ! 1 ! 1 ! 1 ! 1 ! /_____ @ ^ Schr{gstrich Ziffer 3