parent
1bea44d890
commit
afe017cba8
1 changed files with 69 additions and 35 deletions
|
@ -1,32 +1,58 @@
|
||||||
|
<!--
|
||||||
|
modified version of SArpnt's player (see /golf3.html)
|
||||||
|
compatible with QR alphanumeric mode or with ZZM files
|
||||||
|
|
||||||
|
reference
|
||||||
|
A: Audio context
|
||||||
|
C: Command Character
|
||||||
|
D: character after C, or other Data
|
||||||
|
F: main Function, also object that holds samples
|
||||||
|
G: Gain node
|
||||||
|
H: textarea Html element
|
||||||
|
I: Index into M
|
||||||
|
J: lookahead (for sharps and flats)
|
||||||
|
L: note Length
|
||||||
|
M: Music text
|
||||||
|
N: semitone Note offset (for octave changes)
|
||||||
|
O: Oscillator node
|
||||||
|
P: current time step
|
||||||
|
Q: numeric command id
|
||||||
|
S: find Sample
|
||||||
|
T: note Time
|
||||||
|
U: bpm
|
||||||
|
W: realtime When the song starts
|
||||||
|
-->
|
||||||
|
|
||||||
|
|
||||||
|
<!-- snip -->
|
||||||
<META NAME=VIEWPORT CONTENT=initial-scale=1>
|
<META NAME=VIEWPORT CONTENT=initial-scale=1>
|
||||||
<CENTER>
|
<CENTER>
|
||||||
<P><A HREF=http://nycki.net/qrplay>qrplay v3e</A><br>by nycki and SArpnt</P>
|
<P><A HREF=http://nycki.net/qrplay>qrplay v3e</A><br>by nycki and SArpnt</P>
|
||||||
<TEXTAREA ID=H STYLE=WIDTH:MIN(40EM,99%);HEIGHT:9LH>; @title nupa's theme
|
<TEXTAREA ID=H STYLE=WIDTH:MIN(40EM,99%);HEIGHT:9LH>: $TITLE WiL Best :: Atrocity
|
||||||
; @authors nycki bsp
|
: $SONG TITLE 1 The Forest Chase
|
||||||
; single channel version
|
s-a+ebaeagea+c-bgae+c-g
|
||||||
1[@0000]
|
s-da+degf#dagedf#dcef#
|
||||||
|
s-a+ebaeagea+c-bgae+c-g
|
||||||
2[
|
s-da+degf#dagedf#dega
|
||||||
0[c-c+]1 1
|
s--g+g+bagdbf#bgdf#gab+c
|
||||||
0[e-c+]1 0[g-c+]1
|
scg+ce-g+e-g+cd-g+cc-g+cd-g
|
||||||
0[c-b!+]1 1
|
s-f+cf+c-afcfgcfacefe
|
||||||
0[e-b!+]1 0[g-b!+]1
|
s-eb+efg#ab+cd#efg#ab+fe
|
||||||
0[d-a+]1 0[c-a+]1
|
; $SONG ENDS
|
||||||
]
|
s-a+ebaeagea+c-bgae+c-g
|
||||||
|
s-da+degf#dagedf#dcef#
|
||||||
2
|
s-a+ebaeagea+c-bgae+c-g
|
||||||
0[d-a+]1 0[c-a+]1
|
s-da+degf#dagedf#dega
|
||||||
0[d#-a!+]1 0[d-a!+]1
|
s--g+g+bagdbf#bgdf#gab+c
|
||||||
1 1
|
scg+ce-g+e-g+cd-g+cc-g+cd-g
|
||||||
|
s-f+cf+c-afcfgcfacefe
|
||||||
2
|
s-eb+efg#ab+cd#efg#ab+fe
|
||||||
0[d#-a!+]1 0[d-g+]1
|
|
||||||
0[c--c++]1 1
|
|
||||||
1 1
|
|
||||||
</TEXTAREA><P>
|
</TEXTAREA><P>
|
||||||
<BUTTON onclick="
|
<BUTTON onclick="
|
||||||
|
H.A?.close();
|
||||||
H.A=A=new AudioContext;
|
H.A=A=new AudioContext;
|
||||||
W=Date.now();
|
W=Date.now();
|
||||||
|
U=137;
|
||||||
F=(
|
F=(
|
||||||
M='',
|
M='',
|
||||||
T=0,
|
T=0,
|
||||||
|
@ -35,15 +61,21 @@ F=(
|
||||||
I=0,
|
I=0,
|
||||||
K=0,
|
K=0,
|
||||||
S=D=>D?S(D+(M[++I]==C)-(M[I]=='/')):I
|
S=D=>D?S(D+(M[++I]==C)-(M[I]=='/')):I
|
||||||
)=>{console.log(T);for(;
|
)=>{for(;
|
||||||
C=M[I++];
|
C=M[I++];
|
||||||
D=M[I],
|
D=M[I],
|
||||||
J=E=>E.indexOf(D)>=0,
|
J=E=>E.indexOf(D)>=0,
|
||||||
|
P=L/U*15/8,
|
||||||
// start of comment
|
// start of comment
|
||||||
Q>21?K=1:
|
Q>24?K=1:
|
||||||
Q>20?(L=N=4,K=0):
|
// reset
|
||||||
|
Q>23?(L=N=4,K=0):
|
||||||
|
// backspace
|
||||||
|
Q>22?T-=P:
|
||||||
// check comment mode
|
// check comment mode
|
||||||
K?0:
|
K?0:
|
||||||
|
// change octave
|
||||||
|
Q>20?N-=C+12:
|
||||||
Q>7?
|
Q>7?
|
||||||
// DECREMENT Q, and then...
|
// DECREMENT Q, and then...
|
||||||
(Q-=9)?
|
(Q-=9)?
|
||||||
|
@ -75,17 +107,19 @@ F=(
|
||||||
Q&&O.connect(G),
|
Q&&O.connect(G),
|
||||||
G.connect(A.destination),
|
G.connect(A.destination),
|
||||||
O.start(T),
|
O.start(T),
|
||||||
O.stop(T+=L/U*15/8)
|
O.stop(T+=P)
|
||||||
):
|
):
|
||||||
// any unused letter or number
|
// any unused non-whitespace letter or number
|
||||||
C>'/'?((M,T,L,N)=>(
|
C>'@'||1+C>1?(E=>setTimeout(
|
||||||
console.log(M),
|
// play a sample async
|
||||||
setTimeout(_=>F(M,T,L,N))
|
_=>F(...E),
|
||||||
))(F[C],T,L,N):
|
// don't async too far ahead or you'll lag us out
|
||||||
// change octave, or noop
|
1e3*E[1]-Date.now()+W-5e3,
|
||||||
+C&&(N-=C+12|0)
|
))([F[C],T+=P,L,N]):
|
||||||
)Q='XCDEFGABR$JTSIQHWVU3.\n;:'.indexOf(C)},
|
// do nothing
|
||||||
F('\nU137V40'+H.value.toUpperCase())
|
0
|
||||||
|
)Q='XCDEFGABR$JTSIQHWVU3.-+P\n;/'.indexOf(C)},
|
||||||
|
F('RV35'+H.value.toUpperCase())
|
||||||
">#play</BUTTON> <BUTTON onclick=H.A.close()>#stop
|
">#play</BUTTON> <BUTTON onclick=H.A.close()>#stop
|
||||||
|
|
||||||
<!-- snip -->
|
<!-- snip -->
|
||||||
|
|
Loading…
Add table
Reference in a new issue