annotate Plugins/Input/console/Nes_Vrc6.cpp @ 334:0daaddb10914 trunk

[svn] Implement GYM playback.
author chainsaw
date Sun, 25 Dec 2005 13:31:46 -0800
parents 84aabc053b6e
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
90
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
1
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
2 // Nes_Snd_Emu 0.1.6. http://www.slack.net/~ant/libs/
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
3
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
4 #include "Nes_Vrc6.h"
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
5
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
6 #include "Tagged_Data.h"
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
7
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
8 /* Copyright (C) 2003-2005 Shay Green. This module is free software; you
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
9 can redistribute it and/or modify it under the terms of the GNU Lesser
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
10 General Public License as published by the Free Software Foundation; either
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
11 version 2.1 of the License, or (at your option) any later version. This
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
12 module is distributed in the hope that it will be useful, but WITHOUT ANY
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
14 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
15 more details. You should have received a copy of the GNU Lesser General
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
16 Public License along with this module; if not, write to the Free Software
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
18
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
19 #include BLARGG_SOURCE_BEGIN
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
20
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
21 Nes_Vrc6::Nes_Vrc6()
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
22 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
23 output( NULL );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
24 volume( 1.0 );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
25 reset();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
26 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
27
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
28 void Nes_Vrc6::reset()
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
29 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
30 last_time = 0;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
31 for ( int i = 0; i < osc_count; i++ ) {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
32 Vrc6_Osc& osc = oscs [i];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
33 for ( int j = 0; j < reg_count; j++ )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
34 osc.regs [j] = 0;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
35 osc.delay = 0;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
36 osc.last_amp = 0;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
37 osc.phase = 1;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
38 osc.amp = 0;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
39 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
40 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
41
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
42 Nes_Vrc6::~Nes_Vrc6() {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
43 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
44
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
45 void Nes_Vrc6::volume( double v )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
46 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
47 v *= 0.0967 * 2;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
48 saw_synth.volume( v );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
49 square_synth.volume( v * 0.5 );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
50 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
51
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
52 void Nes_Vrc6::treble_eq( const blip_eq_t& eq )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
53 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
54 saw_synth.treble_eq( eq );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
55 square_synth.treble_eq( eq );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
56 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
57
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
58 void Nes_Vrc6::output( Blip_Buffer* buf )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
59 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
60 for ( int i = 0; i < osc_count; i++ )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
61 osc_output( i, buf );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
62 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
63
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
64 void Nes_Vrc6::run_until( nes_time_t time )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
65 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
66 run_square( oscs [0], time );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
67 run_square( oscs [1], time );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
68 run_saw( time );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
69 last_time = time;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
70 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
71
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
72 void Nes_Vrc6::write_osc( nes_time_t time, int osc_index, int reg, int data )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
73 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
74 require( (unsigned) osc_index < osc_count );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
75 require( (unsigned) reg < reg_count );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
76
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
77 run_until( time );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
78 oscs [osc_index].regs [reg] = data;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
79
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
80 // to do: remove? this messed up volume envelope in Akumajou Densetsu track 22
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
81 //if ( osc_index == 2 && reg == 2 )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
82 // oscs [2].amp = 0;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
83 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
84
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
85 void Nes_Vrc6::end_frame( nes_time_t time )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
86 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
87 run_until( time );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
88 last_time -= time;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
89 assert( last_time >= 0 );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
90 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
91
256
84aabc053b6e [svn] C++ warning fixes by external contractor Stephen Bennett.
chainsaw
parents: 90
diff changeset
92 #define chars_to_long(s) ( (long)(s[0] << 24) | (long)(s[1] << 16) | \
84aabc053b6e [svn] C++ warning fixes by external contractor Stephen Bennett.
chainsaw
parents: 90
diff changeset
93 (long)(s[2] << 8) | (long)(s[3]) )
84aabc053b6e [svn] C++ warning fixes by external contractor Stephen Bennett.
chainsaw
parents: 90
diff changeset
94
90
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
95 void Nes_Vrc6::reflect_state( Tagged_Data& data )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
96 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
97 for ( int i = 0; i < osc_count; i++ )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
98 {
256
84aabc053b6e [svn] C++ warning fixes by external contractor Stephen Bennett.
chainsaw
parents: 90
diff changeset
99 Tagged_Data odata( data, chars_to_long("cCH0") + i );
90
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
100 Vrc6_Osc& osc = oscs [i];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
101 for ( int r = 0; r < reg_count; r++ )
256
84aabc053b6e [svn] C++ warning fixes by external contractor Stephen Bennett.
chainsaw
parents: 90
diff changeset
102 reflect_int16( odata, chars_to_long("REG0") + r, &osc.regs [r] );
84aabc053b6e [svn] C++ warning fixes by external contractor Stephen Bennett.
chainsaw
parents: 90
diff changeset
103 reflect_int16( odata, chars_to_long("DELY"), &osc.delay );
84aabc053b6e [svn] C++ warning fixes by external contractor Stephen Bennett.
chainsaw
parents: 90
diff changeset
104 reflect_int16( odata, chars_to_long("PHAS"), &osc.phase );
90
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
105 if ( i == 2 )
256
84aabc053b6e [svn] C++ warning fixes by external contractor Stephen Bennett.
chainsaw
parents: 90
diff changeset
106 reflect_int16( odata, chars_to_long("AMPL"), &osc.amp );
90
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
107 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
108 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
109
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
110 #include BLARGG_ENABLE_OPTIMIZER
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
111
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
112 void Nes_Vrc6::run_square( Vrc6_Osc& osc, nes_time_t end_time )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
113 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
114 Blip_Buffer* output = osc.output;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
115 if ( !output )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
116 return;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
117
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
118 int volume = osc.regs [0] & 15;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
119 if ( !(osc.regs [2] & 0x80) )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
120 volume = 0;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
121
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
122 int gate = osc.regs [0] & 0x80;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
123 int duty = ((osc.regs [0] >> 4) & 7) + 1;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
124 int delta = ((gate || osc.phase < duty) ? volume : 0) - osc.last_amp;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
125 nes_time_t time = last_time;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
126 if ( delta ) {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
127 osc.last_amp += delta;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
128 square_synth.offset( time, delta, output );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
129 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
130
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
131 time += osc.delay;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
132 osc.delay = 0;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
133 int period = osc.period();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
134 if ( volume && !gate && period > 4 )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
135 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
136 if ( time < end_time )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
137 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
138 int phase = osc.phase;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
139
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
140 do {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
141 phase++;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
142 if ( phase == 16 ) {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
143 phase = 0;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
144 osc.last_amp = volume;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
145 square_synth.offset( time, volume, output );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
146 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
147 if ( phase == duty ) {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
148 osc.last_amp = 0;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
149 square_synth.offset( time, -volume, output );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
150 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
151 time += period;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
152 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
153 while ( time < end_time );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
154
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
155 osc.phase = phase;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
156 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
157 osc.delay = time - end_time;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
158 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
159 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
160
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
161 void Nes_Vrc6::run_saw( nes_time_t end_time )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
162 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
163 Vrc6_Osc& osc = oscs [2];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
164 Blip_Buffer* output = osc.output;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
165 if ( !output )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
166 return;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
167
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
168 int amp = osc.amp;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
169 int amp_step = osc.regs [0] & 0x3F;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
170 nes_time_t time = last_time;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
171 int last_amp = osc.last_amp;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
172 if ( !(osc.regs [2] & 0x80) || !(amp_step | amp) )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
173 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
174 osc.delay = 0;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
175 int delta = (amp >> 3) - last_amp;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
176 last_amp = amp >> 3;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
177 saw_synth.offset( time, delta, output );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
178 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
179 else
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
180 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
181 time += osc.delay;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
182 if ( time < end_time )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
183 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
184 int period = osc.period() * 2;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
185 int phase = osc.phase;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
186
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
187 do {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
188 if ( --phase == 0 ) {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
189 phase = 7;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
190 amp = 0;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
191 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
192
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
193 int delta = (amp >> 3) - last_amp;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
194 if ( delta ) {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
195 last_amp = amp >> 3;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
196 saw_synth.offset( time, delta, output );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
197 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
198
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
199 time += period;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
200 amp = (amp + amp_step) & 0xFF;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
201 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
202 while ( time < end_time );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
203
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
204 osc.phase = phase;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
205 osc.amp = amp;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
206 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
207
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
208 osc.delay = time - end_time;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
209 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
210
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
211 osc.last_amp = last_amp;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
212 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
213