home *** CD-ROM | disk | FTP | other *** search
/ Computer Club Elmshorn Atari PD / CCE_PD.iso / pc / 0600 / CCE_0616.ZIP / CCE_0616.PD / AUDIOFUN / AUDIOFUN.TXT < prev    next >
Text File  |  1993-05-30  |  31KB  |  1,082 lines

  1.  
  2.  
  3.                          AUDIOFUN V1.0
  4.  
  5.  
  6. 1. ALLGEMEINES
  7. --------------
  8.  
  9.    Mit dem  Programm  AUDIOFUN  können  Sie  den Soundchip (PSG)
  10. programmieren.   Interessant  ist  es  vor  allem für Leute, die
  11. Spiele  programmieren,  für  diese  aber  keine  digitalisierten
  12. Soundeffekte  benutzen wollen oder können - z.B. wegen Verbrauch
  13. von  Speicherplatz  und/oder Rechenzeit. Der PSG ist aber leider
  14. trotz vorhandenen Hüllkurvengenerator keine Ohrenweide.
  15.    Dieses Manko   soll   dieses   Programm  zumindest  zum  Teil
  16. beseitigen.  Für  jeden der drei Kanäle ist nun eine eigene (und
  17. echte!)  ADSR-Hüllkurve  sowie  diverse Effekte verfügbar. Jeder
  18. Kanal  ist  unabhängig und kann beliebig gestartet oder gestoppt
  19. werden.  Es ist allerdings nicht möglich, ellenlanges Gedudel zu
  20. erzeugen.  Vielmehr  kann  zu  Situationen  (Ball berührt Bande,
  21. Game   over   etc.)  ein  entsprechender  akustischer  Kommentar
  22. gegeben werden.
  23.  
  24.  
  25.  
  26. 1.1. Hardware
  27.  
  28.    Entwickelt habe  ich  dieses  Programm auf einem 1040 STE mit
  29. Farbmonitor.   Da  es  aber  vollständig in GEM eingebunden ist,
  30. sollte  es  mit sämtlichen Auflösungen ab 320x200 zurechtkommen,
  31. egal ob bunt oder monochrom.
  32.    Mit dem  Rechnermodell  sollte  es  eigentlich  ebenso  sein.
  33. Voraussetzung  ist, daß sowohl der TIMER_A und natürlich der PSG
  34. vorhanden sind.
  35.    Der Speicherbedarf  von  AUDIOFUN  ist gering und läuft daher
  36. auch auf kleinsten Modellen.
  37.  
  38.  
  39.  
  40. 1.2. Public Domain
  41.  
  42.    AUDIOFUN ist  öffentliches Gut! Das bedeutet für Sie, daß Sie
  43. dieses  Programm  kostenlos  benutzen,  kopieren und verschenken
  44. können  und  sollen. Wird dieses Programm verkauft, so darf sich
  45. der  Preis  nur  aus  dem  Kopieraufwand,  Porto  und Verpackung
  46. zusammensetzen!
  47.    Trotz sorgfältiger  Programmierung  sind  natürlich  Bugs nie
  48. auszuschließen.   Sollten  also  wider  erwarten  Fehlfunktionen
  49. auftreten,  bin  ich  für  eine  kurze  schriftliche  Mitteilung
  50. dankbar.  Aber  auch wenn Ihnen dieses Programm nur gefällt oder
  51. Sie  einen  Verbesserungsvorschlag  haben,  dürfen (und sollten)
  52. Sie mir eine (Ansichts-) Karte schicken! Meine Adresse lautet:
  53.  
  54.                         Harald Förster
  55.                         Tünkenhagen 1
  56.                         23552 Lübeck
  57.  
  58.  
  59.  
  60.                              - 1 -
  61.  
  62.  
  63.                          AUDIOFUN V1.0
  64.  
  65.  
  66. 1.3. Zwei in Einem
  67.  
  68.    Dieses Programm  besteht  eigentlich  aus zwei Programmen. Zu
  69. einem   ist   da  natürlich  AUDIOFUN,  welches  mit  Sozobon  C
  70. geschrieben  wurde. Hiermit können Sie Ihre Sounddaten eingeben,
  71. testen  und  bei  Bedarf ändern usw. Die fertige Datei wird dann
  72. auf Massenspeicher gesichert.
  73.    Das zweite     Programm     ist    der    SOUNDWORKER,    der
  74. Ausführgeschwindigkeit  zuliebe  mit TurboAss entwickelt. Dieses
  75. Programm  ist  in  der von Ihnen gesicherten Datei enthalten und
  76. kann  nun zu Ihrem Programm geladen werden, wobei es keine Rolle
  77. spielt,    welche    Programmiersprache   Sie   verwenden.   Der
  78. SOUNDWORKER  wird alle 20ms gestartet (Interrupt), berechnet die
  79. Sounddaten und schreibt sie in den PSG.
  80.    Da beide  Programme  also  unterschiedliche  Aufgaben  haben,
  81. wird  die  Beschreibung  getrennt erfolgen: erst AUDIOFUN, damit
  82. Sie  wissen,  wie  Sie Klänge einstellen und danach SOUNDWORKER,
  83. damit Sie diese Klänge auch ins eigene Programm bekommen.
  84.  
  85.  
  86.  
  87.  
  88.  
  89. 2. AUDIOFUN
  90. -----------
  91.  
  92.    Nach starten    des   Programms   sollten   Sie   am   oberen
  93. Bildschirmrand eine Menüzeile sehen.
  94.  
  95.  
  96.  
  97. 2.1. Audiofun
  98.  
  99.    Wie beim   Desktop   Zugriff   auf   die   Info-Box  und  den
  100. Accessories.
  101.  
  102.  
  103.  
  104. 2.2. File
  105.  
  106.    Ebenfalls kaum  ein  Unterschied  zu  anderen GEM-Programmen,
  107. trotzdem einige Erläuterungen.
  108.  
  109.  
  110. 2.2.1. New
  111.  
  112.    Es wird  eine  im Speicher stehende Datei kommplett gelöscht.
  113. Sollte  diese  noch  ungesichert  sein,  erscheint  vorher  eine
  114. Warnung.  Diese  Funktion  ist  nur  möglich,  wenn  es etwas zu
  115. löschen gibt!
  116.  
  117.  
  118.  
  119.  
  120.                              - 2 -
  121.  
  122.  
  123.                          AUDIOFUN V1.0
  124.  
  125.  
  126. 2.2.2. Load...
  127.  
  128.    Eine vorher  gesicherte Datei kann wieder geladen werden. Als
  129. Extension  habe  ich "FUN" gewählt, kann von Ihnen aber geändert
  130. werden.
  131.  
  132.  
  133. 2.2.3. Save
  134.  
  135.    Eine Datei  wird  gesichert. Diese Funktion ist erst möglich,
  136. wenn  ein gültiger Dateiname existiert, also nach Load oder Save
  137. as.
  138.  
  139.  
  140. 2.2.4. Save as...
  141.  
  142.    Wie bei  Save  wird eine Datei gesichert, nur können Sie hier
  143. ein  anderes Laufwerk auswählen und der Datei einen Namen geben.
  144. Diese Funktion ist erst möglich, wenn es etwas zu sichern gibt!
  145.    Wählen Sie  eine  schon  vorhandene  Datei,  die  nichts  mit
  146. AUDIOFUN   zu   tun   hat  (z.B.  DESKTOP.INF),  erscheint  eine
  147. Fehlermeldung.
  148.  
  149.  
  150. 2.2.5. Save DR
  151.  
  152.    Diese Funktion  ist  für  Sie  interessant, wenn Ihr Compiler
  153. das  Linkformat  von  Digital  Research  versteht.  Es  wird ein
  154. Objekt-File  gesichert,  daß Sie direkt zu Ihrem Programm linken
  155. können.
  156.    Eine so gesicherte Datei kann nicht mehr geladen werden!
  157.  
  158.  
  159. 2.2.6. Quit
  160.  
  161.    Das Programm  wird  verlassen.  Eine Rückfrage gibt es nicht,
  162. wohl aber eine Warnung im Falle einer ungesicherten Datei.
  163.  
  164.  
  165.  
  166. 2.3. Edit
  167.  
  168.    Unter diesem  Titel  befinden  sich  alle Einträge, die etwas
  169. mit  dem  PSG  zu tun haben. Tatsächlich dienen sie aber nur zum
  170. öffnen  der  entsprechenden  Fenster.   Pro Eintrag kann nur ein
  171. Fenster  geöffnet  werden.  Jedes  kann  getoppt, verschoben und
  172. geschlossen werden.
  173.    Die Einstellungen  selbst  werden  immer  im obersten Fenster
  174. vorgenommen.  Um  etwas zu ändern, bewegt Sie den Mauscursor auf
  175. einen  der  Pfeile  und  betätigen  die linke Maustaste. Je nach
  176. Richtung  des  Pfeils wird nun der Wert erhöht bzw.  erniedrigt.
  177. Bei  Zahlen mit mehr als zwei Stellen kann auch die rechte Taste
  178.  
  179.  
  180.                              - 3 -
  181.  
  182.  
  183.                          AUDIOFUN V1.0
  184.  
  185.  
  186. benutzt  werden,  wobei statt 1 dann 10 addiert oder subtrahiert
  187. werden.
  188.    Bei der  Erklärung  der  einzelnen  Parameter  werde  ich die
  189. möglichen  Werte  in  eckigen Klammern angeben. Es bedeutet dann
  190. also  [1...999],  daß  sämtliche  Einstellungen  von  1  bis 999
  191. möglich sind.
  192.  
  193.  
  194.  
  195. 2.3.1. Frequency
  196.  
  197.    Dieses Fenster  ist  nach  Programmstart  schon  geöffnet und
  198. eben für die Frequenzen zuständig.
  199.  
  200.  
  201. 2.3.1.1. Channel [A...C]
  202.  
  203.    Einer der drei Kanäle A, B oder C kann gewählt werden.
  204.  
  205.  
  206. 2.3.1.2. Part [1...8]
  207.  
  208.    Zu jedem  Kanal  gehören  acht  Parts mit eigenen Frequenzen,
  209. Hüllkurven  und Effekten, wobei natürlich pro Kanal nur ein Part
  210. zur  Zeit gespielt werden kann. Sie können also bis zu 24 Klänge
  211. bzw. kurze Melodien eingeben.
  212.  
  213.  
  214. 2.3.1.3. Tempo [1...2000]
  215.  
  216.    Dieser Wert   bestimmt   die  Zeitdauer  eines  Taktes.  Jede
  217. Einheit einer Zeitangabe hat immer die Länge von 20ms.
  218.    Wenn bei  Tempo  z.B.  einen  Wert von 50 steht, hat ein Takt
  219. die Länge von 50*20ms, also einer Sekunde.
  220.  
  221.  
  222. 2.3.1.4. Test
  223.  
  224.    Der eingestellte  Kanal wird gestartet und der Part gespielt.
  225. Wenn  Sie  den Test vorzeitig abbrechen wollen, so verlassen Sie
  226. mit dem Mauspfeil das Testfeld.
  227.  
  228.  
  229. 2.3.1.5. Sound [0 - 30...4095]
  230.  
  231.    Jeder Part  ist  maximal  16  Takte lang (Time 0 bis Time F).
  232. Ein  Takt kann die Einträge 30 (höchster Ton) bis 4095 (tiefster
  233. Ton) annehmen.
  234.    Die 0  hat  hierbei eine besondere Bedeutung. Einerseits wird
  235. überhaupt  kein  Ton  gespielt.  Zum anderen kann man erreichen,
  236. daß  ein Ton mehrere Takte lang ist.  Wenn Sie zum Beispiel 100,
  237. 200,  0, 0, 100 eingeben, hat der erste Ton die Länge von Tempo,
  238.  
  239.  
  240.                              - 4 -
  241.  
  242.  
  243.                          AUDIOFUN V1.0
  244.  
  245.  
  246. der  zweite  dagegen  die dreifache. Geben Sie nun 0, 200, 0, 0,
  247. 100  ein,  so  ist der Unterschied zum vorigen Beispiel der, daß
  248. im ersten Takt kein Ton zu hören ist.
  249.  
  250.  
  251. 2.3.1.6. Noise [0...32]
  252.  
  253.    Im Prinzip  genau  das  gleiche  wie  bei  Sound. Der Wert 32
  254. entspricht  hier  dem  physikalischen  Wert  0 des PSG (höchstes
  255. Rauschen).
  256.    Einen wichtigen  Unterschied  gibt  es  aber doch: da der PSG
  257. nur  einen  Rauschgenerator  besitzt,  habe  ich  diesen fest an
  258. Kanal  A  gebunden.  Mit  anderen  Worten:  Rauschen ist auf den
  259. Kanälen B und C nicht möglich!
  260.    Deshalb können  Sie  die Noise-Werte auch nur verändern, wenn
  261. der Kanal A eingestellt ist.
  262.  
  263.  
  264. 2.3.1.7. Hinweise zu Frequency
  265.  
  266.    Überlegen Sie,  welche  Klänge kein Rauschen benötigen. Diese
  267. legen Sie vorrangig auf die Kanäle B und C.
  268.    Da bis  zu  drei  Geräusche  gleichzeitig  erklingen  können,
  269. verteilen  Sie  diese, die tatsächlich gleichzeitg oder zeitlich
  270. kurz aufeinander vorkommen können, auf A, B und C.
  271.    Die Ereignisse,  die  nie gleichzeitig auftreten können (z.B.
  272. Spielstart,  neues  Level  und Game over) gehören alle auf einen
  273. Kanal (etwa Part 1 bis 3 auf C).
  274.  
  275.  
  276.  
  277. 2.3.2. Envelope
  278.  
  279.    Mit einer  Hüllkurve  wird  der Lautstärkeverlauf eines Tones
  280. festgelegt.  Aufgrund  der  wenigen  Hüllkurven des PSG habe ich
  281. per  Software  eine  komplette  und relativ frei programmierbare
  282. ADSR-Hüllkurve  realisiert.  Im  Gegensatz zum PSG hat nun jeder
  283. Kanal  seinen  eigenen Generator, wodurch alle Kanäle vollkommen
  284. unabhängig voneinander werden.
  285.  
  286.  
  287. 2.3.2.1. Rand
  288.  
  289.    Dieses Feld   ist   fast   identisch  mit  dem  Testfeld.  Im
  290. Unterschied  dazu  werden aber nicht die programmierten, sondern
  291. zufällige   Frequenzen   gespielt.  Rauschen  und  alle  anderen
  292. Parameter bleiben unverändert.
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.                              - 5 -
  301.  
  302.  
  303.                          AUDIOFUN V1.0
  304.  
  305.  
  306. 2.3.2.2. Attack
  307.  
  308.    Der Beginn  einer  Hüllkurve  ist  immer Attack. Dabei bewegt
  309. sich  die  Lautstärke  von  0 auf Maximum. Je nachdem, ob dieser
  310. Anstieg  schnell  oder  langsam  abläuft, kann man z.B Zupf- von
  311. Streichinstrumenten unterscheiden.
  312.  
  313.  
  314. 2.3.2.2.1. Attack [1...999]
  315.  
  316.    Die Zeit,  nach  der  die maximale Lautstärke erreicht werden
  317. soll.
  318.  
  319.  
  320. 2.3.2.2.2. Volume [1...15]
  321.  
  322.    Die Lautstärke,  die  nach  Beendigung  von  Attack  erreicht
  323. werden soll.
  324.  
  325.  
  326. 2.3.2.3. Decay
  327.  
  328.    Wenn Sie   eine   Klaviertaste  drücken  und  diese  gedrückt
  329. halten,  wird  der  Ton  recht  schnell  die  größte  Lautstärke
  330. erreichen   (Attack),   um   anschließend  langsam  abzuklingen.
  331. Hierfür ist Decay zuständig.
  332.  
  333.  
  334. 2.3.2.3.1. Decay [0...999]
  335.  
  336.    Länge der  Decay-Phase.  Ist  dieser  Wert 0, wird kein Decay
  337. ausgeführt.
  338.  
  339.  
  340. 2.3.2.3.2. Volume [0...15]
  341.  
  342.    Lautstärke, die  nach  Ablauf von Decay erreicht werden soll.
  343. Beachten  Sie, daß im Gegensatz zu natürlichen Instrumenten hier
  344. die  Decay-Lautstärke  auch  größer  oder  gleich der von Attack
  345. sein kann.
  346.    Ist die Decay-Dauer 0, wird die Lautstärke nicht beachtet.
  347.  
  348.  
  349. 2.3.2.4. Sustain
  350.  
  351.    Drücken Sie  statt  einer  Klavier-  eine  Orgeltaste, ergibt
  352. sich   ein   anderer   Lautstärkeverlauf.   Nach  erreichen  der
  353. maximalen  Lautstärke bleibt diese nun nun solange konstant, bis
  354. die Taste losgelassen wird.
  355.  
  356.  
  357.  
  358.  
  359.  
  360.                              - 6 -
  361.  
  362.  
  363.                          AUDIOFUN V1.0
  364.  
  365.  
  366. 2.3.2.4.1. Sustain [0...999]
  367.  
  368.    Angabe, wie  lange  die  Lautstärke  von  Attack  oder  Decay
  369. gehalten  werden  soll.  Ist  dieser  Wert 0, wird Sustain nicht
  370. ausgeführt.
  371.  
  372.  
  373. 2.3.2.5. Release
  374.  
  375.    Noch einmal   zum   Klavier.  Wenn  Sie  diesmal  eine  Taste
  376. drücken,  diese  aber  nach  einer kurzen Zeit wieder loslassen,
  377. ergibt  sich  folgender  Hüllkurvenverlauf:  Nach Attack beginnt
  378. die  Decay-Phase,  wird  aber  mit dem loslassen der Taste durch
  379. Release  ersetzt. Die Folge ist, daß der Ton nicht mehr langsam,
  380. sondern recht schnell ausklingt.
  381.  
  382.  
  383. 2.3.2.5.1. Release [0...999]
  384.  
  385.    Dauer, bis  die  Attack- oder Decaylautstärke 0 erreicht. Ist
  386. der Wert von Release 0, wird diese Funktion nicht ausgeführt.
  387.  
  388.  
  389. 2.3.2.6. Hinweise zu Envelope
  390.  
  391.    Wie Sie  gesehen  haben,  lassen  sich  Hüllkurventeile  auch
  392. ausblenden.  Dadurch  muß  nicht  eine  komplette ADSR-Hüllkurve
  393. programmiert  werden,  möglich sind außerdem: A, AD, AS, AR, ADS
  394. sowie ADR.
  395.    Ist die  Gesamtdauer  der Hüllkurve (also A+D+S+R) länger als
  396. ein  Takt,  so  gehen  die Töne ineinander über. Ist dagegen der
  397. Takt länger, klingt das ganze abgehackt (staccato).
  398.    Wenn ein   Ton  mehrere  Takte  hörbar  sein  soll,  muß  die
  399. Gesamtdauer der Hüllkurve ein vielfaches von Tempo sein.
  400.    Beim letzten  Ton  hängt  die Taktlänge nicht mehr von Tempo,
  401. sondern von der Hüllkurve ab.
  402.  
  403.  
  404.  
  405. 2.3.3. Effects
  406.  
  407.    Auch mit  einer ADSR-Hüllkurve klingt der Sound vom PSG immer
  408. noch    recht    langweilig.    Um    diesen    lebendiger   und
  409. abwechslungsreicher  zu gestalten, stehen Ihnen hier noch einige
  410. Effekte zur Verfügung.
  411.  
  412.  
  413. 2.3.3.1. Tremolo
  414.  
  415.    Die Hüllkurve  wird  amplitudenmoduliert,  d.h.  der Ton wird
  416. abwechselnd lauter und leiser.
  417.  
  418.  
  419.  
  420.                              - 7 -
  421.  
  422.  
  423.                          AUDIOFUN V1.0
  424.  
  425.  
  426. 2.3.3.1.1. Speed [1...15]
  427.  
  428.    Dieser Wert      bestimmt      die     Geschwindikeit     des
  429. Lautstärkewechsels,  wobei  die  Werte  8  bis 14 aber identisch
  430. sind.
  431.  
  432.  
  433. 2.3.3.1.2. Delay [1...2000]
  434.  
  435.    Mit dieser  Zeitangabe  können  Sie  den Einsatz des Effektes
  436. verzögern.  Die Angabe muß aber kleiner als Tempo sein, da sonst
  437. der  Effekt  nicht  ausgeführt  wird.  Wenn sich der Ton und der
  438. Effekt  über  mehrere  Takte erstreckt, wird die Verzögerung nur
  439. im ersten Takt beachtet.
  440.  
  441.  
  442. 2.3.3.1.3. FEDCBA9876543210
  443.  
  444.    Die Effekte  können  Sie  für  jeden  Takt freigeben (1) oder
  445. sperren  (0).  Diese Zeile gibt die Taktnummern an, in der Zeile
  446. darunter  befinden  sich die dazugehörigen Schalter. Bewegen Sie
  447. den  Mauspfeil  auf  die  entsprechende Ziffer und betätigen die
  448. linke Taste. Aus einer 0 wird dann eine 1 und umgekehrt.
  449.  
  450.  
  451. 2.3.3.2. Sound Vibtrato
  452.  
  453.    Der Ton  wird  frequenzmoduliert. Hierbei pendelt die Tonhöhe
  454. periodisch um die Grunfrequenz.
  455.  
  456.  
  457. 2.3.3.2.1. Add [1...4095]
  458.  
  459.    Dieser Betrag wird in jedem Interrupt zur Frequenz addiert.
  460.  
  461.  
  462. 2.3.3.2.2. Count [1...2000]
  463.  
  464.    Ein Zähler,  der  die  Vibratofrequenz  bestimmt.  Je  größer
  465. dieser Wert ist, desto geringer die Frequenz.
  466.    Add und  Count  stehen  in  einem engen Zusammenhang. Add=100
  467. und  Count=1  ergeben  den  gleichen  Frequenzhub wie Add=25 und
  468. Count=4, nur die Vibratofrequenz ist unterschiedlich.
  469.  
  470.  
  471. 2.3.3.3. Noise Vibrato
  472.  
  473.    Vibrato für   den  Rauschgenerator.  Veränderungen  sind  nur
  474. möglich, wenn Kanal A eingestellt ist.
  475.  
  476.  
  477.  
  478.  
  479.  
  480.                              - 8 -
  481.  
  482.  
  483.                          AUDIOFUN V1.0
  484.  
  485.  
  486. 2.3.3.3.1. Add [1...31]
  487.  
  488.    Gleiche Bedeutung wie bei Sound Vibrato.
  489.  
  490.  
  491. 2.3.3.3.2. Count [1...2000]
  492.  
  493.    Da der  Rauschgenerator im PSG nur 5 bit schmal ist, bestimmt
  494. dieser  Eintrag nicht wie bei Sound Vibrato zusammen mit Add den
  495. Hub.  In  diesem  Fall  wird  nur  die  Rauschfrequenz  für  die
  496. angegebene Zeit gehalten.
  497.  
  498.  
  499. 2.3.3.4. Sound Pitch Bend
  500.  
  501.    Während beim  Vibrato  die Frequenz um den Grundton schwankt,
  502. biegt dieser Effekt den Ton in nur eine Richtung.
  503.  
  504.  
  505. 2.3.3.4.1. Add [1...4095]
  506.  
  507.    Bestimmt, wieviel  in  jedem  Interrupt  zur Frequenz addiert
  508. wird.  Angaben  bis  2047 ziehen den Ton nach unten, die darüber
  509. nach oben.
  510.  
  511.  
  512. 2.3.3.5. Noise Pitch Bend
  513.  
  514.    Pitch Bend  für  den  Rauschgenerator.  Kann ebenfalls nur im
  515. Kanal A verändert werden.
  516.  
  517.  
  518. 2.3.3.5.1. Add [1...31]
  519.  
  520.    Bis 15 wird das Rauschen tiefer, sonst höher.
  521.  
  522.  
  523. 2.3.3.6. Sound Legato
  524.  
  525.    Dieser letzte  Effekte ist ebenfalls zur Frequenzbeinflussung
  526. gedacht.  Die  Tonhöhe  wird  dabei  auf die des folgenden Tones
  527. gezogen.  Bekannt  dürfte  solches  von  der Geige, Posaune oder
  528. Hawaiigitarre sein.
  529.    Zu beachten    ist    hier,    daß    dieser   Effekt   immer
  530. zusammenhängend  durchgeführt  wird.   Wenn  ein  Ton  z.B. drei
  531. Takte    dauert,   gibt   es   mehrere   Möglichkeiten,   Legato
  532. einzusetzen.  Es kann nur im ersten Takt erlaubt sein, wobei die
  533. folgenden  beiden  dann  schon  die Frequenz des folgenden Tones
  534. haben.  Auch  kann  Legato  bei  allen  drei  Takten freigegeben
  535. werden,  dann  ist  die  Änderung  langsamer.  Fast alle anderen
  536. Kombinationen sind ebenfalls möglich.
  537.    Nur eines  funktioniert  in  diesem  Beispiel  nicht: Legato,
  538.  
  539.  
  540.                              - 9 -
  541.  
  542.  
  543.                          AUDIOFUN V1.0
  544.  
  545.  
  546. kein  Legato,  Legato!  Nachdem im ersten Takt Legato ausgeführt
  547. wurde,  hat  der  zweite  Takt  schon  die Frequenz des nächsten
  548. Tones.  Im  dritten  Takt  kann also kein Legato mehr ausgeführt
  549. werden.
  550.    Eine Möglichkeit  gibt  es  aber  doch.  Wenn  Sie  zu obigen
  551. Beispiel  zusätzlich  kein  Pitch  Bend,  Pitch Bend, kein Pitch
  552. Bend  eingeben,  klappt  es.  Nach  dem  ersten  Legato  wird im
  553. zweiten  Takt der Ton verbogen, im dritten Takt kann also erneut
  554. Legato erfolgen.
  555.    Zu guter  letzt:  beim  letzten Ton ist natürlich kein Legato
  556. möglich!
  557.  
  558.  
  559. 2.3.3.7. Hinweise zu Effects
  560.  
  561.    Alle Effekte  sind  auch  untereinander  mischbar. Allerdings
  562. sollten  Sie  es  nicht übertreiben: Legato zusammen mit Vibrato
  563. und Pitch Bend ist des Guten zuviel!
  564.  
  565.  
  566.  
  567. 2.3.4. Test all
  568.  
  569.    In diesem  Fenster  können Sie alle Kanäle und Parts parallel
  570. testen.  Gestartet  wird  ein  Part, indem der Mauspfeil auf das
  571. entsprechende  Feld  bewegt  und  die linke Taste gedrückt wird.
  572. Möchten  Sie  den Part vorzeitig stoppen, drücken Sie die rechte
  573. Taste.
  574.    Sie können  auch  -  während  ein  Part  abgearbeitet  wird -
  575. diesen  erneut  oder  einen  anderen  starten.  Dadurch  hat Ihr
  576. Programm   die   Möglichkeit,  immer  die  aktuellen  Ereignisse
  577. akustisch wiederzugeben.
  578.    Während eines  Lade  -oder  Speichervorganges  wird der Sound
  579. abgestellt.   Anschließend  können  Sie  aber wie gewohnt weiter
  580. testen.
  581.  
  582.  
  583.  
  584.  
  585.  
  586. 3. SOUNDWORKER
  587. --------------
  588.  
  589.    Nachdem Sie   mühsam  Ihre  Sounddaten  zusammengestellt  und
  590. abgespeichert  haben,  sollen  Sie  jetzt erfahren, wie Sie eine
  591. solche   Datei  in  Ihr  Programm  bekommen  und  von  dort  aus
  592. ansprechen können.
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600.                              - 10 -
  601.  
  602.  
  603.                          AUDIOFUN V1.0
  604.  
  605.  
  606. 3.1. Binding und Datentypen
  607.  
  608.    Für OMIKRON.BASIC  und  Sozobon  C  habe  ich  je ein Binding
  609. geschrieben.  Sollten  Sie  mit einer anderen Programmiersprache
  610. arbeiten,  ist  dieses  kein  Problem.   Schreiben  Sie sich ein
  611. eigenes Binding oder verzichten Sie völlig auf ein Binding.
  612.    Die folgenden  Funktionen  sind als Deklarationen aufgeführt,
  613. damit  Sie  wissen,  von  welchem Datentyp die Übergabeparameter
  614. sind.  In  OMIKRON.BASIC bedeutet ein "%" hinter einer Variable,
  615. daß  es sich um einen 16 bit Integerwert handelt, "%L" um 32 bit
  616. Integer.
  617.    Steht ein   "R"  vor  einer  Variable,  wird  in  dieser  der
  618. Rückgabewert  abgelegt.   Das  "R"  darf  beim Aufruf aber nicht
  619. angegeben werden.
  620.    Da OMIKRON.BASIC   auf  Zeilennummern  besteht,  beginnt  das
  621. Binding  bei  63000. Wenn eine Biblothek ebenfalls diese Nummern
  622. benutzt, müssen Sie das Binding umnummerieren.
  623.  
  624.  
  625.  
  626. 3.2. Deklarationen
  627.  
  628.    Mit den  folgenden  Deklarationen  können Sie den SOUNDWORKER
  629. aus  Ihrem Programm ansprechen. Es kann sein, daß Sie nicht alle
  630. Möglichkeiten  nutzen.  In  diesem Fall streichen Sie alle nicht
  631. benötigten Funktionen im Binding.
  632.  
  633.  
  634. 3.2.1. Load
  635.  
  636.    Eine Datei   wird   zum   Programm   geladen.  Der  benötigte
  637. Speicherplatz wird dabei reserviert.
  638.  
  639. Deklaration:   Swk_Load(R Lret%, Filename$)
  640.  
  641.                int swk_load(char *filename)
  642.  
  643.   Parameter:   Dateiname
  644.  
  645.    Rückgabe:   1 bzw. TRUE  alles OK
  646.                sonst        Fehler
  647.  
  648.    Den Rückgabewert  sollten  Sie  auf  jeden  Fall abfragen. Es
  649. könnte  ja sein, daß die Datei nicht gefunden wurde oder es sich
  650. um  eine  fremde  Datei  handelt.  In diesem Fall müssen Sie Ihr
  651. Programm mit einer Fehlermeldung abbrechen!
  652.    Wenn Sie  Ihre  Sounddatei mit Save DR gesichert und zu Ihrem
  653. Programm  gelinkt  haben, können Sie diese Funktion natürlich im
  654. Binding streichen.
  655.  
  656.  
  657.  
  658.  
  659.  
  660.                              - 11 -
  661.  
  662.  
  663.                          AUDIOFUN V1.0
  664.  
  665.  
  666. 3.2.2. Start
  667.  
  668.    Timer_A wird  gestartet.  Bevor  irgendwelche  Daten  an  den
  669. SOUNDWORKER  übergeben  werden,  muß  diese  Funktion aufgerufen
  670. werden!
  671.  
  672. Deklaration:   Swk_Start
  673.  
  674.                void swk_start()
  675.  
  676.   Parameter:   keine
  677.  
  678.    Rückgabe:   keine
  679.  
  680.  
  681.  
  682. 3.2.3. Stop
  683.  
  684.    Timer_A wird   gestoppt.   Diese   Funktion   muß  immer  vor
  685. Programmende oder laden einer anderen Datei aufgerufen werden!
  686.  
  687. Deklaration:   Swk_Stop
  688.  
  689.                void swk_stop()
  690.  
  691.   Parameter:   keine
  692.  
  693.    Rückgabe:   keine
  694.  
  695.  
  696.  
  697. 3.2.4. Play
  698.  
  699.    Ein Kanal wird gestartet und der gewünschte Part gespielt.
  700.  
  701. Deklaration:   Swk_Start(Channel%, Part%)
  702.  
  703.                void(int channel, int part)
  704.  
  705.   Parameter:   Kanalnummer 0 bis 2 für Kanäle A bis C
  706.                Partnummer +/- 1 bis 8 (negativ für zufällige
  707.                                                  Frequenzen)
  708.  
  709.    Rückgabe:   keine
  710.  
  711.    Bei einer    ungültigen    Partnummer    wird    der    Kanal
  712. stummgeschaltet.
  713.  
  714.  
  715.  
  716.  
  717.  
  718.  
  719.  
  720.                              - 12 -
  721.  
  722.  
  723.                          AUDIOFUN V1.0
  724.  
  725.  
  726. 3.2.5. Till
  727.  
  728.    Nicht immer   möchte   man   alle   Takte   hören.   Bei  den
  729. Zufallsfrequenzen  werden z.B.  immer alle 16 Takte benutzt. Mit
  730. dieser  Funktion  können  Sie die Anzahl der zu spielenden Takte
  731. vermindern.  Im  Unterschied  zum AUDIOFUN zählt der SOUNDWORKER
  732. die  Takte  von  1  bis  16.  Dieser  Aufruf  muß immer vor Play
  733. erfolgen!
  734.  
  735. Deklaration:   Swk_Till(Channel%, Last%)
  736.  
  737.                void swk_till(int channel, int last)
  738.  
  739.   Parameter:   Kanalnummer 0 bis 2 für Kanäle A bis C
  740.                Nummer des letzten zu spielenden Taktes
  741.  
  742.    Rückgabe:   keine
  743.  
  744.  
  745. 3.2.6. Exec
  746.  
  747.    In bestimmten  Situationen  kann  es sinnvoll sein, zu Beginn
  748. eines   Taktes  eine  Aktion  auszulösen,  z.B.  den  Bildschirm
  749. invertieren.
  750.    Mit diesem   Aufruf   können   Sie   die  Startadresse  einer
  751. (kurzen!)   Routine   übergeben,   die   dieses  oder  ähnliches
  752. ausführt.  Die  Routine  wird im Supervisor-Modus ausgeführt und
  753. muß   mit   einem   RTS   abgeschlossen  sein.  Sie  können  die
  754. XBIOS-Funktionen,   die   mit   dem  Bildschirm  zu  tun  haben,
  755. benutzen.  Die  Aufrufe  sollten  Sie  (Sozobon  C Programmierer
  756. müssen,  also  auf  gar  keinen Fall OSBIND.H benutzen!) aber in
  757. Assembler schreiben.
  758.    Exec muß  vor  Play aufgerufen werden. Ihre Routine kann dann
  759. aber  wieder  Exec  aufrufen. Sie könnten so z.B. den Bildschirm
  760. invertieren  und  nach  einigen Takten wieder normal darstellen.
  761. Wahlweise können Sie auch Till aufrufen.
  762.  
  763. Deklaration:   Swk_Exec(Channel%, Begin%, Routine%L)
  764.  
  765.                void swk_exec(int channel, int begin,
  766.                                    long (*routine()))
  767.  
  768.   Parameter:   Kanalnummer 0 bis 2 für Kanäle A bis C
  769.                Nummer des Taktes, bei dem die Routine
  770.                   gestartet werden soll. Bei einer  0
  771.                   wird die Routine am Ende  des Parts
  772.                   ausgeführt.
  773.                Startadresse der Routine.
  774.  
  775.    Rückgabe:   keine
  776.  
  777.  
  778.  
  779.  
  780.                              - 13 -
  781.  
  782.  
  783.                          AUDIOFUN V1.0
  784.  
  785.  
  786. 3.2.7. Time
  787.  
  788.    Diese Funktion  liefert  die  Nummer  des momentan gespielten
  789. Taktes.
  790.  
  791. Deklaration:   Swk_Time(R Tret%, Channel%)
  792.  
  793.                int swk_time(int channel)
  794.  
  795.   Parameter:   Kanalnummer 0 bis 2 für Kanäle A bis C
  796.  
  797.    Rückgabe:   Momentane Taktnummer oder 0, wenn Kanal
  798.                   inaktiv
  799.  
  800.    Wenn Sie  gleich  nach  Play  diese Funktion aufrufen, werden
  801. Sie  aller  Wahrscheinlichkeit nach die Partnummer erhalten, die
  802. Sie  eben  mit  Play  übergeben  haben. Abhilfe: mindestens 20ms
  803. warten oder folgenden Aufruf vorschalten!
  804.  
  805.  
  806. 3.2.8. Part
  807.  
  808.    Diese Funktion  liefert  die  Nummer  des momentan gespielten
  809. Parts.
  810.  
  811. Deklaration:   Swk_Part(R Pret%, Channel%)
  812.  
  813.                int swk_part(int channel)
  814.  
  815.   Parameter:   Kanalnummer 0 bis 2 für Kanäle A bis C
  816.  
  817.    Rückgabe:   Momentane Partnummer oder 0, wenn Kanal
  818.                   inaktiv
  819.  
  820.    Part sollten  Sie  immer  vor  Time  verwenden,  um sicher zu
  821. stellen,  daß  der  Wert, den Sie erhalten, auch gültig ist. Nur
  822. wenn  es sich um eine Partnummer handelt, ist auf die Taktnummer
  823. verlass.
  824.    Einzige Ausnahme:  Sie  übergeben  bei  Play  eine  ungültige
  825. Partnummer  größer  255  und  fragen anschließend die Partnummer
  826. ab!
  827.    Die Funktionen  Time  und Part können Sie z.B. dazu benutzen,
  828. daß  Ihr Programm bis Erreichen eines bestimmten Taktes in einer
  829. Leerschleife  verharrt  und  somit  der Programmablauf für diese
  830. Zeit gestoppt wird.
  831.  
  832.  
  833. 3.2.9. Joy_Start
  834.  
  835.    Im SOUNDWORKER  ist auch eine Joystickabfrage integriert, die
  836. Sie,  falls  Ihr  Programm mit dem Joystick gesteuert wird, auch
  837. benutzen  sollten.  Damit  stellen  Sie sicher, daß Ihr Programm
  838.  
  839.  
  840.                              - 14 -
  841.  
  842.  
  843.                          AUDIOFUN V1.0
  844.  
  845.  
  846. auch unter anderen TOS-Versionen läuft!
  847.    Dieser Aufruf  startet  die  Abfrage.  Beachten Sie, daß dann
  848. die Maus nicht mehr abgefragt werden kann!
  849.  
  850. Deklaration:   Joy_Start
  851.  
  852.                void joy_start()
  853.  
  854.   Parameter:   keine
  855.  
  856.    Rückgabe:   keine
  857.  
  858.  
  859. 3.2.10. Joy_Stop
  860.  
  861.    Die Joystickabfrage  wird  beendet.  Diesen Aufruf können Sie
  862. verwenden,  um  von  Joystick- auf Mausabfrage umzuschalten. Auf
  863. jeden Fall muß er vor Programmende erfolgen!
  864.  
  865. Deklaration:   Joy_Stop
  866.  
  867.                void joy_stop()
  868.  
  869.   Parameter:   keine
  870.  
  871.    Rückgabe:   keine
  872.  
  873.  
  874. 3.2.11. Joy_Last
  875.  
  876.    Liefert den Wert des zuletzt bewegten Joysticks.
  877.  
  878. Deklaration:   Joy_Last(R Jlast%)
  879.  
  880.                int joy_last()
  881.  
  882.   Parameter:   keine
  883.  
  884.    Rückgabe:   254 für Joystick 0 und 255 für Joystick 1.
  885.                Ist die Abfrage nicht eingeschaltet, erhalten
  886.                Sie eine 0.
  887.  
  888.  
  889. 3.2.12. Joy_0
  890.  
  891.    Liefert momentane Stellung von Joystick 0.
  892.  
  893. Deklaration:   Joy_0(R Stick_0%)
  894.  
  895.                int joy_0()
  896.  
  897.   Parameter:   keine
  898.  
  899.  
  900.                              - 15 -
  901.  
  902.  
  903.                          AUDIOFUN V1.0
  904.  
  905.  
  906.  
  907.    Rückgabe:   Wert für Joystick 0. Bei gedrückter Feuertaste
  908.                um 128 erhöht.
  909.  
  910.  
  911. 3.2.13. Joy_1
  912.  
  913.    Liefert momentale Stellung von Joystick 1.
  914.  
  915. Deklaration:   Joy_1(R Stick_1%)
  916.  
  917.                int joy_1()
  918.  
  919.   Parameter:   keine
  920.  
  921.    Rückgabe:   Wert für Joystick 1. Bei gedrückter Feuertaste
  922.                um 128 erhöht.
  923.  
  924.  
  925.  
  926. 3.3. Andere Sprachen
  927.  
  928.    Damit Sie   sich  Ihr  eigenes  Binding  schreiben  oder  den
  929. SOUNDWORKER  direkt  ansprechen  können,  werde  ich  jetzt  den
  930. prinzipiellen Aufbau einer solchen Datei beschreiben.
  931.    Zuerst müssen  Sie  in  Ihrem  Programm (oder Binding) ein 16
  932. bit  Integerfeld  mit  2512  Elementen einrichten, also z.B. DIM
  933. Feld%(2512).  Anschließend  ermitteln Sie die Anfangsadresse des
  934. Feldes und laden Ihre Sounddatei binär dorthin.
  935.    Wenn Sie  die  Datei  zu Ihrem Programm gelinkt haben, müssen
  936. Sie   dieses   Feld  (oder  besser  noch  Struktur)  als  extern
  937. deklarieren.    Der   Feldname   ist   _swk,   wobei   zumindest
  938. C-Programmierer   den   Unterstrich   weglassen  müssen  (extern
  939. swk[2512]).
  940.    Für die   Kommunikation   mit  dem  SOUNDWORKER  sind  einige
  941. Feldelemente  zuständig, die ich nun erklären werde. Dabei nehme
  942. ich  an,  daß  das  erste  Element  den Index 0 hat. Wenn in der
  943. Sprache,  die  Sie verwenden, dieses der Index 1 ist, müssen Sie
  944. zu den folgenden Feldangaben immer eine 1 addieren.
  945.  
  946.  
  947. 3.3.1. ID [Index 0 bis 8]
  948.  
  949.    In den   ersten  18  Bytes  befindet  sich  die  Dateikennung
  950. "SOUNDWORKER  V1.0"  (ohne  Gänsefüßchen),  mit  zwei  Nullbytes
  951. abgeschlossen.
  952.  
  953.  
  954. 3.3.2. Kanal A [Index 9]
  955.  
  956.    Um den  Kanal  A zu starten, schreiben Sie in dieses Feld die
  957. Nummer  des  gewünschten  Parts. Ist dieser Wert negativ, werden
  958.  
  959.  
  960.                              - 16 -
  961.  
  962.  
  963.                          AUDIOFUN V1.0
  964.  
  965.  
  966. anstelle der programmierten zufällige Frequenzen gespielt.
  967.    Erlaubt sind  die  Werte  +/-  1  bis  8.  Alle anderen Werte
  968. schalten den Kanal stumm.
  969.    Beim lesen  erhalten  Sie  im  oberen  Byte  die Part- und im
  970. unteren  die  Taktnummer.   Sind  diese  Werte  0, ist der Kanal
  971. inaktiv.
  972.  
  973.        Kanal B [Index 10]
  974.        Kanal C [Index 11]
  975.  
  976.  
  977. 3.3.3. Begin/Last A [Index 12]
  978.  
  979.    Nummer, ab  welchen  Takt  eine Routine gestartet oder bis zu
  980. welchem   Takt   ein   Part   gespielt   werden  soll.  Für  die
  981. Entscheidung,  welche  der  beiden Möglichkeiten gültig ist, ist
  982. der folgende Eintrag zuständig.
  983.    Dieser Wert   muß  schon  vorhanden  sein,  bevor  der  Kanal
  984. gestartet  wird!  Bei einer 0, die nicht eingetragen werden muß,
  985. wird der Part normal zu Ende gespielt.
  986.  
  987.        Begin/Last B [Index 13]
  988.        Begin/Last C [Index 14]
  989.  
  990.  
  991. 3.3.4. Routine A [Index 15 und 16]
  992.  
  993.    Startadresse der   Routine.   Die   Routine  muß  eine  kurze
  994. Ausführungszeit haben, da Sie im Interrupt aufgerufen wird!
  995.    Steht hier  eine  0,die  Sie  nicht  hineinschreiben  müssen,
  996. interpretiert der SOUNDWORKER Begin/Last als Last.
  997.    Es wird  also  der Part bis zum angegebenen Takt gespielt und
  998. keine Routine aufgerufen.
  999.    Bei einem  Wert  ungleich  0 wird dieser als Startadresse der
  1000. Routine  gewertet.   Diese  wird bei Erreichen der Taktnummer in
  1001. Begin/Last aufgerufen.
  1002.  
  1003.        Routine B High-Word [Index 17]
  1004.        Routine B  Low-Word [Index 18]
  1005.        Routine C High-Word [Index 19]
  1006.        Routine C  Low-Word [Index 20]
  1007.  
  1008.  
  1009. 3.3.5. Joy_Last [Index 21]
  1010.  
  1011.    Hier steht  der  Wert  für den zuletzt bewegten Joystick. 254
  1012. bedeutet Joystick 0 und 255 Joystick 1.
  1013.  
  1014.  
  1015.  
  1016.  
  1017.  
  1018.  
  1019.  
  1020.                              - 17 -
  1021.  
  1022.  
  1023.                          AUDIOFUN V1.0
  1024.  
  1025.  
  1026. 3.3.6. Joy_0 [Index 22]
  1027.  
  1028.    Stellung von  Joystick  0.  Bei  gedrückter Feuertaste um 128
  1029. erhöht.
  1030.  
  1031.  
  1032. 3.3.7. Joy_1 [Index 23]
  1033.  
  1034.    Stellung von  Joystick  1.  Bei  gedrückter Feuertaste um 128
  1035. erhöht.
  1036.  
  1037.  
  1038. 3.3.8. Start/Stop
  1039.  
  1040.    Von den   vier   folgenden   Feldelementen   müssen  Sie  die
  1041. jeweiligen   Adressen   (also   die   absoluten   Adressen   der
  1042. Speicherplätze,  an denen sie sich befinden) ermitteln und diese
  1043. an Supexec (XBIOS 38) übergeben.
  1044.    Supexec ruft   eine  von  den  vier  Routinen  auf,  die  den
  1045. SOUNDWORKER  oder  die Joystickabfrage starten bzw. stoppen. Sie
  1046. sollten  diese  Routinen  nur  mit  Supexec  aufrufen, da einige
  1047. Registerinhalte   verändert  werden  und  die  Routinen  nur  im
  1048. Supervisor-Modus funktionieren!
  1049.  
  1050.  
  1051. 3.3.8.1. Swk_Start [Index 24]
  1052.  
  1053.    Der Timer_A  wird  gestartet  und daduch der SOUNDWORKER alle
  1054. 20ms   aufgerufen.    Bevor   Sie  also  irgend  etwas  mit  dem
  1055. SOUNDWORKER anfangen können, muß der TIMER gestartet werden!
  1056.  
  1057.  
  1058. 3.3.8.2. Swk_Stop [Index 26]
  1059.  
  1060.    Der Timer  wird  gestoppt. Dieses müssen Sie vor Programmende
  1061. immer machen!
  1062.  
  1063.  
  1064. 3.3.8.3. Joy_Start [Index 28]
  1065.  
  1066.    Die Joystickabfrage  wird eingeschaltet. Das Arbeiten mit der
  1067. Maus ist dann nicht mehr möglich!
  1068.  
  1069.  
  1070. 3.3.8.4. Joy_Stop [Index 30]
  1071.  
  1072.    Die Joystickabfrage    wird   abgeschaltet.   Ebenfalls   vor
  1073. Programmende nicht vergessen!
  1074.  
  1075.  
  1076.  
  1077.  
  1078.  
  1079.  
  1080.                              - 18 -
  1081.  
  1082.