# PWAVplayer Version 0.9.6

(C) 2026, colrhon.org


## 1 Neu in Version 0.9.6

### 1.1 Soundthemen

Die Sound- und Gruppenfiles liegen nicht mehr im Rootverzeichnis sondern sind einem Soundthema zugeordnet. 
Ein Soundthema ist ein Ordner welcher ein komplettes Set von Sound- und Gruppenfiles enthält.
Das originale Soundthema ist im Ordner `orgsnd` abgelegt. Es können beliebig viele Soundthemen erstellt werden; 
eingestellt wird das aktuell zu verwendende Soundthema im Konfigurationsfile config.txt mit der 
Einstellung `stheme` (Default ist `stheme=orgsnd`).

### 1.2 Reihenfolge der Soundfile-Attribute ist nicht mehr fixiert

Bis Version V0.9.3 ist die Reihenfolge mit `lbik` fixiert; ist ein Attribut nicht gesetzt, so ist an der Stelle ein `x` zu setzen.  
Neu ab V0.9.6 ist die Reihenfolge nicht mehr fixiert; das Attributfeld `vbxx` ist daher gleichwertig mit `xbxv`. 
Die Länge des Feldes bleibt mit 4 Stellen unverändert erhalten und muss mit `x` aufgefüllt werden. 

### 1.3 Zusätzliche Soundfile Attribute

    v für voice: das Soundfile beinhaltet Sprache
    q für quit: wie k, die looping Sounds (Soundfiles mit Flag l) bleiben erhalten


## 2 Upgrade von Version 0.9.3 nach 0.9.6

Der Inhalt der SD-Karte muss umstrukturiert werden. Dazu sind alle Sound- und Gruppenfiles unter dem Rootverzeichnis
in einen Ordner `orgsnd` zu verschieben.


## 3 Files und Ordner

### 3.1 Konfigurationsfile

Filename: `config.txt` (im Rootverzeichnis der SD Karte)

Das Konfigurationsfile darf fehlen, dann gelten die Default Einstellungen.

Inhalt:

##### 12- oder 16-Bit DAC

    dac=12       (default)  
    dac=16       

##### Mixer, Mischformel

    mix=sum      x1 + x2 + .. + xN
    mix=div2     x1/2 + x2/2 + .. + xN/2 (default)
    mix=sqrt     (x1 + x2 + .. + xN) / Sqrt(N)

##### Events

    evt=none     ausgeschaltet, keine Eventbehandlung über die GPIOs
    evt=flat     Events über die Eingänge 1..10 (default)
    evt=flat0    wie flat, alte Version (ohne rest period)
    evt=bw11     Binary encoded, Williams System 11
    evt=bg80     Binary encoded, Gottlieb 1/80/80B
    evt=zacc     Binary encoded, Zaccaria Gen 2

##### Debouncing der Schalter in Millisekunden (nur bei evt=flat relevant)

    deb=10        debounce 10ms (default = 5ms) 

##### Rest period

    rpd=120      gleitendes Zeitfenster ohne Interrupt nach Ablauf 
                 der Debouncing Zeit (default 60ms)

##### Serial Interface

    ser=none     ausgeschaltet (default)
    ser=i2c      I2C
    ser=uart     COM (Rx/Tx)

##### I2C Slave Adresse (nur relevant wenn ser=i2c), in HEX angeben

    addr=0x4E    (default 0x66)

##### Log File log.txt

    log=no       default
    log=yes      Log der Events in log.txt
    log=only     wie log=yes, aber ohne Betrieb des WAV-Players

##### Anpassen des Sprach-Volumens (Files mit `v` Attribut)

    volv=120     Faktor 1.2 (default 100)

##### Anpassen des Sound-Volumens (Files ohne `v` Attribut)

    vols=40      Faktor 0.4 (default 100)

##### Soundthema

    stheme=orgsnd (default)
    stheme=mysound

##### Beispiel

    # Beispiel, Kommentare sind erlaubt
    evt=zacc
    ser=uart
    volv=140
    vols=80
    # meine modifizierten Sounds
    stheme=mysound


### 3.2 Soundfile

Format: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 44100 Hz

Filename: `nnnn-aaaa-vvv-name.wav`

Beispiel: `0002-lbix-020-pianomusic.wav`

dabei gilt:

    0002    4-stellige Identifikationsnummer, entspricht der Schalternummer 
            der Hardware. Ist die Nummer höher als die Anzahl Schalter, 
            so kann der Sound nur mittels 'init' beim Aufstart oder via 
            einer seriellen (oder codierten) Schnittstelle angestossen werden.

    lbix    Kurzform der Attribute, siehe unten, immer 4-stellig.
            Bis Version V0.9.3: Die Reihenfolge ist mit 'lbik' fixiert; 
            wird ein Attribut nicht gesetzt, so ist an der Stelle ein 'x' 
            zu setzen.
            Neu ab V0.9.4: die Reihenfolge ist nicht mehr fixiert, die 
            Feldlänge von 4 Stellen bleibt erhalten 

    020     Lautstärke, hier auf 20% reduziert, immer 3-stellig.
            Maximalwert ist 100, d.h. man kann die Lautstärke nur reduzieren.

Attribute sind:

    l   loop        Einmal gestartet wird der Sound endlos wiederholt  
    b   break       Sound wird gestartet, ein evtl bereits laufender, 
                    gleichnamiger Sound wird vorher abgebrochen
    i   init        Sound wird beim Aufstart des Systems gestartet
    k   kill        Alle laufenden Sound werden abgebrochen, danach wird 
                    dieser Sound gestartet
    c   softkill    anstelle k, die Hintergrundmusik (Soundfiles mit 
                    Flag i) wird aber verschont
    v   voice       (ab V0.9.4) das File beinhaltet Sprache
    q   quit        (ab V0.9.4) anstelle k, die looping Sounds (Soundfiles 
                    mit Flag 'l') bleiben bestehen


### 3.3 Gruppenfile

Filename: `nnnn-a-m1-m2-..mN-name.grp`

Beispiel: `0004-r-7-23-12-exit-left-lane.grp`

Attribute sind:

    m   Mix (Zufallswahl)
    r   der Reihe nach

Die Zahlen 7,23,12 sind die Gruppenmitglieder. Sie müssen als Soundfile vorliegen.


### 3.4 Firmware Update
   
Name: `update.bin`

Download: https://colrhon.org/downlds/PWAVplayer

Nach dem Download ist das File im Root Verzeichnis der SD Karte mit dem Namen 'update.bin' abzulegen.
Beim nächsten Boot der Soundkarte wird die Firmware auf die neue Version nachgeführt und das File
nach `update.bin_nnnn` umbenannt (wobei `nnnn` eine Zufallszahl ist). Es gibt keine Versionenprüfung; 
man kann auch ein Downgrade machen.


### 3.5 Ordner mit gesprochenen Versionsnummern

Der Ordner darf fehlen, dann entfällt die Ausgabe der Versionsnummer beim Aufstart.

Name: `spokenvers`

Inhalt sind WAV Soundfiles mit der Namenskonvention version-X-Y-Z.wav also z.B. version-1-0-6.wav


### 3.6 Soundthemen

Die Ordner der Soundthemen liegen im Root Verzeichnis. 

Default Ordner ist `orgsnd`.

Es können beliebig viele Soundthemen erstellt werden; eingestellt wird das aktuell zu verwendende Soundthema 
mit der config-Varibale `stheme` (Defaultwert ist `orgsnd`).
