SS (format pliku)

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 13:42, 23 lip 2015
Mono (Dyskusja | wkład)
(Program w MASIC-u - przenumerowanie tokenow)
← Previous diff
Aktualna wersja
Mono (Dyskusja | wkład)
(Długa postać linii - fala+obwiednia)
Linia 1: Linia 1:
{{SDP}} {{SDP}}
-Format modułu programu [[Softsynth]].+Format modułu muzycznego programu [[Softsynth]].
-Plik składa się ze stałego nagłówka i stokenizowanego kodu programu w języku MASIC.+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. Wszystkie słowa zapisane są w kolejności LSB, MSB.
Linia 39: Linia 39:
<tr><td>offset</td><td>długość</td><td>opis</td></tr> <tr><td>offset</td><td>długość</td><td>opis</td></tr>
<tr><td>$0000</td><td>$0002</td><td>numer linii</td></tr> <tr><td>$0000</td><td>$0002</td><td>numer linii</td></tr>
-<tr><td>$0002</td><td>$0001</td><td>długość całej linii</td></tr>+<tr><td>$0002</td><td>$0001</td><td>długość linii</td></tr>
<tr><td>$0003</td><td>...</td><td>dane</td></tr> <tr><td>$0003</td><td>...</td><td>dane</td></tr>
</table> </table>
Linia 47: Linia 47:
* bity 0..14: numer linii * bity 0..14: numer linii
* bit 15: znacznik rodzaju linii (0=linia nuty, 1=linia rozkazu sterującego) * 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 === === Linia nuty ===
Linia 61: Linia 63:
Występuje tu tylko słowo częstotliwości nuty. 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 ==== ==== Długa postać linii ====
Linia 75: Linia 81:
* bit 5: czas trwania * bit 5: czas trwania
* bit 6: MSB czasu oczekiwania * bit 6: MSB czasu oczekiwania
-* bit 7: dodatkowy efekt+* bit 7: dodatkowe efekty
2. Słowo częstotliwości nuty. 2. Słowo częstotliwości nuty.
Linia 87: Linia 93:
* bajt LSB czasu oczekiwania, * bajt LSB czasu oczekiwania,
* bajt MSB czasu oczekiwania, * bajt MSB czasu oczekiwania,
-* bajt znaczników dodatkowych efektów:+* bajt znaczników dodatkowych efektów.
Znaczniki dodatkowych efektów: Znaczniki dodatkowych efektów:
Linia 103: Linia 109:
* bajt głębokości glissanda (0-9), * bajt głębokości glissanda (0-9),
* słowo czasu przejścia glissanda. * 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 === === Linia rozkazu sterującego ===
Linia 113: Linia 125:
* bajt $01 * bajt $01
-* bajt czasu wyświetlania tekstu mierzony w 1/50 sekundy+* bajt czasu wyświetlania tekstu mierzonego w 1/50 sekundy
* tekst do wyświetlenia zapisany w ATASCII * tekst do wyświetlenia zapisany w ATASCII
Linia 133: Linia 145:
* bajt głośności * bajt głośności
* słowo czasu trwania * słowo czasu trwania
-* słowo czasu oczekiwania+* słowo czasu oczekiwania liczonego w tiknięciach licznika tempa
5. <b>SET 2,fala,obwiednia,głośność,czas trwania,czas oczekiwania</b> 5. <b>SET 2,fala,obwiednia,głośność,czas trwania,czas oczekiwania</b>
Linia 142: Linia 154:
* bajt głośności * bajt głośności
* słowo czasu trwania * słowo czasu trwania
-* słowo czasu oczekiwania+* słowo czasu oczekiwania liczonego w tiknięciach licznika tempa
6. <b>SET 3,fala,obwiednia,głośność,czas trwania,czas oczekiwania</b> 6. <b>SET 3,fala,obwiednia,głośność,czas trwania,czas oczekiwania</b>
Linia 151: Linia 163:
* bajt głośności * bajt głośności
* słowo czasu trwania * słowo czasu trwania
-* słowo czasu oczekiwania+* słowo czasu oczekiwania liczonego w tiknięciach licznika tempa
7. <b>SET 4,fala,obwiednia,głośność,czas trwania,czas oczekiwania</b> 7. <b>SET 4,fala,obwiednia,głośność,czas trwania,czas oczekiwania</b>
Linia 160: Linia 172:
* bajt głośności * bajt głośności
* słowo czasu trwania * słowo czasu trwania
-* słowo czasu oczekiwania+* słowo czasu oczekiwania liczonego w tiknięciach licznika tempa
8. <b>MOD modulacja</b> 8. <b>MOD modulacja</b>
* bajt $08 * bajt $08
-* bajt typu modulacji+* bajt typu modulacji (0..4)
9. <b>SPEED tempo</b> 9. <b>SPEED tempo</b>
Linia 188: Linia 200:
* bajt $11 * bajt $11
-* bajt numeru ścieżki+* bajt numeru ścieżki ($00..$1F)
13. <b>TROFF numer ścieżki</b> 13. <b>TROFF numer ścieżki</b>
* bajt $12 * bajt $12
-* bajt numeru ścieżki+* bajt numeru ścieżki ($00..$1F)
14. <b>TRACK numer ścieżki</b> 14. <b>TRACK numer ścieżki</b>
* bajt $13 * bajt $13
-* bajt numeru ścieżki+* bajt numeru ścieżki ($00..$1F)
15. <b><i>koniec utworu</i></b> 15. <b><i>koniec utworu</i></b>
Linia 263: Linia 275:
* bajt indeksu fali * bajt indeksu fali
* bajt indeksu obwiedni * bajt indeksu obwiedni
-* bajt głębokości+* bajt głębokości (0..9)
* słowo okresu * słowo okresu
* słowo okresu * słowo okresu
Linia 272: Linia 284:
* bajt indeksu fali * bajt indeksu fali
* bajt indeksu obwiedni * bajt indeksu obwiedni
-* bajt głębokości+* bajt głębokości (0..9)
* słowo okresu * słowo okresu
* słowo okresu * słowo okresu
Linia 281: Linia 293:
* bajt indeksu fali * bajt indeksu fali
* bajt indeksu obwiedni * bajt indeksu obwiedni
-* bajt głębokości+* bajt głębokości (0..9)
* słowo okresu * słowo okresu
* słowo okresu * słowo okresu
Linia 290: Linia 302:
* bajt indeksu fali * bajt indeksu fali
* bajt indeksu obwiedni * bajt indeksu obwiedni
-* bajt głębokości+* bajt głębokości (0..9)
* słowo okresu * słowo okresu
* słowo okresu * słowo okresu
Linia 298: Linia 310:
* bajt $E8 * bajt $E8
* bajt indeksu fali * bajt indeksu fali
-* bajt głębokości+* bajt głębokości (0..9)
* słowo okresu * słowo okresu
Linia 312: Linia 324:
* bajt $EA * bajt $EA
* bajt indeksu fali * bajt indeksu fali
-* bajt głębokości+* bajt głębokości (0..9)
* słowo okresu * słowo okresu
Linia 319: Linia 331:
* bajt $EB * bajt $EB
* bajt indeksu fali * bajt indeksu fali
-* bajt głębokości+* bajt głębokości (0..9)
* słowo okresu * słowo okresu
Linia 356: Linia 368:
= Ciekawostki = = Ciekawostki =
-* Zabezpieczenie plików przed odczytem w edytorze SoftSynth polega na nadaniu wszystkim liniom wartości 0.+* Zabezpieczenie plików przed listowaniem w edytorze SoftSynth polega na nadaniu wszystkim liniom wartości 0.
* Faktyczna częstotliwość odtwarzania playera wynosi 10983 Hz. * 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). * Rozszerzenie pliku zostało zaproponowane przez [[Mono]], ponieważ oryginalne pliki modułów go nie miały (sporadycznie spotykano .MUS lub .SYN).

Aktualna wersja

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