Hello, Guest the thread was called387 times and contains 11 replays

last post from LilaQ at the

SID - Fehler in VICE bei ADSR-Release?

  • Hallo zusammen,


    habe eine Frage, vielleicht kann die jemand bestätigen oder widerlegen. Und zwar habe ich folgendes Testprogramm geschrieben:



    Wenn ich das im VICE ausführe höre ich einen Ton, der langsam ausläuft (durch den langen Release).

    Jetzt bin ich aber der Meinung, dass man eigentlich (fast) gar nichts hören können dürfte, oder?


    Laut Tabelle wären es 2ms für Attack auf Volume 0x08, dann direkt 6ms auf Sustain, welches auf 0x00 steht. Und von Sustain dann auf Release - und von 0x00 auf 0x00 sollte ja klar sein, da passiert nichts.


    Habe ich den Fehler in meinem Gedankengang, oder verhält sich VICE falsch?



    Ich danke euch schonmal für eure Expertise! :)


    VG
    LilaQ

  • LilaQ

    Changed the title of the thread from “SID - Fehler in VIC bei ADSR-Release?” to “SID - Fehler in VICE bei ADSR-Release?”.
  • Wenn ich das im VICE ausführe höre ich einen Ton, der langsam ausläuft (durch den langen Release).

    Ist auf einem echten C64 auch so, habe das Programm dort gerade getestet.


    Habe ich den Fehler in meinem Gedankengang [...] ?

    Dazu kann ich leider nichts sagen.

  • Hm. Danke erst mal für's Ausprobieren!


    Ich frage mich ob der Code dann einfach zu schnell läuft, und noch gar nicht bis zum DECAY auf 0x00 kommt, bevor der Ungate & RELEASE stattfindet. Sprich, der Ton befindet sich noch im Attack irgendwo, und wird dann von dort aus Released, und deswegen ist was zu hören :huh:

  • Per Gate On/Off kannst du ja auch Töne erzeugen: nach dem

    Einschalten (On) hörst du ja einen Knacks, und je nach Timing

    der Ons/Offs kannst du eine weitere Stimme generieren (in

    einigen Demos wird von Stimme4 gesprochen).


    Da ich die inneren Abläufe im SID nicht kenne, kann ich ja auch

    nur wie du vom Gehörten auf die Funktion schliessen. Meine

    Vermutung ist, dass bei Abbruch in der Attack-Phase auf volle

    Lautstärke (in Register 24) gesprungen wird und diese dann

    in der durch Ausschalten (Off) in der Release-Phase abklingt.

    (d.h. die Decay- und Sustain-Phase werden nicht durchlaufen)


    Falls du einen "echten" C64 hast, mach mal folgende Experimente:

    1. erzeuge eine Stimme mit Sustain-Level 15, versuch dir die

    Lautstärke zu merken

    2. erzeuge eine Stimme mit Sustain-Level 4, merk dir wieder

    die Lautstärke (müsste ja ca. 1/4 ggü Experiment 1 sein)

    3. führe deinen Code aus und entscheide, ob die Lautstärke

    nach Gate-Off so gross ist wie in Experiment 1 oder 2.

    Meine Vermutung (habe leider keinen C64 mehr): 1 und 3

    haben dieselbe Lautstärke.

  • Das ist eine sehr gute Überlegung! Das würde erklären warum vorhin (bevor ich deinen Beitrag gelesen habe) mein Versuch in VICE in meinem Code die generelle Lautstärke in dem Code zu ändern, trotzdem die (augenscheinlich) selbe Ausgabelautstärke im Release hatte.


    Leider habe ich keinen echten C64 zur Verfügung ;(

    Vielleicht wäre jemand anders noch mal so lieb, und könnte das auf der Hardware ausprobieren?

    Wenn das wirklich so ist, dann wäre das auch im Code für den Emulator leicht einzubauen dann.

  • Okay, dann werde ich einen unvollständigen Attack als volle Volume werten, wenn der Release einsetzt!

    Du solltest noch einen weiteren weiteren Versuch in Betracht ziehen:

    Was passiert, wenn du Gate=OFF schaltest, nachdem die

    Attack-Phase abgelaufen ist und die Decay-Phase gerade läuft:

    - ist die Lautstärke gleich der Lautstärke aus Register 24

    - oder die des Sustain-Levels

    - oder aber die aktuelle bei der Abarbeitung der Decay-Phase

    Du kennst ja aus deinen Attack-/Decay-Settings ja die Dauer

    und kannst damit ja eine Warteschleife vor Gate=OFF

    einfügen.


    (hm, habe schon viel rund um den SID ausprobiert und auch

    nachgemessen, aber auf die Idee, eine Phase abzubrechen,

    bin ich noch nicht gekommen. Ist aber wie mit dem VIC-II,

    da gibt's ja auch eine Menge undokumentierter Features)

  • :!: Die Idee ging mir auch durch den Kopf!


    Allerdings müsste ich den Code dann so timen, dass er auch wirklich genau im Decay stattfindet :huh: Da müsste ich mal nachrechnen, und hoffen dass mein Code dann auch dementsprechend passt.

    Ich probier mich da morgen mal dran zu wagen, dann poste ich auch hier was ich geschrieben habe, dann kann das ja vielleicht jemand absegnen und testen :)

  • Ich habe mal schnell zwei Programme runtergeschrieben, die das

    Testen erleichtern sollten.


    Das erste ("SIDASM1") installiert ein kleines Assemblerprogramm

    ab $C000. Es besteht im wesentlichen aus 3 Teilen. Teil 1 löscht

    alle SID-Register, Teil 2 lädt <Register/Value/Wait>-Tripple ab $C100.

    Je Register-Offset wird der Wert in das Register geschrieben,

    anschliessend wird je Tripple Teil3 aufgerufen und <Wait> Millisek.

    gewartet. Dann wird das nächste Tripple bearbeitet etc.


    Das zweite ("SIDADSR1") besteht ebenfalls aus 3 Teilen. Teil1 (ab

    Zeile 100) liesst ein Skript aus Teil 3 (ab Zeile 1000) und speichert

    es ab $C100 ab. Teil 2 ruft das Assemblerprogramm auf. Teil 3

    besteht nur aus Daten. Zuerst die Anzahl Tripple, dann je Zeile

    ein Tripple (Register-Offset,Value,Wait), dass je nach Testscenario

    angepasst werden kann. In meinem Szenario wird nur Stimme 1

    aktiviert und nach einer gewissen Zeit (20/50 ms) wieder ausgeschaltet.

    Für das Erstellen eigener Tests ist es am Besten, sich das Datasheet

    zum SID runterzuladen, lässt sich leicht im Netz finden.


    Zuerst muss SIDASM1 ausgeführt werden, dann kann SIDADSR1

    geladen und beliebig oft angepasst und ausgeführt werden.


    In ReadMe sind die 3 Teile des ASM-Programms, sollte nicht so

    schwer zu verstehen sein.


    Viel Spass.



    P.S.1: Ich habe vorhin noch eine Bemerkung zum Attack-Problem im

    Datasheet gefunden. Dort steht, dass das Gate jederzeit an- und

    ausgeschalten werden kann. Fällt das Ausschalten mit der Attack-Phase

    zusammen, dann wird als Ausgangslautstärke für das Abklingen die

    aktuelle Lautstärke aus der Attack-Phase genommen.

    P.S.2: Meine Programme kann man im Vice64 austesten, hier muss

    man aber bedenken, dass die SID-Implementierung und der "echte"

    SID sich unterscheiden können, ich möchte damit aber keine

    Gerüchte streuen.

  • Super Arbeit, ich danke dir! :-) Bin leider bisher noch nicht dazu gekommen weiter dran zu arbeiten.


    Quote

    Dort steht, dass das Gate jederzeit an- und

    ausgeschalten werden kann. Fällt das Ausschalten mit der Attack-Phase

    zusammen, dann wird als Ausgangslautstärke für das Abklingen die

    aktuelle Lautstärke aus der Attack-Phase genommen.

    Das hab ich auch im Datasheet gelesen, aber das passt ja dann nicht mit der Annahme von vor ein paar Tagen zusammen ?(

    Die 2 Befehle bis um UnGate in meinem Code verbrauchen ja grade mal 6 Zyklen, und sollten dann immer noch gaaanz am Anfang des Attacks stehen, oder?


    Ansonsten werde ich sobald wie möglich mal mit deinem Code und VICE rumspielen dann. Auch wenn mir da ein echter C64 lieber wäre um die Resultate wirklich verifizieren zu können :S