autosamplerT een autosampler project in python

flyweight

SinOsc.kr([1, 3]).exprange(100, 2e3)
Lid sinds
10 november 2010
Berichten
14.086
Locatie
outerspace

Hier de inititial commit voor autosamplerT.
Het idee is een autosampler waarmee je via midi synths kan samplen om multisamples te maken in SFZ.
Uiteindelijk wellicht ook support voor de waldorf quantum/iridium. ( anyhow sfz kun je naar waldorf quantum converteren met de converteren van mos)
Cross platform Linux, Mac en Windows.
Niet echt user friendly want het is CLI. wellicht komt er ooit een gui.
Je kan alles via de commandline opzetten of een script yaml file gebruiken.

Is nog in de test fase.
Gemaakt in Visual Studio Code met hulp van Copilot.
En zou nog een hoop aan moeten gebeuren.
Note en loop data word in de wav riff header geschreven.
Je kan ook velocity and roundrobin layers maken en dan per layer verschillende midi messages sturen (cc, sysex, programchanges).
Denk aan een multisample en iedere rounrobin een andere pulse width. bv.

Wat ik later nog wil toevoegen is een extra stereo aux bus ( 2 inputs ) waar je dan een effect op aan kan sluiten en dan dat als een layer kunt gebruiken.
Denk aan een synth ampen in een kamer met 2 mics en dan per velocity layer dan meer room sound.
Het aux signaal word dan bij het directe synth geluid gemixt,
Ook een optie om instrument te samplen. Dus semi automatisch.
Maar dat ga ik er pas doen als alles getest is en werkt.
 
Er staat "License: MIT" maar zit een GPL-3.0 LICENSE file bij.

Is dit door een LLM bedacht oid?
 
MIT license verwijdert en alleen nog gpl 3.
Alle main features werken.
Dus het maken van een multi met velocity en/of roundrobin layers.
postprocessing is nu ook geimplementeerd en autolooping lijkt te werken maar moet nog meer worden getest.
Na meer testen word het daarna tijd om de scripting features uit te breiden.

Je kan dan scripten welke cc, sysex of programchanges worden verstuurd en een midi kanaal kiezen.
Zodra dat werk wil ik werken aan een aux bus die je kunt dan ook in het script kan proggen.
Het idee is dat je daar creatief mee kan samplen.
Denk aan bv een extra paar outputs die naar 2 amps in een mooie kamer gaan.
Die neem je dan weer op met mics maar de sterkte van het signaal naar de amps kun je proggen via velocity, of note hoogte,
Of bv een andere situatie met 3 amps in 3 verschillende kamers waarbij elke roundrobin naar een ander amp gaat.
Dan kun je bv ook per round-robbin control messages sturen.
Hier wil ik nog verder over na gaan denken hoe dit gaat werken maar waarschijnlijk zou er audio moeten worden gemixt zodat het aux signaal en het directe signaal samen komen.

-loop sampling ( in een context van BPM zodat je sets loops kan maken )
-drum sampling ( Drumkits maken met optioneel roundrobin en velocity )
-supervised sampling ( voor het samplen van instrumenten, drum kits, moeders )
 
Ok vandaag heb ik de asio driver geïmplementeerd en controller 45 nrpn ( filter freq) naar de prophet 6 verstuurd. Elke roundrobin layer een andere waarde.
En dat via de asio driver gesampled.

Dit is allemaal geimplemteerd en moet getest worden.
- nrpn
-sysex
-cc 14
-cc 7
-program change

Nu nog veel testen en daarna op de autolooping focussen.
Zodra alles werkt ga ik naar andere sampler formaten kijken naast sfz dus

- waldorf quantum
- ableton
 
autolooping word steeds beter.
Nu voor het eerst een loop zonder click!


1763048725705.png
 
ok met de scripting engine net 20 patches gesampled op de Prophet 6.
na iedere patch stuurt autosamplerT een program change en sampled de volgende patch.
Patch name kun je ook automatisch laten doen of zelf in de script yaml opzetten.
En alle samples werden daarna allemaal keurig autolooped.


Ben nu bezig met de interactive sampling modus.
  1. Hardware samplers with limited MIDI range (Casio SK1)
  2. Acoustic instruments needing per-note tuning (percussion, exotic instruments)
  3. Vocals requiring performer preparation between notes
  4. Any scenario where human intervention is needed mid-sampling
Stel je voor je hebt een Casio SK1 met 32 toetsen, maar je wilt daar 96 noten mee opnemen.
Ok dan laten we autosamplerT na 32 notes stoppen en kun je een andere noot samplen op de SK1 en verder gaan.
Of je laat heb iedere note stoppen en na 10 seconden doorgaan om bv iedere lid van de Jostie band noot voor noot te samplen.
Of je neemt een glas water op en kun je iedere pause de hoeveelheid water aanpassen voor de juiste noot...
 
Op de todo list
-chord mode

Zodat je bv 16 of 32 ( welke hoeveelheid dan ook )akkoorden kan samplen in een enkele audio file of juist in losse files.
Die enkele file is handig voor samplers met slicing funtie zodat iedere slice een akkoord is.

Naast akkoorden van een enkele synth kun je ook doen via meerdere synths via of verschillende midi outputs of midi kanalen.

- random controller data. Zodat je bv kan zeggen stuur met iedere cc controller 10 een random waarde tussen de 100 - 127
- aftertouch
 
AutosamplerT is volledig functioneel, getest onder Windows en Linux.
Nu moet er nog wel een hoop gebeuren voor een eerste release.
BV de CLI --help is een zooi en moet worden ge-update en test.
Hieronder de roadmap of alles wat ik nog wil doen.
De eerste alpha release zou dan alles inclusief groep 1, 2 en 5 zijn.


Screenshot From 2025-11-16 10-55-15.png


Markdown (GitHub flavored):
---

### **Group 1: Core MIDI & Key Configuration**
*(Foundational features for defining what and how to sample.)*

#### **1. Key Range Selection**
- **User-Defined:**
  - Set via MIDI input (two keys pressed simultaneously or sequentially) or CLI/interactive mode.
  - CLI option: `--key-range START END --key-interval INT`.

#### **2. MIDI Messages (Including Aftertouch & Randomization)**
- **User-Defined:**
  - Randomize CC/Aftertouch values, including range (e.g., ±5 from base value) and mode (per note, round-robin, or global).
  - Define if the base value is fixed or randomized.

#### **3. Key Range Limitation for MIDI Messages**
- **User-Defined:**
  - Override the global key range for specific MIDI messages (e.g., CC#64, CC#65). Allows to define the keyrange for sending the midi messages. Imagine some pitch randomisation that you do not want in the lower octaves...

---

### **Group 2: Sampling Modes**
*(Define how to sample: chords, drums, or single notes.)*

#### **4. Chord Sampling Mode**
- **User-Defined:**
  - Select chord types (e.g., maj7, min9, dom7), number of slices (16–32), and output file.
  - Optional some templats with chords in key

#### **5. Drum Sampling Mode**
- **User-Defined:**
  - Use the General MIDI drum map or a custom mapping.
  - Define velocity layers per drum sound.
  - would also support interactive sampling, count in etc. ( handy for sampling real percussive instruments )

#### **6. Velocity Crossfades**
- **User-Defined:**
  - Set velocity ranges and crossfade curves (linear or exponential).

---

### **Group 3: User Assistance & Sync**
*(Help the user sync and monitor the sampling process.)*

#### **7. Monitor Output for Assistance**
- **User-Defined:**
  - Play a reference tone (the exact note to be sampled or a fixed tone) and configure count-in (e.g., 2 bars).

#### **8. Tempo (BPM) Awareness**
- **User-Defined:**
  - Set BPM manually or auto-detect from MIDI clock.
  - Configure count-in for synchronization.

---

### **Group 4: Advanced Routing & Post-Processing**
*(Route and process audio after sampling, keeping the original audio intact.)*

#### **9. Aux Bus**
- **User-Defined:**
  - Control output/input levels and binding (e.g., velocity, CC).
  - Define post-processing options like phase alignment and filtering.

---

### **Group 5: CLI & Configuration**
*(Define how users interact with the tool, including testing and documentation.)*

#### **10. CLI Help & Key Range Argument**
- **User-Defined:**
  - Provide clear CLI options for all features, with structured `--help` documentation.
  - Example CLI usage:
    ```bash
    --key-range 30 67 --key-interval 1
    --chord-mode --chord-types maj7,min9 --slices 16
    --drum-mode --drum-map gm --layers 3
    --monitor --play-reference note --count-in 2
    --aux-bus bus_a --output-level 0.7 --bind velocity
    ```

#### **11. Testing of the CLI `--help` System**
- **Requirements:**
  - Ensure `--help` displays **all available commands** and their descriptions clearly.
  - Test that `--help` works for **subcommands** (if applicable).
  - Verify that **default values** are shown in the help text.
  - Confirm that **required arguments** are marked as such.

#### **12. Extensive Testing of CLI Arguments**
- **Requirements:**
  - Test **all CLI arguments** for correct parsing (e.g., `--key-range 30 67`).
  - Validate that **invalid inputs** (e.g., `--key-range 67 30`) are rejected with a clear error message.
  - Ensure **optional arguments** (e.g., `--key-interval`) default to expected values if not provided.
  - Test **argument combinations** (e.g., `--chord-mode --slices 16`) to ensure they work together.
  - Verify that **conflicting arguments** (e.g., `--chord-mode` and `--drum-mode` simultaneously) are handled gracefully.
  - test the audio devices in the conf/autosamplerT_config.yaml excist and can be accessed (so test this) . If not run the audio setup --setup audio
  - test if the midi i/o devices from the conf exist, so test this. if not run the --setup midi

---

### **Group 6: Documentation**
*(Ensure users can understand and use the tool effectively.)*

#### **13. Update Documentation**
- **Requirements:**
  - **CLI Reference:** Document all CLI arguments, their purpose, and examples.
  - **YAML Configuration:** Provide a template and explain each field.
  - **Use Cases:** Include examples for common workflows (e.g., sampling chords, drums, or using the aux bus).
  - **Troubleshooting:** Add a section for common issues (e.g., MIDI device not detected, invalid key ranges).
  - **FAQ:** Address frequently asked questions (e.g., "How do I randomize CC values?").

---

### **Suggested Implementation Order**
1. **Group 1: Core MIDI & Key Configuration**
   *(Essential for defining the sampling range and MIDI behavior.)*
2. **Group 5: CLI & Configuration**
   *(Users need a way to input their settings, and CLI must be tested thoroughly.)*
3. **Group 2: Sampling Modes**
   *(Define what to sample: chords, drums, or notes.)*
4. **Group 3: User Assistance & Sync**
   *(Help users sample accurately with feedback and synchronization.)*
5. **Group 4: Advanced Routing & Post-Processing**
   *(Optional but powerful for advanced users.)*
6. **Group 6: Documentation**
   *(Finalize user-facing documentation and examples.)*

---
### **Next Steps**
- **Implement CLI parsing** (e.g., using `argparse` in Python).
- **Write unit tests** for CLI argument parsing and `--help` functionality.
- **Draft documentation** for CLI, YAML, and use cases.
 
Heb weer wat met copilot aan autosamplerT gewerkt.

* Naast SFZ zijn, Waldorf sample map en qpat exports zijn nu volledig werkend.

* Je kan nu met --script-folder een hele folder met yamls laten samplen.
Dan kun je dus lekker buiten gaan spelen to alles klaar is.
Zo heb ik als test 100 patches met 6 roundrobin layers van de Prophet 6 gesampled.
Dat duurde 24 uur. Die werden allemaal netjes "geautolooped" en de loops klinken super smooth.
Meestal hoor je gewoon geen loop.

* Dit is het begin scherm.
Hier kun je de input levels, input kanalen en de pitch checken.

Pitch checken is handig als je bv een mono synth wil samplen zodat je hem goed kan tunen.

Die level en pitch zal later ook de "assisted sampling modus" van pas komen.
BV als je een drumkit de velocity sampled of bv een Cello zodat je de tuning goed kan zien.

1769007349066.png


* ben nu aan een waldorf wavetable modus bezig waar je parameters van cc7, cc14 of NRPN's kan leren, min/max kan instellen en dan automatisch laten sweepen.
Midi learn, min/max en sweepen werk al maar de audio driver logic heeft nog wat werk nodig. die locked nu.
Als dit goed werk ga support voor meerdere parameters tegelijk toevoegen.
Bv een sweep van de waveshape en tegelijk de distortion en de resonance...
Min/max zou dan ook achtersevoren moeten werken.
Dus van hoog naar laag en van laag naar hoog.

Sweeps maken in je DAW lijkt me niet heel moeilijk maar stel je sampled 100 multi samples dan is het toch wel chill als de tool voor je de sweeps ook alvast maakt.

* helaas dat Ableton Sampler sind v10 geen 3rd party sample formats als EXS ed support.
Ik zou graag Ableton sampler support willen.
Omdat Sampler nu einderlijk na vele jaren roundrobin ondersteund.

Anyhow kun je allerlij formaten converteren met The Site Of Jürgen Moßgraber - Software - ConvertWithMoss: Multi-sample Converter .
 
Laatst gewijzigd:
Back
Top