Soniq

Stem engine

Rozdělení nahrávky do stop

Cíl: Uživatel vloží nahrávku a dostane rozdělený mix do několika stop - bicí, basa, zpěv, ostatní. Tato funkce slouží pro trénování s nahrávkami - jak pro vymazání vlastních partů, tak pro analýzu.

Problémy

Tady není ještě úplně jasné jak k cíli dojít - lze použít externí API (LALA.AI, Moises), open source model na vlastním serveru (UVR5), nebo programovat vlastní. Další oříšek bude přehrávání v browseru.

Po rozdělení bude uživatel vidět jednotlivé stopy, se kterými bude moct dál pracovat - fadery, základní EQ presety, mute/solo. Bude potřeba vyřešit:

Synchronizace stop

Nebude možné použít audio elementy, kvůli synchronizaci.

nejde.html
<audio controls src="song.mp3"></audio>
  1. Synchronizace: Každý <audio> přehrává nezávisle. Čtyři stopy se nemusí spustit přesně současně.
  2. Drift: Stopy se mohou časově rozcházet.
  3. Seeking: Při přeskočení na jinou část skladby se každá stopa načítá zvlášť.
  4. Buffering: Když jedna stopa čeká na data, ostatní mohou pokračovat.
  5. Přesnost: HTML Audio neposkytuje sample-accurate plánování přehrávání.

Řešení: Šlo by řešit přes AudioContext a AudioBufferSourceNode, ale jedná se stále o kompromis.

Zátěž pro RAM

AudioBufferSourceNode vyžaduje dekódované audio v RAM. Pouze 4 stereo stopy po 6 minutách při 48 kHz / 32bit float zaberou přibližně 0.5 GB RAM. (problém na mobilu a hlavně na starších tabletech)

Řešení: Udělat streamování (Extrémně složitý problém), nebo ošetřit, aby nedošlo ke 'zmrazení'. Na druhou stranu funkce multitracku se nebude používat při živém hraní, takže nároky 100% spolehlivost jsou nižší.

Ostatní

Určitě je spousta dalších věcí, které se po cestě najdou - toto téma jsem nezkoumal příliš do podrobna.

On this page