summaryrefslogtreecommitdiff
path: root/csid.cpp
diff options
context:
space:
mode:
authorGravatar Alexey Yakovenko <wakeroid@gmail.com>2009-08-03 16:25:38 +0200
committerGravatar Alexey Yakovenko <wakeroid@gmail.com>2009-08-03 16:25:38 +0200
commitb70cb2ea90b43b346a2d1150c5fbf7c9e77c21d2 (patch)
tree917830e4d8e6d3bdabb38a583574ec06e47556cd /csid.cpp
parent12e2421e2bf9f8565fee5f3ff40e208408a333d4 (diff)
minor changes to sid seeking and voice muting
Diffstat (limited to 'csid.cpp')
-rw-r--r--csid.cpp37
1 files changed, 20 insertions, 17 deletions
diff --git a/csid.cpp b/csid.cpp
index 3f99df17..76394b16 100644
--- a/csid.cpp
+++ b/csid.cpp
@@ -203,8 +203,8 @@ extern "C" int
csid_init (const char *fname, int track, float start, float end) {
sidplay = new sidplay2;
resid = new ReSIDBuilder ("wtf");
-// resid->create (sidplay->info ().maxsids);
- resid->create (1);
+ resid->create (sidplay->info ().maxsids);
+// resid->create (1);
resid->filter (true);
resid->sampling (sdl_player_freq);
tune = new SidTune (fname);
@@ -262,11 +262,14 @@ csid_init (const char *fname, int track, float start, float end) {
}
csid.info.duration = length;
- sidemu *emu = resid->getsidemu ();
- if (emu) {
- for (int i = 0; i < 3; i++) {
- bool mute = csid_voicemask & (1 << i) ? true : false;
- emu->voice (i, mute ? 0x00 : 0xff, mute);
+ int maxsids = sidplay->info ().maxsids;
+ for (int k = 0; k < maxsids; k++) {
+ sidemu *emu = resid->getsidemu (k);
+ if (emu) {
+ for (int i = 0; i < 3; i++) {
+ bool mute = csid_voicemask & (1 << i) ? true : false;
+ emu->voice (i, mute ? 0x00 : 0xff, mute);
+ }
}
}
return 0;
@@ -309,12 +312,9 @@ csid_seek (float time) {
while (samples > 0) {
int n = min (samples, 4096) * csid.info.channels;
int done = sidplay->play (buffer, n);
-// printf ("seek-read %d samples, done %d\n", n, done);
if (done < n) {
-// if (sidplay->state () != sid2_stopped) {
- printf ("sid seek failure\n");
- return -1;
-// }
+ printf ("sid seek failure\n");
+ return -1;
}
samples -= done;
}
@@ -410,11 +410,14 @@ csid_mutevoice (int voice, int mute) {
csid_voicemask &= ~ (1<<voice);
csid_voicemask |= ((mute ? 1 : 0) << voice);
if (resid) {
- sidemu *emu = resid->getsidemu ();
- if (emu) {
- for (int i = 0; i < 3; i++) {
- bool mute = csid_voicemask & (1 << i) ? true : false;
- emu->voice (i, mute ? 0x00 : 0xff, mute);
+ int maxsids = sidplay->info ().maxsids;
+ for (int k = 0; k < maxsids; k++) {
+ sidemu *emu = resid->getsidemu (k);
+ if (emu) {
+ for (int i = 0; i < 3; i++) {
+ bool mute = csid_voicemask & (1 << i) ? true : false;
+ emu->voice (i, mute ? 0x00 : 0xff, mute);
+ }
}
}
}