sanzo
Legacy Member
Lange tittel 
Ik zit vast met iets en hopelijk heeft iemand hier suggesties over hoe ik dit beter zou kunnen aanpakken. Momenteel ben ik aan een sequencer aan het werken voor de ipad. Om het simpel te houden komt alle geluid nu van een zelfgemaakte 'synth' (niet veel meer dan een sinusfunctie).
De gebruiker vult allemaal noten in die hij wilt laten afspelen door de sequencer. De iOS API om geluid af te spelen vraagt herhaaldelijk naar x aantal samples om af te spelen.
Mijn model is in grote lijnen: een Song die meerdere Tracks heeft, waarvan elk meerdere Patterns kan hebben (soort lange maten) en elke Pattern heeft meerdere Noten.
Elke noot heeft een starttime. Ik werk met 44100 samples p/s dus als de starttime van een noot 88200 is bijvoorbeeld weet ik het moet afspelen vanaf de tweede seconde. Ik hou ook bij hoeveel samples ik al naar de buffer gestuurd heb in totaal zodat ik dus kan weten op elk moment waar ik moet hervatten als er nieuwe samples worden gevraagd.
Ik ben dit in C++ aan het doen en hou de noten binnen een Pattern in vectoren. Mijn probleem: stel dat een nummer 10 minuten lang is, en ik heb 4 tracks (gitaar, bass, synth, drum). Dat zijn in totaal een hele boel noten. Als ik ze elke keer allemaal moet afgaan om te zien welk om tijdstip x beginnen krijg ik de buffer volgens mij nooit op tijd gevuld. Daarbij moet ik dan ook nog eens de samples zelf berekenen aan de hand van de noten. Gedoemd om te falen.
Heeft er iemand suggesties hoe ik dit efficient zou kunnen aanpakken?

Ik zit vast met iets en hopelijk heeft iemand hier suggesties over hoe ik dit beter zou kunnen aanpakken. Momenteel ben ik aan een sequencer aan het werken voor de ipad. Om het simpel te houden komt alle geluid nu van een zelfgemaakte 'synth' (niet veel meer dan een sinusfunctie).
De gebruiker vult allemaal noten in die hij wilt laten afspelen door de sequencer. De iOS API om geluid af te spelen vraagt herhaaldelijk naar x aantal samples om af te spelen.
Mijn model is in grote lijnen: een Song die meerdere Tracks heeft, waarvan elk meerdere Patterns kan hebben (soort lange maten) en elke Pattern heeft meerdere Noten.
Elke noot heeft een starttime. Ik werk met 44100 samples p/s dus als de starttime van een noot 88200 is bijvoorbeeld weet ik het moet afspelen vanaf de tweede seconde. Ik hou ook bij hoeveel samples ik al naar de buffer gestuurd heb in totaal zodat ik dus kan weten op elk moment waar ik moet hervatten als er nieuwe samples worden gevraagd.
Ik ben dit in C++ aan het doen en hou de noten binnen een Pattern in vectoren. Mijn probleem: stel dat een nummer 10 minuten lang is, en ik heb 4 tracks (gitaar, bass, synth, drum). Dat zijn in totaal een hele boel noten. Als ik ze elke keer allemaal moet afgaan om te zien welk om tijdstip x beginnen krijg ik de buffer volgens mij nooit op tijd gevuld. Daarbij moet ik dan ook nog eens de samples zelf berekenen aan de hand van de noten. Gedoemd om te falen.
Heeft er iemand suggesties hoe ik dit efficient zou kunnen aanpakken?

et.
tijd in plaats van n in het geval van een vector.
Anders hebt ge gelijk ja.