// ═══════════════════════════════════════════════════════════════════════════
// 🎀 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("").midi("IAC Driver Bus 1") // Mac
$: note("").midi("loopMIDI Port") // Windows
*/

// ─────────────────────────────────────────────────────────────────────────────
// 🎹 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! 🌲