Difference between revisions of "SID-del bővített MIDI"

From Enterprise Wiki
Jump to: navigation, search
(Az ENVELOPE.TXT használata)
(A MIDI vezérlők használata)
 
(6 intermediate revisions by one other user not shown)
Line 6: Line 6:
 
Használatához ugyanarra van szükség, mint a Dave négyszögjelet használó Midiplay-hez, tehát az említett emulátoron kívül egy MIDI portra (pl. loopMidi, ill. Linuxon pl. a Midi Through port), valamint magára a Midiplay program SID emulációval bővített változatára.
 
Használatához ugyanarra van szükség, mint a Dave négyszögjelet használó Midiplay-hez, tehát az említett emulátoron kívül egy MIDI portra (pl. loopMidi, ill. Linuxon pl. a Midi Through port), valamint magára a Midiplay program SID emulációval bővített változatára.
  
=== Az ENVELOPE.TXT használata ===
+
=== A SID_MIDI.ENV (korábbi ENVELOPE.TXT) használata ===
Az envelope.txt felépítése némiképp eltér a korábbi, négyszögjeles midiplay-étől. Ugyanúgy használhatók a D, L, R, S paraméterek, melyek el is maradhatnak a hangszerdefiníció elejéről. A P paraméter viszont nem használható. Az időtartam után nem kettő, csak egy csatornát kell megadni hangerőnek (mivel a SID nem sztereó). A hajlítás is a megszokott módon adható meg, majd a PWM érték (négyszögjel kitöltési tényező), végül a hullámforma, mely lehet négyszögjel, háromszögjel és fűrészfog rezgés:
+
Az sid_midi.env felépítése némiképp eltér a korábbi, négyszögjeles envelope.txt-jétől. Ugyanúgy használhatók a D, L, R, S paraméterek, melyek el is maradhatnak a hangszerdefiníció elejéről. A P paraméter viszont nem használható. Az időtartam után nem kettő, csak egy csatornát kell megadni hangerőnek (mivel a SID nem sztereó). A hajlítás is a megszokott módon adható meg, majd a PWM érték (négyszögjel kitöltési tényező), végül a hullámforma, mely lehet négyszögjel, háromszögjel és fűrészfog rezgés:
  
 
  [L|R|S] IDŐTARTAM, HANGERŐ (0..31), HAJLÍTÁS (-4096..4095), PWM (0..255*), HULLÁMFORMA;
 
  [L|R|S] IDŐTARTAM, HANGERŐ (0..31), HAJLÍTÁS (-4096..4095), PWM (0..255*), HULLÁMFORMA;
Line 23: Line 23:
 
Példa:
 
Példa:
  
* 0 {
+
<nowiki>0 {</nowiki>
* 0, 30, 0, 64, 64;
+
  <nowiki>  0, 30, 0, 64, 64;</nowiki>
* 50,  0,  0, 0, 64;
+
<nowiki>  50,  0,  0, 0, 64;</nowiki>
* }
+
<nowiki>}</nowiki>
  
A sor végi 64-et azt jelentik, négyszögjel fog szólni. Bár az első fázis hanghossza 0, így ez még nem fog hallatszani, csak a hangerőt állítja be 30-ra, ami a következő fázisban 50 időtartamig le is fog csengeni, mivel a hangerő itt 0, amit a hang a fázis végére elér a 30-ról kiindulva. Az első fázis utolsó előtti száma, a 64 a négyszögjel kitöltési tényezőjét állítja be, ami a hang lecsengése végére fokozatosan átmegy "kitöltetlen" négyszögjelbe. Mindkét fázisban a hangmagasságnak (harmadik szám) 0 van megadva, így a hangmagasság változatlan marad végig.
+
A sor végi 64-ek azt jelentik, négyszögjel fog szólni. Bár az első fázis hanghossza 0, így ez még nem fog hallatszani, csak a hangerőt állítja be 30-ra, ami a következő fázisban 50 időtartamig le is fog csengeni, mivel a hangerő itt 0, amit a hang a fázis végére elér a 30-ról kiindulva. Az első fázis utolsó előtti száma, a 64 a négyszögjel kitöltési tényezőjét állítja be, ami a hang lecsengése végére fokozatosan átmegy "kitöltetlen" négyszögjelbe. Mindkét fázisban a hangmagasságnak (harmadik szám) 0 van megadva, így a hangmagasság változatlan marad végig.
  
 
=== A MIDI vezérlők használata ===
 
=== A MIDI vezérlők használata ===
* 10-es vezérlő (Pan): nem támogatott
+
'''7-es vezérlő (Volume)''': hangerő
* 74-es vezérlő: négyszögjel kitöltési tényezője, ez a burkológörbével együtt határozza meg a tényleges értéket
+
 
* 71, 76: hasonló célú a DAVE-es lejátszóhoz, de itt a 3-5. bitek a hullámformát és a gyűrűmodulációt állítják a SIDBASIC formátumával azonos módon (csak két bittel jobbra léptetve)
+
10-es vezérlő (Pan): nem támogatott
* 70, 77: ez is hasonló, de továbbfejlesztve, a harmadik csatorna is osztható (csak két hangra), és több lehetőség van a csatorna foglalás vezérlésére
+
 
 +
'''74-es vezérlő:''' négyszögjel kitöltési tényezője (pwm), ez a burkológörbével együtt határozza meg a tényleges értéket. Alapértelmezett értéke 64, emellett a burkológörbe érték változatlan marad. Ha 0, akkor -50%, ha 127, akkor pedig valamivel kevesebb mint +50%. Azaz egészen pontosan a ténylegesen használt érték (ENV_PWM + CTL74*2 + 128) & 255.
 +
 
 +
'''71, 76-os vezérlő:''' hasonló célú a DAVE-es lejátszóhoz, de itt a 3-5. bitek a hullámformát és a gyűrűmodulációt állítják a SIDBASIC formátumával azonos módon (csak két bittel jobbra léptetve):
 +
* 0 = háromszög
 +
* 8 = fűrész
 +
* 16 = négyszög
 +
* 24 = zaj
 +
* +32 = gyűrűmoduláció.
 +
 
 +
A gyűrűmoduláció az eggyel kisebb számú csatornával történik.
 +
A vezérlő és a burkológörbe között XOR művelet történik.
 +
 
 +
'''70, 77-es vezérlő:''' csatornafoglalás vezérlése, mint a Dave-es lejátszóban, de továbbfejlesztve, a harmadik csatorna is osztható (csak két hangra), és több lehetőség van a csatorna foglalás vezérlésére. Ez többet tud, de bonyolultabb is mint a DAVE-es lejátszóban. Mind a 7 bit használt:
 +
* b5, b6: az elsőnek próbált (legmagasabb prioritású) csatorna, 0..3
 +
* b2..b4: a másodiknak próbált csatorna (csak akkor foglalja ezt, ha jobb az elsőnél), 0..7
 +
* b0, b1: a harmadiknak próbált csatorna & 3, 0..3 ha a második < 4, 4..7 ha a második >= 4
 +
 
 +
Az alábbi példák mind 0..127 közötti tartományt tételeznek fel:
 +
 
 +
* 0: csak a 0. csatorna
 +
* 37: csak az 1. csatorna
 +
* 74: csak a 2. csatorna
 +
* 6: dinamikus foglalás 0, 1, 2 sorrendben
 +
* 40: dinamikus foglalás 1, 2, 0 sorrendben
 +
* 65: dinamikus foglalás 2, 0, 1 sorrendben
 +
* 5: csak a 0. és 1. csatorna
 +
* 10: csak a 0. és 2. csatorna
 +
* 42: csak az 1. és 2. csatorna
 +
* 18: 0. csatorna 50 Hz-en osztva (0, 4, 6)
 +
* 55: 1. csatorna osztva (1, 5, 7)
 +
* 79: 2. csatorna osztva (2, 3)
 +
 
 +
Az alapértelmezés csatornánként változik:
 +
* MIDI csatorna 1: 06h = 00 001 10b = 0, 1, 2
 +
* MIDI csatorna 2: 28h = 01 010 00b = 1, 2, 0
 +
* MIDI csatorna 3: 41h = 10 000 01b = 2, 0, 1
 +
 
 +
és ez a minta ismétlődik, kivéve a 10-esnél, ami alapértelmezés szerint mindig a 2-es csatornát használja (4Ah). A 3..7. "SID csatornák" a tényleges fizikai csatornákkal (0-2.) osztva használhatók:
 +
* 0, 4, 6
 +
* 1, 5, 7
 +
* 2, 3
 +
Tehát például az 1-es csatorna osztásához 01 101 11b = 37h = 55 értékre kell állítani a vezérlőt.

Latest revision as of 12:01, 28 October 2017

A Midiplay az Enterprise Dave chipjének eredeti négyszögjel generálásával kapcsolatos képességeit használja ki, igen jó hatásfokkal. Ennek továbbfejlesztett változata még több hangzást tesz lehetővé, melynek alapja a SIDBASIC nevű, 2016-2017-ben írt Enterprise program, amely a Commodore 64 hangchip emulációja által C64-es zenéket tud lejátszani, többnyire eredeti, C64-es hangzásban. Ez többek között azt jelenti, hogy a négyszögjel mellett más hullámformájú hangokat is meg tud szólaltatni. Képes továbbá a PWM effektus megvalósítására, azaz a négyszögjel kitöltési tényezőjét is lehet vele állítani.

Az alapok

A SID emulációval bővített MIDIPLAY használatához szükség van az EP128Emu legfrissebb változatára, mely kezeli a MIDI bemenetet. A helyes működéséhez 10 MHz-es konfigurációra van szükség (CPU frequency = 10000000, Sound clock frequency = 1250000), normál sebességnél kilép az EP logóhoz. A burkológörbe frekvencia elvileg 100 Hz-es, a lejátszás pedig 12626 Hz ha az órajelek jól vannak beállítva.

Használatához ugyanarra van szükség, mint a Dave négyszögjelet használó Midiplay-hez, tehát az említett emulátoron kívül egy MIDI portra (pl. loopMidi, ill. Linuxon pl. a Midi Through port), valamint magára a Midiplay program SID emulációval bővített változatára.

A SID_MIDI.ENV (korábbi ENVELOPE.TXT) használata

Az sid_midi.env felépítése némiképp eltér a korábbi, négyszögjeles envelope.txt-jétől. Ugyanúgy használhatók a D, L, R, S paraméterek, melyek el is maradhatnak a hangszerdefiníció elejéről. A P paraméter viszont nem használható. Az időtartam után nem kettő, csak egy csatornát kell megadni hangerőnek (mivel a SID nem sztereó). A hajlítás is a megszokott módon adható meg, majd a PWM érték (négyszögjel kitöltési tényező), végül a hullámforma, mely lehet négyszögjel, háromszögjel és fűrészfog rezgés:

[L|R|S] IDŐTARTAM, HANGERŐ (0..31), HAJLÍTÁS (-4096..4095), PWM (0..255*), HULLÁMFORMA;

A PWM valójában lehet a 0-255 tartományon kívül is, de csak az alsó 8 bit számít.

A hullámforma:

  • 0: háromszögjel
  • 32: fűrészjel
  • 64: négyszögjel
  • 96: zaj
  • 128: hozzáadása engedélyezi a gyűrűmodulációt.

Példa:

0 {
   0, 30, 0, 64, 64;
   50,  0,  0, 0, 64;
}

A sor végi 64-ek azt jelentik, négyszögjel fog szólni. Bár az első fázis hanghossza 0, így ez még nem fog hallatszani, csak a hangerőt állítja be 30-ra, ami a következő fázisban 50 időtartamig le is fog csengeni, mivel a hangerő itt 0, amit a hang a fázis végére elér a 30-ról kiindulva. Az első fázis utolsó előtti száma, a 64 a négyszögjel kitöltési tényezőjét állítja be, ami a hang lecsengése végére fokozatosan átmegy "kitöltetlen" négyszögjelbe. Mindkét fázisban a hangmagasságnak (harmadik szám) 0 van megadva, így a hangmagasság változatlan marad végig.

A MIDI vezérlők használata

7-es vezérlő (Volume): hangerő

10-es vezérlő (Pan): nem támogatott

74-es vezérlő: négyszögjel kitöltési tényezője (pwm), ez a burkológörbével együtt határozza meg a tényleges értéket. Alapértelmezett értéke 64, emellett a burkológörbe érték változatlan marad. Ha 0, akkor -50%, ha 127, akkor pedig valamivel kevesebb mint +50%. Azaz egészen pontosan a ténylegesen használt érték (ENV_PWM + CTL74*2 + 128) & 255.

71, 76-os vezérlő: hasonló célú a DAVE-es lejátszóhoz, de itt a 3-5. bitek a hullámformát és a gyűrűmodulációt állítják a SIDBASIC formátumával azonos módon (csak két bittel jobbra léptetve):

  • 0 = háromszög
  • 8 = fűrész
  • 16 = négyszög
  • 24 = zaj
  • +32 = gyűrűmoduláció.

A gyűrűmoduláció az eggyel kisebb számú csatornával történik. A vezérlő és a burkológörbe között XOR művelet történik.

70, 77-es vezérlő: csatornafoglalás vezérlése, mint a Dave-es lejátszóban, de továbbfejlesztve, a harmadik csatorna is osztható (csak két hangra), és több lehetőség van a csatorna foglalás vezérlésére. Ez többet tud, de bonyolultabb is mint a DAVE-es lejátszóban. Mind a 7 bit használt:

  • b5, b6: az elsőnek próbált (legmagasabb prioritású) csatorna, 0..3
  • b2..b4: a másodiknak próbált csatorna (csak akkor foglalja ezt, ha jobb az elsőnél), 0..7
  • b0, b1: a harmadiknak próbált csatorna & 3, 0..3 ha a második < 4, 4..7 ha a második >= 4

Az alábbi példák mind 0..127 közötti tartományt tételeznek fel:

  • 0: csak a 0. csatorna
  • 37: csak az 1. csatorna
  • 74: csak a 2. csatorna
  • 6: dinamikus foglalás 0, 1, 2 sorrendben
  • 40: dinamikus foglalás 1, 2, 0 sorrendben
  • 65: dinamikus foglalás 2, 0, 1 sorrendben
  • 5: csak a 0. és 1. csatorna
  • 10: csak a 0. és 2. csatorna
  • 42: csak az 1. és 2. csatorna
  • 18: 0. csatorna 50 Hz-en osztva (0, 4, 6)
  • 55: 1. csatorna osztva (1, 5, 7)
  • 79: 2. csatorna osztva (2, 3)

Az alapértelmezés csatornánként változik:

  • MIDI csatorna 1: 06h = 00 001 10b = 0, 1, 2
  • MIDI csatorna 2: 28h = 01 010 00b = 1, 2, 0
  • MIDI csatorna 3: 41h = 10 000 01b = 2, 0, 1

és ez a minta ismétlődik, kivéve a 10-esnél, ami alapértelmezés szerint mindig a 2-es csatornát használja (4Ah). A 3..7. "SID csatornák" a tényleges fizikai csatornákkal (0-2.) osztva használhatók:

  • 0, 4, 6
  • 1, 5, 7
  • 2, 3

Tehát például az 1-es csatorna osztásához 01 101 11b = 37h = 55 értékre kell állítani a vezérlőt.