Mercurial > audlegacy
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 ) ) |
