// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// π€ STRUDEL AUDIO & MIDI - Was JETZT schon geht!
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// Keine Installation nΓΆtig - direkt in strudel.cc testen!
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// π€ AUDIO INPUT - Microphone!
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// Browser fragt nach Mikrofon-Zugriff
/*
// Einfach Mic durchschleifen
$: sound("in")
// Mit Effekten (Beatbox Style!)
$: sound("in")
.delay(0.3)
.room(0.5)
// Filter mit LFO
$: sound("in")
.lpf(sine.range(200, 2000).slow(4))
.gain(0.8)
// SLICE - wie ein Sampler!
$: sound("in")
.slice(8, "<0 3 2 7 4 1 6 5>")
// Granular-artig
$: sound("in")
.begin(rand)
.end(rand.add(0.1))
.speed("<1 0.5 2 -1>")
*/
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// πΉ MIDI OUTPUT - Zu DAW oder Hardware!
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// Browser muss WebMIDI unterstΓΌtzen (Chrome, Edge)
/*
// Einfache MIDI Noten
$: note("
.midi() // Sendet MIDI!
// Mit Kanal
$: note("
.midi()
.midichan(2) // Kanal 2
// Velocity
$: note("c4:0.5 e4:0.8 g4:1")
.midi()
// CC senden
$: ccv(74, sine.range(0, 127).slow(4)) // CC#74 Filter
.midi()
.midichan(1)
// Verschiedene MIDI Outputs
$: note("
$: note("
*/
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// πΉ MIDI INPUT - Controller zu Strudel!
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
/*
// CC als Parameter nutzen
$: sound("bd sd bd sd")
.lpf(ccin(74).range(200, 5000)) // CC#74 β Filter
// Note Input triggert Samples
$: sound("bd").miditrig()
// Velocity von MIDI
$: note(notein()).s("piano")
*/
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// π EXTERNE AUDIO FILES
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
/*
// Von URL laden
samples({
'mytrack': 'https://example.com/track.mp3'
})
$: s("mytrack")
// Mehrere Samples
samples({
'kit': {
'kick': 'https://url/kick.wav',
'snare': 'https://url/snare.wav',
'hat': 'https://url/hat.wav'
}
})
$: s("kick snare hat hat")
// Von Freesound
samples({
'bell': {
'c4': 'https://cdn.freesound.org/previews/411/411089_5121236-lq.mp3'
}
})
$: s("bell").note("
*/
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// π AUDIO ANALYSIS (fΓΌr Hydra)
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
/*
// In Hydra mit Strudel
await initHydra({ detectAudio: true })
// FFT Arrays:
// a.fft[0] = Bass (0-255)
// a.fft[1] = Low-Mid
// a.fft[2] = High-Mid
// a.fft[3] = Highs
osc(10)
.color(() => a.fft[0] / 255, 0.5, () => a.fft[2] / 255)
.out()
$: sound("bd bd bd bd")
*/
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// ποΈ OSC (Open Sound Control)
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
/*
// OSC Output (braucht Strudel lokal mit osc flag)
$: note("
.osc() // Sendet OSC!
// Zu spezifischem Target
$: note("
.osc("127.0.0.1:57120") // SuperCollider default
*/
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// π QUICK REFERENCE
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
/*
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β AUDIO INPUT β
β sound("in") Microphone Input β
β sound("in").slice(8, pattern) Slice wie Sampler β
β β
β MIDI OUTPUT β
β .midi() MIDI Output aktivieren β
β .midichan(n) MIDI Kanal setzen β
β .midi("Device Name") Spezifisches Device β
β β
β MIDI INPUT β
β ccin(74) CC Input als Control β
β notein() Note Input β
β .miditrig() MIDI triggert Pattern β
β β
β SAMPLES β
β samples({ name: { note: 'url' }}) Samples von URL laden β
β β
β OSC β
β .osc() OSC Output (lokal) β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
WICHTIG:
β’ Audio In braucht Browser-Erlaubnis
β’ MIDI braucht WebMIDI (Chrome/Edge)
β’ OSC braucht lokale Strudel Installation
β’ Samples von HTTPS URLs (CORS!)
*/
// π€πΉπ Strudel kann schon VIEL! π²