Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.javascript > #34702 > unrolled thread
| Started by | Jonas Thörnvall <jonas.thornvall@gmail.com> |
|---|---|
| First post | 2018-02-05 01:13 -0800 |
| Last post | 2018-02-05 06:09 -0800 |
| Articles | 5 — 1 participant |
Back to article view | Back to comp.lang.javascript
Howto achieve best possible playback timing Jonas Thörnvall <jonas.thornvall@gmail.com> - 2018-02-05 01:13 -0800
Re: Howto achieve best possible playback timing Jonas Thörnvall <jonas.thornvall@gmail.com> - 2018-02-05 02:37 -0800
Re: Howto achieve best possible playback timing Jonas Thörnvall <jonas.thornvall@gmail.com> - 2018-02-05 02:38 -0800
Re: Howto achieve best possible playback timing Jonas Thörnvall <jonas.thornvall@gmail.com> - 2018-02-05 02:54 -0800
Re: Howto achieve best possible playback timing Jonas Thörnvall <jonas.thornvall@gmail.com> - 2018-02-05 06:09 -0800
| From | Jonas Thörnvall <jonas.thornvall@gmail.com> |
|---|---|
| Date | 2018-02-05 01:13 -0800 |
| Subject | Howto achieve best possible playback timing |
| Message-ID | <edcfe79b-323f-485f-ba02-7bd7c50a4938@googlegroups.com> |
I must stop poll and do some more serious playback, but i am not sure how.
function play(){
var lastelement=track[0].midiMess.length;
var x=0;var time=0; var starttime=0; var clock=0;
time=performance.now();
starttime=time;
while(x<lastelement){
var time=performance.now();
clock=time-starttime;
if(track[0].midiMess[x].time<=clock){
var noteOnMessage = [track[0].midiMess[x].data0,track[0].midiMess[x].data1,track[0].midiMess[x].data2];
output.send(noteOnMessage);
x++;
}
}
}
Well this is probably not ideal either, but better? If someone show me away to get the playup of events as accurate as possible i would be thankful.
function diffPlay(){
var lastelement=track[0].midiMess.length;
var x=0;
var waitEv=new Array();
noteOnMessage=new Array();
//INIT FIRST EVENT
waitEv[x]=track[0].midiMess[x].time;
var noteOnMessage[x] = [track[0].midiMess[x].data0,track[0].midiMess[x].data1,
track[0].midiMess[x].data2];
x++;
//LOOP THRU ALL EVENTS CALCULATE TIMEDIFFERENCES
while(x<lastelement){
waitEv[x]=track[0].midiMess[x].time-track[0].midiMess[x-1].time;
x++;
var noteOnMessage[x] [track[0].midiMess[x].data0,track[0].midiMess[x].data1,
track[0].midiMess[x].data2];
}
y=0;
while(y<lastelement){
setTimeout(playEvent,waitEv[y]);
y++;
}
}
function playEvent(){
output.send(noteOnMessage[y]);
}
[toc] | [next] | [standalone]
| From | Jonas Thörnvall <jonas.thornvall@gmail.com> |
|---|---|
| Date | 2018-02-05 02:37 -0800 |
| Message-ID | <2ded6594-2e59-4aed-8a4a-bd4ddf62b41c@googlegroups.com> |
| In reply to | #34702 |
Den måndag 5 februari 2018 kl. 10:14:03 UTC+1 skrev Jonas Thörnvall:
> I must stop poll and do some more serious playback, but i am not sure how.
>
> function play(){
> var lastelement=track[0].midiMess.length;
> var x=0;var time=0; var starttime=0; var clock=0;
> time=performance.now();
> starttime=time;
> while(x<lastelement){
> var time=performance.now();
> clock=time-starttime;
> if(track[0].midiMess[x].time<=clock){
> var noteOnMessage = [track[0].midiMess[x].data0,track[0].midiMess[x].data1,track[0].midiMess[x].data2];
> output.send(noteOnMessage);
> x++;
> }
> }
> }
>
> Well this is probably not ideal either, but better? If someone show me away to get the playup of events as accurate as possible i would be thankful.
>
> function diffPlay(){
> var lastelement=track[0].midiMess.length;
> var x=0;
> var waitEv=new Array();
> noteOnMessage=new Array();
>
> //INIT FIRST EVENT
> waitEv[x]=track[0].midiMess[x].time;
> var noteOnMessage[x] = [track[0].midiMess[x].data0,track[0].midiMess[x].data1,
> track[0].midiMess[x].data2];
> x++;
>
> //LOOP THRU ALL EVENTS CALCULATE TIMEDIFFERENCES
> while(x<lastelement){
> waitEv[x]=track[0].midiMess[x].time-track[0].midiMess[x-1].time;
> x++;
> var noteOnMessage[x] [track[0].midiMess[x].data0,track[0].midiMess[x].data1,
> track[0].midiMess[x].data2];
> }
> y=0;
> while(y<lastelement){
> setTimeout(playEvent,waitEv[y]);
> y++;
> }
> }
>
> function playEvent(){
> output.send(noteOnMessage[y]);
> }
Well i can see the looping around timout is just silly, so i probably should use setInterval but with different timings.
[toc] | [prev] | [next] | [standalone]
| From | Jonas Thörnvall <jonas.thornvall@gmail.com> |
|---|---|
| Date | 2018-02-05 02:38 -0800 |
| Message-ID | <17dc4cef-227a-462a-a06d-0c0a5c2f0cf3@googlegroups.com> |
| In reply to | #34704 |
Den måndag 5 februari 2018 kl. 11:37:16 UTC+1 skrev Jonas Thörnvall:
> Den måndag 5 februari 2018 kl. 10:14:03 UTC+1 skrev Jonas Thörnvall:
> > I must stop poll and do some more serious playback, but i am not sure how.
> >
> > function play(){
> > var lastelement=track[0].midiMess.length;
> > var x=0;var time=0; var starttime=0; var clock=0;
> > time=performance.now();
> > starttime=time;
> > while(x<lastelement){
> > var time=performance.now();
> > clock=time-starttime;
> > if(track[0].midiMess[x].time<=clock){
> > var noteOnMessage = [track[0].midiMess[x].data0,track[0].midiMess[x].data1,track[0].midiMess[x].data2];
> > output.send(noteOnMessage);
> > x++;
> > }
> > }
> > }
> >
> > Well this is probably not ideal either, but better? If someone show me away to get the playup of events as accurate as possible i would be thankful.
> >
> > function diffPlay(){
> > var lastelement=track[0].midiMess.length;
> > var x=0;
> > var waitEv=new Array();
> > noteOnMessage=new Array();
> >
> > //INIT FIRST EVENT
> > waitEv[x]=track[0].midiMess[x].time;
> > var noteOnMessage[x] = [track[0].midiMess[x].data0,track[0].midiMess[x].data1,
> > track[0].midiMess[x].data2];
> > x++;
> >
> > //LOOP THRU ALL EVENTS CALCULATE TIMEDIFFERENCES
> > while(x<lastelement){
> > waitEv[x]=track[0].midiMess[x].time-track[0].midiMess[x-1].time;
> > x++;
> > var noteOnMessage[x] [track[0].midiMess[x].data0,track[0].midiMess[x].data1,
> > track[0].midiMess[x].data2];
> > }
> > y=0;
> > while(y<lastelement){
> > setTimeout(playEvent,waitEv[y]);
> > y++;
> > }
> > }
> >
> > function playEvent(){
> > output.send(noteOnMessage[y]);
> > }
>
> Well i can see the looping around timout is just silly, so i probably should use setInterval but with different timings.
function play(){
lastelement=track[0].midiMess.length;
var x=0;
var waitEv=new Array();
//INIT FIRST EVENT
waitEv[x]=track[0].midiMess[x].time;
x++;
//LOOP THRU ALL EVENTS CALCULATE TIMEDIFFERENCES
while(x<lastelement){
waitEv[x]=track[0].midiMess[x].time-track[0].midiMess[x-1].time;
x++;
}
y=0;
playin=setInterval(playEvent,waitEv[y]);
}
function playEvent(){
noteOnMessage = [track[0].midiMess[y].data0,track[0].midiMess[y].data1,track[0].midiMess[y].data2];
output.send(noteOnMessage);
y++;
if (y==lastelement) clearInterval(playin);
}
[toc] | [prev] | [next] | [standalone]
| From | Jonas Thörnvall <jonas.thornvall@gmail.com> |
|---|---|
| Date | 2018-02-05 02:54 -0800 |
| Message-ID | <47a15f8b-5897-4b04-98c0-23c5dee1275c@googlegroups.com> |
| In reply to | #34705 |
Den måndag 5 februari 2018 kl. 11:38:12 UTC+1 skrev Jonas Thörnvall:
> Den måndag 5 februari 2018 kl. 11:37:16 UTC+1 skrev Jonas Thörnvall:
> > Den måndag 5 februari 2018 kl. 10:14:03 UTC+1 skrev Jonas Thörnvall:
> > > I must stop poll and do some more serious playback, but i am not sure how.
> > >
> > > function play(){
> > > var lastelement=track[0].midiMess.length;
> > > var x=0;var time=0; var starttime=0; var clock=0;
> > > time=performance.now();
> > > starttime=time;
> > > while(x<lastelement){
> > > var time=performance.now();
> > > clock=time-starttime;
> > > if(track[0].midiMess[x].time<=clock){
> > > var noteOnMessage = [track[0].midiMess[x].data0,track[0].midiMess[x].data1,track[0].midiMess[x].data2];
> > > output.send(noteOnMessage);
> > > x++;
> > > }
> > > }
> > > }
> > >
> > > Well this is probably not ideal either, but better? If someone show me away to get the playup of events as accurate as possible i would be thankful.
> > >
> > > function diffPlay(){
> > > var lastelement=track[0].midiMess.length;
> > > var x=0;
> > > var waitEv=new Array();
> > > noteOnMessage=new Array();
> > >
> > > //INIT FIRST EVENT
> > > waitEv[x]=track[0].midiMess[x].time;
> > > var noteOnMessage[x] = [track[0].midiMess[x].data0,track[0].midiMess[x].data1,
> > > track[0].midiMess[x].data2];
> > > x++;
> > >
> > > //LOOP THRU ALL EVENTS CALCULATE TIMEDIFFERENCES
> > > while(x<lastelement){
> > > waitEv[x]=track[0].midiMess[x].time-track[0].midiMess[x-1].time;
> > > x++;
> > > var noteOnMessage[x] [track[0].midiMess[x].data0,track[0].midiMess[x].data1,
> > > track[0].midiMess[x].data2];
> > > }
> > > y=0;
> > > while(y<lastelement){
> > > setTimeout(playEvent,waitEv[y]);
> > > y++;
> > > }
> > > }
> > >
> > > function playEvent(){
> > > output.send(noteOnMessage[y]);
> > > }
> >
> > Well i can see the looping around timout is just silly, so i probably should use setInterval but with different timings.
>
> function play(){
> lastelement=track[0].midiMess.length;
> var x=0;
> var waitEv=new Array();
>
> //INIT FIRST EVENT
> waitEv[x]=track[0].midiMess[x].time;
> x++;
>
> //LOOP THRU ALL EVENTS CALCULATE TIMEDIFFERENCES
> while(x<lastelement){
> waitEv[x]=track[0].midiMess[x].time-track[0].midiMess[x-1].time;
> x++;
> }
> y=0;
> playin=setInterval(playEvent,waitEv[y]);
> }
>
> function playEvent(){
> noteOnMessage = [track[0].midiMess[y].data0,track[0].midiMess[y].data1,track[0].midiMess[y].data2];
> output.send(noteOnMessage);
> y++;
> if (y==lastelement) clearInterval(playin);
> }
Kind of weird that setinterval do not take an array as arguments....
So how do one do?
[toc] | [prev] | [next] | [standalone]
| From | Jonas Thörnvall <jonas.thornvall@gmail.com> |
|---|---|
| Date | 2018-02-05 06:09 -0800 |
| Message-ID | <dff93ef7-40d8-428a-b3e4-80bfd5ab15e1@googlegroups.com> |
| In reply to | #34705 |
Den måndag 5 februari 2018 kl. 11:38:12 UTC+1 skrev Jonas Thörnvall:
> Den måndag 5 februari 2018 kl. 11:37:16 UTC+1 skrev Jonas Thörnvall:
> > Den måndag 5 februari 2018 kl. 10:14:03 UTC+1 skrev Jonas Thörnvall:
> > > I must stop poll and do some more serious playback, but i am not sure how.
> > >
> > > function play(){
> > > var lastelement=track[0].midiMess.length;
> > > var x=0;var time=0; var starttime=0; var clock=0;
> > > time=performance.now();
> > > starttime=time;
> > > while(x<lastelement){
> > > var time=performance.now();
> > > clock=time-starttime;
> > > if(track[0].midiMess[x].time<=clock){
> > > var noteOnMessage = [track[0].midiMess[x].data0,track[0].midiMess[x].data1,track[0].midiMess[x].data2];
> > > output.send(noteOnMessage);
> > > x++;
> > > }
> > > }
> > > }
> > >
> > > Well this is probably not ideal either, but better? If someone show me away to get the playup of events as accurate as possible i would be thankful.
> > >
> > > function diffPlay(){
> > > var lastelement=track[0].midiMess.length;
> > > var x=0;
> > > var waitEv=new Array();
> > > noteOnMessage=new Array();
> > >
> > > //INIT FIRST EVENT
> > > waitEv[x]=track[0].midiMess[x].time;
> > > var noteOnMessage[x] = [track[0].midiMess[x].data0,track[0].midiMess[x].data1,
> > > track[0].midiMess[x].data2];
> > > x++;
> > >
> > > //LOOP THRU ALL EVENTS CALCULATE TIMEDIFFERENCES
> > > while(x<lastelement){
> > > waitEv[x]=track[0].midiMess[x].time-track[0].midiMess[x-1].time;
> > > x++;
> > > var noteOnMessage[x] [track[0].midiMess[x].data0,track[0].midiMess[x].data1,
> > > track[0].midiMess[x].data2];
> > > }
> > > y=0;
> > > while(y<lastelement){
> > > setTimeout(playEvent,waitEv[y]);
> > > y++;
> > > }
> > > }
> > >
> > > function playEvent(){
> > > output.send(noteOnMessage[y]);
> > > }
> >
> > Well i can see the looping around timout is just silly, so i probably should use setInterval but with different timings.
>
> function play(){
> lastelement=track[0].midiMess.length;
> var x=0;
> var waitEv=new Array();
>
> //INIT FIRST EVENT
> waitEv[x]=track[0].midiMess[x].time;
> x++;
>
> //LOOP THRU ALL EVENTS CALCULATE TIMEDIFFERENCES
> while(x<lastelement){
> waitEv[x]=track[0].midiMess[x].time-track[0].midiMess[x-1].time;
> x++;
> }
> y=0;
> playin=setInterval(playEvent,waitEv[y]);
> }
>
> function playEvent(){
> noteOnMessage = [track[0].midiMess[y].data0,track[0].midiMess[y].data1,track[0].midiMess[y].data2];
> output.send(noteOnMessage);
> y++;
> if (y==lastelement) clearInterval(playin);
> }
It seem i should probably use timeout my variable in setInterval only set value one time? waitEv[y] does not care that y arrayslot change during its execution of interval?
playin=setInterval(playEvent,waitEv[y]);
[toc] | [prev] | [standalone]
Back to top | Article view | comp.lang.javascript
csiph-web