Skip to content

real70discohits/liedteksten-code

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

156 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Liedteksten Toolkit

Dit is een Python-gebaseerde toolkit voor het beheren en genereren van bestanden gerelateerd aan popliedjes zoals liedteksten, liedteksten met gitaartabs en akkoorden, maar ook hulpbestanden die teksten koppelen aan maten en structuurbestanden die lied-statistieken en -compositie tonen.

Inhoudsopgave

Overzicht Scripts

Script Doel
init-liedsecties.py Initialiseert .nwctxt sectiebestanden voor een lied door ze te kopiëren vanuit een template; bestaande bestanden worden overgeslagen
propagate-staffs.py Propageert staffs vanuit een template naar alle sectiebestanden van een lied: voegt ontbrekende staffs toe en zet alle staffs in de juiste volgorde
pad-staffs.py Vult in elk lieddeel alle staffs aan met lege rust-maten zodat hun maataantal en eindstructuur overeenkomt met de Bass-staff van dat lieddeel
nwc-concat.py Voegt NoteWorthy Composer (NWC) sectiebestanden samen tot één compleet bestand en genereert structuurinformatie, analyse en label tracks voor Audacity/Tenacity
nwc_analyze.py Analyseert NWC bestanden en koppelt liedteksten aan maatnummers (onderdeel van nwc-concat)
lt-generate.py Genereert PDF's van liedteksten in verschillende varianten (met/zonder akkoorden, maatnummers, tabs) vanuit LaTeX bronbestanden
nwc-convert.py Converteert NWC bestanden naar audioformaten (NWCTXT → MIDI → WAV → FLAC) voor demo's

Workflow

Het complete proces voor het maken/updaten van een lied (zie ook project/schema.pu voor visuele weergave):

  1. Muzieknotatie maken (Handmatig / init-liedsecties.py)

    • Maak het intro-bestand handmatig in NoteWorthy Composer GUI als startpunt
    • Bewaar in git repository: <input_folder>/<Liedtitel>/nwc/
    • Gebruik init-liedsecties.py om de overige sectiebestanden automatisch aan te maken als kopie van het intro-bestand
    • Maak volgorde.jsonc om de volgorde van secties te definiëren
  2. nwc-concat.py uitvoeren

    • Maakt samengevoegd .nwctxt bestand → build folder
    • Maakt analysis.txt (teksten gekoppeld aan maten) → build folder
    • Maakt structuur.tex (liedstructuur/statistieken) → build folder
    • Update tempo en maatsoort in liedtekst .tex → git repository
    • Maakt labeltrack.txt (voor Tenacity/Audacity) → audio_output_folder
  3. nwc-convert.py uitvoeren (optioneel, voor audio demo's)

    • Roept nwc-conv.exe aan: .nwctxt → .mid → audio_output_folder
    • Roept fluidsynth.exe aan: .mid → .wav → audio_output_folder
    • Roept ffmpeg.exe aan: .wav → .flac → audio_output_folder
  4. Liedtekst maken/updaten (Handmatig)

    • Maak of update liedtekst .tex bestand in git repository
    • Gebruik analysis.txt (uit build folder) als referentie voor maatnummers en structuur
  5. lt-generate.py uitvoeren

    • Rendert liedtekst PDF's (alle varianten) → distributie folder
    • Rendert structuur.pdf → distributie folder
  6. lt-upload.ps1 uitvoeren (optioneel)

    • Upload gegenereerde PDF's van dist folder naar PDrive (cloud opslag)
  7. Audio-opname maken (Handmatig)

    • Importeer .flac bestand in Tenacity (van audio_output_folder)
    • Importeer labeltrack.txt in Tenacity (van audio_output_folder)
    • Maak opname met correct gelabelde secties

Opslaglocaties

  • git repository (input_folder): Bronbestanden (.tex, .nwctxt, volgorde.jsonc, lt-config.jsonc)
  • build folder (build_folder): Tussenbestanden (samengevoegd .nwctxt, analysis.txt, structuur.tex)
  • distributie folder (distributie_folder): Definitieve PDF's klaar voor distributie
  • audio_output_folder: Audiobestanden (.mid, .wav, .flac) en labeltrack.txt voor Tenacity
  • PDrive: Cloud backup van gegenereerde PDF's (via lt-upload.ps1)

Gedetailleerde Commando Referentie

nwc-concat.py

Voegt individuele NoteWorthy Composer sectiebestanden samen tot één compleet liedbestand en genereert aanvullende bestanden zoals structuurinformatie en label tracks.

Syntax

python nwc-concat.py <liedtitel> [opties]

Positionele Parameters

Parameter Beschrijving
liedtitel Titel van het lied (verplicht). Dit moet overeenkomen met de mapnaam in de input folder

Optionele Parameters

Parameter Waarden Standaard Beschrijving
--keep-tempi (vlag) Uit Behoud tempo-indicaties in alle liedsecties. Standaard worden tempo-markeringen uit liedsecties na het eerste verwijderd, omdat alleen het eerste liedsectie het tempo bepaalt

Tempo en Maatsoort tijdens samenvoegen

  • Tempo: zoals hierboven beschreven worden tempo-markeringen uit lieddelen na het eerste standaard verwijderd; met --keep-tempi blijven ze behouden. Handig wanneer een lieddeel bewust een ander tempo heeft (bv. een langzamer middenstuk).
  • Maatsoort (slim filter): een |TimeSig| regel uit een lieddeel na het eerste wordt alleen behouden als de maatsoort daadwerkelijk afwijkt van de op dat moment actieve maatsoort van die staff. Redundante duplicaten (elk lieddeel dat nog eens 4/4 declareert) worden weggelaten, maar echte maatsoortwisselingen tussen lieddelen — en mid-lieddeel wisselingen binnen één bestand — blijven bewaard. Dit slimme filter staat altijd aan; er is geen CLI-vlag voor.

Voorbeelden

# Basis gebruik: voeg secties van "Vader Jacob" samen
python nwc-concat.py "Vader Jacob"

# Behoud alle tempo-markeringen in alle secties
python nwc-concat.py "Vader Jacob" --keep-tempi

# Lied met spaties in de naam
python nwc-concat.py "Boer wat zeg je van mijn kippen"

Gegenereerde Bestanden

Dit script genereert de volgende bestanden:

  1. <liedtitel>.nwctxt → build folder

    • Samengevoegd NWC bestand met alle secties
  2. <liedtitel> analysis.txt → build folder

    • Tekstbestand met liedteksten gekoppeld aan maatnummers
    • Bevat metadata zoals totaal aantal maten, tempo, maatsoort
  3. <liedtitel> structuur.tex → build folder

    • LaTeX bestand met liedstructuur, statistieken en compositie-overzicht
  4. <liedtitel> labeltrack t_<tempo>.txt → audio_output_folder/<liedtitel>/

    • Label track voor Audacity/Tenacity met tijdstempels voor secties
    • Bevat zowel liedsectie-labels als LBLTRCK markers uit het NWC bestand
  5. Update van <liedtitel>.tex → git repository (input folder)

    • Update tempo en maatsoort in het hoofdliedtekst .tex bestand

Vereisten

  • NWC subfolder in liedmap met individuele sectiebestanden
  • volgorde.jsonc bestand dat de volgorde van secties definieert
  • Bass staff (notenbalk) in NWC bestanden (voor tempo, maatsoort, akkoorden)
  • Ritme staff in NWC bestanden (voor maataantallen)
  • Zang staff in NWC bestanden (voor liedteksten mapping naar maatnummers)
  • Volgorde van staffs is vrij, maar moet gelijk zijn in alle sectiebestanden.

init-liedsecties.py

Initialiseert .nwctxt sectiebestanden voor een lied door ze te kopiëren vanuit een template. Voor elke opgegeven sectienaam wordt een bestand <liedtitel> <sectie>.nwctxt aangemaakt in de nwc-submap van het lied. Bestaande bestanden worden nooit overschreven.

Dit script is het startpunt voor een nieuw lied: maak eerst het intro-bestand handmatig in NoteWorthy Composer, en gebruik dit script vervolgens om alle overige sectiebestanden klaar te zetten. Daarna kan propagate-staffs.py worden gebruikt om staffs te synchroniseren.

Syntax {#syntax-il}

python init-liedsecties.py <liedtitel> --sectie-namen <sectie> [<sectie> ...] [--template <bestandsnaam>]

Verplichte Parameters {#verplichte-parameters-il}

Parameter Beschrijving
liedtitel Titel van het lied (verplicht). Moet overeenkomen met de mapnaam in de input folder
--sectie-namen Eén of meer sectienamen om aan te maken. Meerdere woorden per naam zijn mogelijk met aanhalingstekens

Optionele Parameters {#optionele-parameters-il}

Parameter Beschrijving
--template Bestandsnaam van het template .nwctxt bestand (zonder extensie). Het bestand moet in de input folder staan. Als niet opgegeven, wordt <liedtitel> intro.nwctxt uit de nwc-submap gebruikt

Voorbeelden {#voorbeelden-il}

# Maak vers- en refreinbestand aan met intro als standaard template
python init-liedsecties.py "Vader Jacob" --sectie-namen vers refrein

# Sectienaam met meerdere woorden
python init-liedsecties.py "Vader Jacob" --sectie-namen vers refrein "overgang couplet refrein"

# Maak alle bestanden aan inclusief intro, met expliciet template uit de input folder
python init-liedsecties.py "Vader Jacob" --sectie-namen intro vers refrein --template "Mijn Template"

# Tweede run: reeds bestaande bestanden worden overgeslagen
python init-liedsecties.py "Vader Jacob" --sectie-namen vers refrein brug
# → "vers" en "refrein" worden overgeslagen als ze al bestaan; "brug" wordt aangemaakt

Template-locatie {#template-locatie-il}

Er zijn twee manieren om het template te bepalen:

  1. Expliciet (--template "Bestandsnaam"): het template wordt gezocht in de input folder (de map die alle liedmappen bevat). Zo kan één template voor meerdere liedjes worden hergebruikt.

  2. Impliciet (geen --template): het script zoekt naar <liedtitel> intro.nwctxt in de nwc-submap van het lied. Als dit bestand niet bestaat, geeft het script een foutmelding.

Let op: als geen --template is opgegeven, mag 'intro' niet in --sectie-namen staan. Het intro-bestand kan niet tegelijk als template en als nieuw bestand fungeren.

Intro-specifieke kwartrust {#intro-kwartrust-il}

Voor een sectie met de naam intro (hoofdletterongevoelig) voegt het script in elke staff vooraan een |Rest|Dur:4th + |Bar toe, direct na de voortekens (Clef, TimeSig, Key, Tempo) en vóór het eerste |Dur: van de muziek. Reden: recording-software laat aan het begin van een audio-opname vaak een korte ruis horen waardoor de eerste tel verloren gaat. Deze extra kwartrust vangt die ruisfase op zodat de feitelijke muziek schoon begint. Hierdoor hoeft het template zelf géén kwartrust+maatstreep te bevatten — secties anders dan intro krijgen die ook niet, het template kan dus zonder aanpassing voor alle secties worden gebruikt.

Bijzonderheden:

  • Drum-staffs (|Group:"drums" op de |AddStaff| regel): de nieuwe rest en bar worden ingesloten door de marker |User|DrumStaff_AUDIO.fso|Pos:1|Class:StaffSig|InOut:Y, consistent met de NWC drum-conventie zoals ook door pad-staffs.py toegepast.
  • Idempotent: als de staff al begint met |Rest|Dur:4th direct gevolgd door |Bar (eventueel met een tussenliggende drum-marker), wordt er niets toegevoegd. Een tweede aanroep is dus een no-op.
  • Bij succes meldt het script ➕ Kwartrust + maatstreep toegevoegd aan intro onder de betreffende ✅ Aangemaakt-regel.

Vereisten {#vereisten-il}

  • De liedmap <input_folder>/<liedtitel>/ moet bestaan
  • Bij gebruik van de standaard template: <liedtitel> intro.nwctxt in de nwc-submap
  • Bij expliciet template: het opgegeven bestand in de input folder

propagate-staffs.py

Propageert staffs vanuit een template naar alle .nwctxt sectiebestanden van een lied. Hiermee zorg je dat alle sectiebestanden dezelfde staffs bevatten en in dezelfde volgorde staan, als voorbereiding op nwc-concat.py.

Syntax

python propagate-staffs.py <liedtitel> [template]

Positionele Parameters

Parameter Beschrijving
liedtitel Titel van het lied (verplicht). Moet overeenkomen met de mapnaam in de input folder
template Bestandsnaam van het template .nwctxt bestand (optioneel, zonder extensie, hoofdlettergevoelig). Het bestand moet in de input folder staan (de map die de liedmappen bevat). Als weggelaten, wordt de eerste sectie uit volgorde.jsonc als template gebruikt

Wat het script doet

Het script doorloopt alle unieke sectiebestanden die vermeld staan in <liedtitel> volgorde.jsonc:

  1. Ontbrekende staffs toevoegen: Elke staff die wel in het template zit maar niet in het doelbestand, wordt toegevoegd. De header-regels (AddStaff, StaffProperties, StaffInstrument, Clef, TimeSig, Tempo, Dynamic) worden ongewijzigd gekopieerd, gevolgd door de eerste 2 echte maten uit het template. Een "echte" maat heeft een totale duur van meer dan 1 kwartalnoot (lege maten en opmaten worden overgeslagen).

  2. Volgorde corrigeren: Alle staffs worden gesorteerd conform de template-volgorde. Staffs die niet in het template voorkomen worden achteraan geplaatst.

  3. Bass-check: Na verwerking wordt gecontroleerd of de eerste staff de naam "Bass" heeft. Zo niet, wordt een waarschuwing getoond.

Staffs worden nooit verwijderd. Als een sectiebestand al alle staffs in de juiste volgorde heeft, wordt het niet aangeraakt.

Voorbeelden

# Gebruik de eerste sectie (meestal 'intro') als template
python propagate-staffs.py "Vader Jacob"

# Gebruik een expliciet template bestand uit de input folder
python propagate-staffs.py "Vader Jacob" "Mijn Template"

# Extensie mag ook worden opgegeven
python propagate-staffs.py "Vader Jacob" "Mijn Template.nwctxt"

Template-locatie

Template bestanden staan in de input folder (de parent van de git repository, dus dezelfde map als de liedmappen). Zo kun je één template hergebruiken voor meerdere liedjes.

Typische workflow

# 1. Maak nieuwe sectiebestanden aan in NoteWorthy Composer
#    Bewaar in: <input_folder>/Vader Jacob/nwc/

# 2. Zorg dat alle sectiebestanden dezelfde staffs hebben
python propagate-staffs.py "Vader Jacob"

# 3. Pas zonodig de muziekinhoud aan per sectie in NoteWorthy Composer

# 4. Voeg alles samen en genereer structuur
python nwc-concat.py "Vader Jacob"

Vereisten

  • <liedtitel> volgorde.jsonc in de nwc-subfolder van het lied
  • Template bestand (of het eerste sectiebestand) moet geldig zijn en staffs bevatten

pad-staffs.py

Vult in elk lieddeel alle staffs aan met lege rust-maten zodat ze hetzelfde aantal maten én dezelfde eindstructuur hebben als de Bass-staff van dat lieddeel.

Typische volgorde in het maakproces: nadat je met propagate-staffs.py alle staffs hebt klaargezet (met 1 of 2 sjabloon-maten) en daarna de Bass-lijn handmatig hebt uitgeschreven, weet je per lieddeel hoeveel maten het bevat. pad-staffs.py synchroniseert dan in één klap alle overige staffs naar dat maataantal, zodat je er muziekinhoud in kunt schrijven zonder eerst zelf maten te moeten toevoegen.

Syntax {#syntax-ps}

python pad-staffs.py <liedtitel>

Positionele Parameters {#positionele-parameters-ps}

Parameter Beschrijving
liedtitel Titel van het lied (verplicht). Moet overeenkomen met de mapnaam in de input folder

Wat het script doet {#wat-het-script-doet-ps}

Het script doorloopt alle unieke sectiebestanden vermeld in <liedtitel> volgorde.jsonc en voor elk bestand:

  1. Maattelling van de Bass: het script telt het aantal maten in de Bass-staff (|Bar markers plus, indien aanwezig, een laatste dangling maat met |Dur:-content).

  2. Maatsoort van de Bass: de laatst voorkomende |TimeSig|Signature: in de Bass bepaalt welke rust-duration één lege maat vult (Whole voor 4/4, Half,Dotted voor 3/4 of 6/8, etc.). Voor onbekende maatsoorten wordt Rest|Dur:Whole als fallback gebruikt met een waarschuwing.

  3. Aanvullen van overige staffs: voor elke staff in het bestand (behalve de Bass zelf en staffs in PAD_STAFFS_IGNORED_STAFFS, zoals "Ritme" en "Drums") wordt het maataantal vergeleken met de Bass:

    • Te weinig maten → er worden lege rust-maten achteraan toegevoegd tot de tellingen overeenkomen.
    • Gelijk aantal → geen padding nodig.
    • Te veel maten → niet aangepast, alleen een waarschuwing.
  4. Drum-staffs: staffs in de groep "drums" (gedetecteerd via |Group:"drums" op de |AddStaff| regel) krijgen rond elke nieuw toegevoegde rust-maat de marker-regel |User|DrumStaff_AUDIO.fso|Pos:1|Class:StaffSig|InOut:Y als opening- én sluitingsmarkering, conform de NWC drum-staff conventie.

  5. Eindstructuur uitlijnen: als de Bass eindigt op een |Bar (gesloten laatste maat — herkenbaar aan |Bar direct gevolgd door |AddStaff|...), dan wordt aan elke andere staff ook een afsluitende |Bar toegevoegd. Hierdoor liggen de eindbarlines in NWC visueel op één lijn, wat helpt bij het controleren of de totale duur van alle staffs gelijk is.

Voorbeelden {#voorbeelden-ps}

# Vul in alle lieddelen van "Vader Jacob" alle staffs aan tot Bass-maataantal
python pad-staffs.py "Vader Jacob"

Typische workflow {#typische-workflow-ps}

# 1. Maak sectiebestanden aan (intro al handmatig in NWC GUI)
python init-liedsecties.py "Vader Jacob" --sectie-namen vers refrein brug

# 2. Zorg dat alle sectiebestanden dezelfde staffs hebben
python propagate-staffs.py "Vader Jacob"

# 3. Schrijf in NoteWorthy Composer de Bass-lijn uit per lieddeel
#    (Bepaalt de definitieve maatlengte van elk lieddeel.)

# 4. Vul de overige staffs aan met lege maten zodat ze even lang zijn als de Bass
python pad-staffs.py "Vader Jacob"

# 5. Werk de inhoud van de overige staffs verder uit in NWC

# 6. Voeg samen en genereer structuur
python nwc-concat.py "Vader Jacob"

Vereisten {#vereisten-ps}

  • <liedtitel> volgorde.jsonc in de nwc-subfolder van het lied
  • Een Bass-staff in elk genoemd sectiebestand (anders wordt dat bestand overgeslagen met een waarschuwing)
  • De PAD_STAFFS_IGNORED_STAFFS lijst in constants.py bepaalt welke staffs worden overgeslagen (standaard: Ritme en Drums)

lt-generate.py

Genereert PDF's van liedteksten in verschillende varianten vanuit LaTeX (.tex) bronbestanden. Kan verschillende combinaties genereren van tekst, maatnummers, akkoorden en gitaartabs.

Syntax

python lt-generate.py [liedtitels...] [opties]

Positionele Parameters

Parameter Beschrijving
liedtitels Een of meer liedtitels (optioneel). Als niet opgegeven, worden alle liedteksten in de input folder verwerkt

Optionele Parameters

Parameter Waarden Standaard Beschrijving
--no-cleanup (vlag) Uit Behoud hulpbestanden (.aux, .log, .out, .toc) na compilatie. Handig voor debugging LaTeX fouten
--no-structuur (vlag) Uit Sla het genereren van structuur PDF's over. Handig tijdens ontwikkeling als je alleen liedtekst PDF's wilt
--debug (vlag) Uit Toon pdflatex output op het scherm (zet capture_output=False). Handig voor het debuggen van LaTeX compilatiefouten
--engine pdflatex, xelatex, lualatex pdflatex Specificeer welke TeX engine te gebruiken voor compilatie
--tab-orientation left, right, traditional left Oriëntatie van gitaartabs. Bepaalt hoe de snaren worden weergegeven
-n, --only -1, 0, 1, 2, 3, 4, 5 0 Genereer alleen specifieke variant(en). Zie variant tabel hieronder
--large-print vlag Uit Optimaliseer de PDF output voor leesbaarheid: groot font, en vetgedrukt.

Varianten

Het --only parameter bepaalt welke variant(en) worden gegenereerd:

Waarde Betekenis Variant(en)
0 Alles (standaard) Genereer alle 5 varianten
-1 Alleen geconfigureerde Genereer alleen varianten waarvoor een configuratie bestaat in lt-config.jsonc
1 Basis tekst Alleen liedtekst zonder extra's
2 Tekst + maatnummers Liedtekst met maatnummers in de kantlijn
3 Tekst + akkoorden Liedtekst met akkoorden boven de tekst
4 Tekst + maatnummers + akkoorden Liedtekst met maatnummers en akkoorden
5 Volledig Liedtekst met maatnummers, akkoorden én gitaartabs

Voorbeelden

# Genereer alle varianten voor alle liedjes
python lt-generate.py

# Genereer alle varianten voor één lied
python lt-generate.py "Vader Jacob"

# Genereer alle varianten voor meerdere liedjes
python lt-generate.py "Vader Jacob" "Alle eendjes"

# Genereer alleen variant met akkoorden (variant 3)
python lt-generate.py "Vader Jacob" --only 3

# Genereer alleen geconfigureerde varianten
python lt-generate.py "Vader Jacob" --only -1

# Genereer met rechtse tab-oriëntatie en behoud hulpbestanden
python lt-generate.py "Vader Jacob" --tab-orientation right --no-cleanup

# Genereer zonder structuur PDF en toon debug output
python lt-generate.py "Vader Jacob" --no-structuur --debug

# Genereer alleen liedtekst (variant 1) en maatnummers (variant 2)
python lt-generate.py "Vader Jacob" --only 1
python lt-generate.py "Vader Jacob" --only 2

Transpositie

Als een .tex bestand een \transpositions commando bevat, worden automatisch extra versies gegenereerd:

\newcommand{\transpositions}{2, 3}  % Genereer ook versies +2 en +3 halve tonen

Dit resulteert in:

  • Vader Jacob (1).pdf (origineel in C)
  • Vader Jacob (1) in D transp(+2).pdf (2 halve tonen hoger)
  • Vader Jacob (1) in Es transp(+3).pdf (3 halve tonen hoger)

Gegenereerde Bestanden

Voor elk lied worden de volgende PDF's gegenereerd (afhankelijk van --only waarde):

Liedtekst PDF's → distributie folder

  • <titel> (<id>).pdf - basis liedtekst
  • <titel> (<id>) met maatnummers.pdf
  • <titel> (<id>) met akkoorden.pdf
  • <titel> (<id>) met maatnummers en akkoorden.pdf
  • <titel> (<id>) met maatnummers, akkoorden en gitaargrepen.pdf

Structuur PDF → distributie folder (tenzij --no-structuur)

  • <titel> structuur.pdf - liedstructuur, statistieken en compositie-overzicht

Configuratie Systeem

Per lied kan een lt-config.jsonc bestand worden gemaakt met layout-aanpassingen:

{
  "configurations": [
    {
      "description": "Compacte layout voor Vader Jacob met akkoorden",
      "condition": {
        "songId": 1,
        "showMeasures": true,
        "showChords": true,
        "showTabs": null,  // null = match elke waarde
        "largePrint": false
      },
      "action": {
        "adjustMargins": "1.5cm",
        "adjustFontsize": "10pt"
      }
    }
  ]
}

Vereisten

  • pdflatex (of andere TeX engine) moet geïnstalleerd zijn en in PATH
  • .tex bestanden moeten de volgende commando's bevatten:
    • \newcommand{\liedTitel}{...}
    • \newcommand{\liedId}{...}
    • \newcommand{\sleutel}{...} (voor transpositie)

nwc-convert.py

Converteert NoteWorthy Composer (.nwctxt) bestanden naar FLAC audioformaat via een pipeline van MIDI en WAV. Handig voor het maken van audio demo's.

Syntax

python nwc-convert.py <input> [opties]

Positionele Parameters

Parameter Beschrijving
input Pad naar .nwctxt bestand of bestandsnaam zonder extensie (verplicht). Als geen extensie wordt opgegeven, wordt .nwctxt aangenomen

Optionele Parameters

Parameter Waarden Standaard Beschrijving
--out <pad> audio_output_folder uit paths.jsonc Output directory waar de gegenereerde bestanden worden opgeslagen. Er wordt automatisch een submap met de liedtitel gemaakt
--soundfont <pad> soundfont_path uit paths.jsonc of FluidR3_GM_GS.sf2 Pad naar FluidSynth soundfont (.sf2) bestand voor MIDI synthese

Voorbeelden

# Basis gebruik: converteer bestand uit build folder
python nwc-convert.py "Vader Jacob"

# Converteer met volledig pad
python nwc-convert.py "C:\muziek\Vader Jacob.nwctxt"

# Specificeer output directory
python nwc-convert.py "Vader Jacob" --out "D:\audio"

# Gebruik custom soundfont
python nwc-convert.py "Vader Jacob" --soundfont "C:\soundfonts\piano.sf2"

# Combinatie van opties
python nwc-convert.py "Alle eendjes" --out "D:\demos" --soundfont "C:\sf2\orchestral.sf2"

Conversie Pipeline

Het script voert de volgende stappen uit:

  1. NWCTXT → MIDI (via nwc-conv.exe)

    • Converteert muzieknotatie naar MIDI formaat
  2. MIDI → WAV (via fluidsynth)

    • Synthetiseert MIDI naar ongecomprimeerde audio met soundfont
  3. WAV → FLAC (via ffmpeg)

    • Comprimeert WAV naar lossless FLAC formaat

Gegenereerde Bestanden

Alle bestanden worden opgeslagen in: <output_dir>/<liedtitel>/

  1. <liedtitel>.mid

    • MIDI bestand van het lied
  2. <liedtitel>.wav

    • Ongecomprimeerd audio bestand (groot)
  3. <liedtitel>.flac

    • Lossless gecomprimeerd audio bestand (definitieve output)

Vereisten

Dit script vereist de volgende externe tools (moeten in PATH staan):

  • nwc-conv - NoteWorthy Composer converter (onderdeel van NWC)
  • fluidsynth - MIDI naar audio synthesizer
  • ffmpeg - Audio format converter

Het script verifieert automatisch of deze tools beschikbaar zijn bij het starten.

Soundfonts

Een soundfont (.sf2) is nodig voor MIDI synthese. Populaire opties:

  • FluidR3_GM_GS.sf2 (standaard, algemene MIDI geluiden)
  • Orchestrale soundfonts voor meer realistische instrumenten
  • Piano soundfonts voor solo piano stukken

nwc_analyze.py

Analyseert .nwctxt bestanden en maakt een overzicht van liedteksten gekoppeld aan maatnummers. Dit script wordt meestal intern aangeroepen door nwc-concat.py, maar kan ook standalone gebruikt worden.

Syntax

python nwc_analyze.py <liedtitel-of-pad> [opties]

Positionele Parameters

Parameter Beschrijving
liedtitel-of-pad Liedtitel (zoekt in build folder) of volledig pad naar .nwctxt bestand (verplicht)

Voorbeelden

# Analyseer bestand op basis van titel (zoekt in build folder)
python nwc_analyze.py "Vader Jacob"

# Analyseer bestand met volledig pad
python nwc_analyze.py "C:\muziek\Vader Jacob.nwctxt"

# Voorbeelden met quotes (nodig bij spaties)
python nwc_analyze.py "Boer wat zeg je van mijn kippen"
python nwc_analyze.py "C:\liedjes\Boer wat zeg je van mijn kippen.nwctxt"

Gegenereerd Bestand

<liedtitel> analysis.txt → build folder

Bevat:

  • Metadata (liedtitel, liednummer, totaal aantal maten)
  • Of er een begintel (opmaat) is
  • Aantal maten vooraf (voor "liedstart" marker)
  • Tabel met maatnummer en bijbehorende liedtekstsyllaben

Voorbeeld output:

*** NWC ANALYSE ***

Analyse van: Vader Jacob.nwctxt
Locatie: C:\build

liedtitel: Vader Jacob
liednummer: 1
totaal aantal maten: 16
heeft begintel: nee
aantal maten vooraf: 2

maat	tekst
1	Va-
2	der Ja-
3	cob, Va-
4	der Ja-
...

Maatsoort en Tempo

Als de analyse compleet moet zijn (met tempo en maatsoort), gebruik dan de Python API:

from nwc_analyze import analyze_complete_song

analysis = analyze_complete_song("pad/naar/bestand.nwctxt", tempo=120, timesig="4/4")

Dit retourneert een dictionary met:

  • total_measures: Totaal aantal maten (gecorrigeerd, excl. maten vooraf)
  • total_duration: Duur in seconden (of None)
  • measure_map: Dict van maatnummer → liedtekstsyllaben (hernummerd zodat maat 1 = liedstart)
  • vooraf: Aantal maten voor "liedstart" marker
  • has_begintel: Boolean - of er een opmaat is

Speciale Concepten

Begintel (Pickup Measure)

  • Onvolledige eerste maat (opmaat)
  • Wordt gedetecteerd via StartingBar:0 in NWC bestand
  • Telt niet mee in totaal aantal maten

Maten vooraf

  • Intro-maten voor het eigenlijke lied begint
  • Worden gemarkeerd met "liedstart" text marker in NWC bestand
  • Worden afgetrokken van totaal en uitgesloten van duurberekening
  • Measure map wordt hernummerd zodat "liedstart" = maat 1

Veelvoorkomende Workflows

Nieuw Lied Toevoegen

# 1. Maak het intro-bestand in NoteWorthy Composer GUI
#    Sla op in: <input_folder>/Vader Jacob/nwc/
#    - Vader Jacob intro.nwctxt  (handmatig aanmaken als startpunt)
#    Plus: Vader Jacob volgorde.jsonc (vereist!)

# 1b. Maak de overige sectiebestanden aan als kopie van het intro-bestand
python init-liedsecties.py "Vader Jacob" --sectie-namen vers refrein
#    Dit maakt aan:
#    - Vader Jacob vers.nwctxt
#    - Vader Jacob refrein.nwctxt

# 1c. (Optioneel) Zorg dat alle sectiebestanden dezelfde staffs hebben
python propagate-staffs.py "Vader Jacob"

# 1d. Schrijf de Bass-lijn per lieddeel uit in NoteWorthy Composer GUI
#     (Dit bepaalt het definitieve aantal maten per lieddeel.)

# 1e. (Optioneel) Vul alle overige staffs aan met lege maten zodat ze even
#     lang zijn als de Bass-staff in dat lieddeel
python pad-staffs.py "Vader Jacob"

# 2. Voeg secties samen en genereer structuur
python nwc-concat.py "Vader Jacob"

# 3. Maak audio demo (optioneel)
python nwc-convert.py "Vader Jacob"

# 4. Maak liedtekst .tex bestand
#    Gebruik Vader Jacob analysis.txt uit build folder als referentie

# 5. Genereer alle PDF varianten
python lt-generate.py "Vader Jacob"

Tempo Aanpassen

# 1. Pas tempo aan in NWC bestand (alleen in eerste sectie)
#    Open met NoteWorthy Composer GUI

# 2. Voer scripts opnieuw uit (in deze volgorde!)
python nwc-concat.py "Vader Jacob"
python nwc-convert.py "Vader Jacob"
python lt-generate.py "Vader Jacob"

# Dit update automatisch:
# - Tempo in liedtekst .tex
# - Labeltrack met nieuwe timing
# - Audio demo met nieuwe tempo
# - Structuur PDF met nieuwe duurberekening

Liedtekst Wijzigen

# 1. Update liedtekst in .tex bestand
#    <input_folder>/Vader Jacob/Vader Jacob.tex

# 2. Regenereer PDF's
python lt-generate.py "Vader Jacob"

# Dat is alles! Alle varianten worden automatisch bijgewerkt.

Alleen Geconfigureerde Varianten Genereren

# Tijdens ontwikkeling, genereer alleen varianten met layout configuratie
python lt-generate.py "Vader Jacob" --only -1

# Dit is sneller dan alle 5+ varianten genereren
# Handig bij iteratief testen van layout aanpassingen

Debug LaTeX Compilatie Problemen

# Toon pdflatex output en behoud hulpbestanden
python lt-generate.py "Vader Jacob" --debug --no-cleanup

# Bekijk .log bestand voor details:
# <distributie_folder>/Vader Jacob (1).log

Alleen Structuur PDF Genereren

# 1. Zorg dat structuur.tex bestaat (via nwc-concat.py)
python nwc-concat.py "Vader Jacob"

# 2. Genereer alleen structuur (variant 1 is minimaal vereist voor metadata)
python lt-generate.py "Vader Jacob" --only 1

# Dit genereert beide:
# - Vader Jacob (1).pdf (basis liedtekst)
# - Vader Jacob structuur.pdf (structuur overzicht)

Transpositie Toevoegen

# 1. Voeg transpositie toe aan .tex bestand
#    \newcommand{\transpositions}{2, -3}

# 2. Regenereer (genereert nu 3 versies: 0, +2, -3 halve tonen)
python lt-generate.py "Vader Jacob"

# Output:
# - Vader Jacob (1).pdf (origineel)
# - Vader Jacob (1) in D transp(+2).pdf
# - Vader Jacob (1) in A transp(-3).pdf

Configuratie

Alle paden worden geconfigureerd in paths.jsonc:

{
  "input_folder": "C:/liedjes/teksten",
  "build_folder": "./build",
  "distributie_folder": "./dist",
  "audio_output_folder": "D:/audio",
  "soundfont_path": "C:/soundfonts/FluidR3_GM_GS.sf2"
}

Paden kunnen relatief (ten opzichte van paths.jsonc) of absoluut zijn.

Afhankelijkheden

Python Modules

pip install -r requirements.txt

Externe Tools

  • pdflatex (TeX Live of MiKTeX)
  • nwc-conv (NoteWorthy Composer)
  • fluidsynth (MIDI synthesizer)
  • ffmpeg (audio converter)

Alle externe tools moeten in PATH staan.

Projectstructuur

<input_folder>/
  Vader Jacob/
    Vader Jacob.tex              # Liedtekst met LaTeX markup
    lt-config.jsonc             # Optionele layout configuratie
    nwc/
      Vader Jacob intro.nwctxt
      Vader Jacob vers.nwctxt
      Vader Jacob refrein.nwctxt
      Vader Jacob volgorde.jsonc

<build_folder>/
  Vader Jacob.nwctxt             # Samengevoegd bestand
  Vader Jacob analysis.txt       # Analyse
  Vader Jacob structuur.tex      # LaTeX structuur

<distributie_folder>/
  Vader Jacob (1).pdf
  Vader Jacob (1) met akkoorden.pdf
  ... (meer varianten)
  Vader Jacob structuur.pdf

<audio_output_folder>/
  Vader Jacob/
    Vader Jacob labeltrack t_120.txt
    Vader Jacob.mid
    Vader Jacob.wav
    Vader Jacob.flac

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors