SS (format pliku)

From Atariki

Jump to: navigation, search

Format modułu muzycznego programu Softsynth.

Plik składa się ze stałego nagłówka i stokenizowanego kodu programu w języku MASIC o zmiennej długości.

Wszystkie słowa zapisane są w kolejności LSB, MSB.

Spis treści

Nagłówek

offsetdługośćopis
$0000$0004identyfikator: 'SYN',$9B w ASCII
$0004$0002ilość wierszy programu
$0006$0002długość bloku programu - 1
$0008$00B0blok 16 definicji plików fal .S
$00B8$00B0blok 16 definicji plików obwiedni .H
$0168...stokenizowany kod programu

Definicja pliku fali/obwiedni

offsetdługośćopis
$0000$0001długość nazwy - 1
$0001$0002ile razy nazwa fali/obwiedni została użyta w programie
$0003$0008nazwa

Nazwa to nazwa pliku lecz bez dołączonego rozszerzenia.

Program w MASIC-u

Kod programu znajduje się w pliku w postaci stokenizowanej i jest zapisany linia po linii.

Format linii

offsetdługośćopis
$0000$0002numer linii
$0002$0001długość linii
$0003...dane

Linie mogą przyjmować numery w zakresie 1..32767 w związku z czym słowo numeru linii dzieli się na dwie części:

  • bity 0..14: numer linii
  • bit 15: znacznik rodzaju linii (0=linia nuty, 1=linia rozkazu sterującego)

Długość linii liczona jest, analogicznie jak w BASIC-u, łącznie z bajtami numeru linii i długości.

Linia nuty

Jeśli najstarszy bit numeru linii jest skasowany wtedy oznacza to, że w linii zdefinowana jest nuta przeznaczona do odegrania.

Bajt długości linii dzielony jest wtedy na 3 części i zawiera:

  • bity 0..4: długość linii
  • bity 5..6: numer kanału na którym będzie uruchomiony dźwięk
  • bit 7: 0-długa postać linii, 1-krótka postać linii

Krótka postać linii

Występuje tu tylko słowo częstotliwości nuty.

Przykładowa krótka linia widziana w edytorze SoftSynth:

10 1,C

Długa postać linii

Kolejne bajty określają:

1. Bajt znaczników określających jakie dane zapisane są dalej (0-znacznik skasowany, 1-znacznik ustawiony):

  • bit 0: LSB czasu oczekiwania
  • bit 1: niewykorzystany
  • bit 2: fala
  • bit 3: obwiednia
  • bit 4: głośność
  • bit 5: czas trwania
  • bit 6: MSB czasu oczekiwania
  • bit 7: dodatkowe efekty

2. Słowo częstotliwości nuty.

3. Występowanie kolejnych bajtów zależy od stanu znaczników:

  • bajt indeksu fali,
  • bajt indeksu obwiedni,
  • bajt głośności (0..15),
  • słowo czasu trwania dźwięku,
  • bajt LSB czasu oczekiwania,
  • bajt MSB czasu oczekiwania,
  • bajt znaczników dodatkowych efektów.

Znaczniki dodatkowych efektów:

  • bity 0..1: niewykorzystane
  • bit 2: glissando
  • bit 3: wartość glissanda jest ujemna
  • bit 4: wartość glissanda jest podzielona przez 256
  • bit 5: dźwięk ciągły
  • bity 6..7: niewykorzystane

W przypadku gdy znacznik glissanda (bit 2) jest ustawiony wtedy dalej następują bajty opisujące efekt:

  • słowo przyrostu dla nuty docelowej glissanda,
  • bajt głębokości glissanda (0-9),
  • słowo czasu przejścia glissanda.

Czas przejścia glissanda (jakkolwiek w kodzie programu zapisywany) jest przez procedurę odtwarzającą ignorowany.

Przykładowa długa linia widziana w edytorze SoftSynth:

10 1,C,SINUS,DEFAULT,15,100,100,<,>C1,1,100

Linia rozkazu sterującego

Jeśli najstarszy bit numeru linii jest ustawiony wtedy oznacza to, że w linii znajduje się token rozkazu sterującego wraz z bajtami danych rozkazu.

Tokeny

1. ? czas : tekst

  • bajt $01
  • bajt czasu wyświetlania tekstu mierzonego w 1/50 sekundy
  • tekst do wyświetlenia zapisany w ATASCII

2. / polecenia

  • bajt $02
  • tekst poleceń edytora zapisany w ATASCII

3. ; komentarz

  • bajt $03
  • tekst komentarza zapisany w ATASCII

4. SET 1,fala,obwiednia,głośność,czas trwania,czas oczekiwania

  • bajt $04
  • bajt indeksu fali
  • bajt indeksu obwiedni
  • bajt głośności
  • słowo czasu trwania
  • słowo czasu oczekiwania liczonego w tiknięciach licznika tempa

5. SET 2,fala,obwiednia,głośność,czas trwania,czas oczekiwania

  • bajt $05
  • bajt indeksu fali
  • bajt indeksu obwiedni
  • bajt głośności
  • słowo czasu trwania
  • słowo czasu oczekiwania liczonego w tiknięciach licznika tempa

6. SET 3,fala,obwiednia,głośność,czas trwania,czas oczekiwania

  • bajt $06
  • bajt indeksu fali
  • bajt indeksu obwiedni
  • bajt głośności
  • słowo czasu trwania
  • słowo czasu oczekiwania liczonego w tiknięciach licznika tempa

7. SET 4,fala,obwiednia,głośność,czas trwania,czas oczekiwania

  • bajt $07
  • bajt indeksu fali
  • bajt indeksu obwiedni
  • bajt głośności
  • słowo czasu trwania
  • słowo czasu oczekiwania liczonego w tiknięciach licznika tempa

8. MOD modulacja

  • bajt $08
  • bajt typu modulacji (0..4)

9. SPEED tempo

  • bajt $09
  • bajt tempa mierzonego w 1/200 sekundy

10. INT kanał,kanał,różnica

  • bajt $0A
  • bajt numeru kanału - 1
  • bajt numeru kanału - 1
  • bajt różnicy częstotliwości

11. KW czas,czas

  • bajt $10
  • bajt czasu mierzonego w tiknięciach licznika tempa
  • bajt czasu mierzonego w tiknięciach licznika tempa

12. TRON numer ścieżki

  • bajt $11
  • bajt numeru ścieżki ($00..$1F)

13. TROFF numer ścieżki

  • bajt $12
  • bajt numeru ścieżki ($00..$1F)

14. TRACK numer ścieżki

  • bajt $13
  • bajt numeru ścieżki ($00..$1F)

15. koniec utworu

  • bajt $20
  • bajt $20

Rozkaz końca utworu ma zawsze numer linii ustawiony na $8000 i bajt długości linii na $20 (co nie pokrywa się z prawdą, ponieważ ma ona zawsze rzeczywistą długość 5 bajtów - ma to zresztą odzwierciedlenie w słowie długości programu MASIC-a w nagłówku pliku).

16. PHAS OFF

  • bajt $21

17. WAIT czas

  • bajt $23
  • słowo czasu oczekiwania podanego w tiknięciach licznika tempa

18. KW OFF

  • bajt $40

19. ECHO kanał,kanał,opóźnienie

  • bajt $41
  • bajt numeru kanału - 1
  • bajt numeru kanału - 1
  • bajt opóźnienia liczonego w tiknięciach licznika tempa

20. ECHO OFF

  • bajt $42

21. END

  • bajt $43

22. OFF 1

  • bajt $80

23. OFF 2

  • bajt $81

24. OFF 3

  • bajt $82

25. OFF 4

  • bajt $83

26. PHAS fala,obwiednia,okres

  • bajt $C0
  • bajt indeksu fali
  • bajt indeksu obwiedni
  • słowo okresu

27. VIB 1,fala,obwiednia,głębokość,okres,okres

  • bajt $E0
  • bajt indeksu fali
  • bajt indeksu obwiedni
  • bajt głębokości (0..9)
  • słowo okresu
  • słowo okresu

28. VIB 2,fala,obwiednia,głębokość,okres,okres

  • bajt $E1
  • bajt indeksu fali
  • bajt indeksu obwiedni
  • bajt głębokości (0..9)
  • słowo okresu
  • słowo okresu

29. VIB 3,fala,obwiednia,głębokość,okres,okres

  • bajt $E2
  • bajt indeksu fali
  • bajt indeksu obwiedni
  • bajt głębokości (0..9)
  • słowo okresu
  • słowo okresu

30. VIB 4,fala,obwiednia,głębokość,okres,okres

  • bajt $E3
  • bajt indeksu fali
  • bajt indeksu obwiedni
  • bajt głębokości (0..9)
  • słowo okresu
  • słowo okresu

31. VIB 1,fala,głębokość,okres

  • bajt $E8
  • bajt indeksu fali
  • bajt głębokości (0..9)
  • słowo okresu

32. VIB 2,fala,głębokość,okres

  • bajt $E9
  • bajt indeksu fali
  • bajt głębokości
  • słowo okresu

33. VIB 3,fala,głębokość,okres

  • bajt $EA
  • bajt indeksu fali
  • bajt głębokości (0..9)
  • słowo okresu

34. VIB 4,fala,głębokość,okres

  • bajt $EB
  • bajt indeksu fali
  • bajt głębokości (0..9)
  • słowo okresu

35. VIB 1 OFF

  • bajt $F0

36. VIB 2 OFF

  • bajt $F1

37. VIB 3 OFF

  • bajt $F2

38. VIB 4 OFF

  • bajt $F3

Częstotliwości

Nuty podawane są w postaci częstotliwości podzielonej przez zakładaną częstotliwość odtwarzania równą 11059.2 Hz.

Nuta C w oktawie podstawowej ma częstotliwość 261 Hz.

Czas trwania

Czas trwania dźwięku podawany jest wg wzoru

         16384
value = -------
         czas 

Czas podany jest w tiknięciach licznika tempa.

Ciekawostki

  • Zabezpieczenie plików przed listowaniem w edytorze SoftSynth polega na nadaniu wszystkim liniom wartości 0.
  • Faktyczna częstotliwość odtwarzania playera wynosi 10983 Hz.
  • Rozszerzenie pliku zostało zaproponowane przez Mono, ponieważ oryginalne pliki modułów go nie miały (sporadycznie spotykano .MUS lub .SYN).

Linki

Personal tools