comparison Plugins/Input/console/Track_Emu.cpp @ 521:54cd4bac0c0a trunk

[svn] fixes via blargg.
author nenolod
date Thu, 26 Jan 2006 17:24:48 -0800
parents 1cf60c54c22d
children 76ebe33bb152
comparison
equal deleted inserted replaced
520:1cf60c54c22d 521:54cd4bac0c0a
96 return true; 96 return true;
97 } 97 }
98 98
99 void Track_Emu::fill_buf( bool check_silence ) 99 void Track_Emu::fill_buf( bool check_silence )
100 { 100 {
101 if ( !buf_count && !track_ended && 101 emu->play( buf_size, buf );
102 emu_time - out_time < silence_max * stereo * emu->sample_rate() ) 102 emu_time += buf_size;
103 if ( (check_silence || emu_time > fade_time) && is_silence( buf, buf_size ) )
103 { 104 {
104 emu->play( buf_size, buf ); 105 silence_count += buf_size;
105 emu_time += buf_size;
106 if ( (check_silence || emu_time > fade_time) && is_silence( buf, buf_size ) )
107 {
108 silence_count += buf_size;
109 }
110 else
111 {
112 silence_time = emu_time;
113 buf_count = buf_size;
114 }
115 if ( emu->track_ended() || emu->error_count() )
116 track_ended = true;
117 } 106 }
107 else
108 {
109 silence_time = emu_time;
110 buf_count = buf_size;
111 }
112 if ( emu->track_ended() || emu->error_count() )
113 track_ended = true;
118 } 114 }
119 115
120 inline void Track_Emu::end_track() 116 inline void Track_Emu::end_track()
121 { 117 {
122 silence_count = 0; 118 silence_count = 0;
154 } 150 }
155 pos += count; 151 pos += count;
156 152
157 // keep internal buffer full and possibly run ahead 153 // keep internal buffer full and possibly run ahead
158 for ( int n = 6; n--; ) 154 for ( int n = 6; n--; )
155 {
156 if ( buf_count || track_ended ||
157 emu_time - out_time > silence_max * stereo * emu->sample_rate() )
158 break;
159 fill_buf( detect_silence ); 159 fill_buf( detect_silence );
160 }
160 } 161 }
161 out_time += out_count; 162 out_time += out_count;
162 163
163 if ( detect_silence && 164 if ( detect_silence &&
164 ( emu_time - silence_time > silence_max * stereo * emu->sample_rate() && silence_time ) ) 165 ( emu_time - silence_time > silence_max * stereo * emu->sample_rate() && silence_time ) )