diff options
author | Alexey Yakovenko <wakeroid@gmail.com> | 2009-07-27 21:50:19 +0200 |
---|---|---|
committer | Alexey Yakovenko <wakeroid@gmail.com> | 2009-07-27 21:50:19 +0200 |
commit | 569208b423b982f09f286933da70d6f8f9a9e629 (patch) | |
tree | 5e0834ae41a3041f8f212cc662c1985a9a104e6a /csid.cpp | |
parent | 44647a1f28ae76bdb736a20caf3f2056499a28df (diff) |
sid seeking (slooow)
Diffstat (limited to 'csid.cpp')
-rw-r--r-- | csid.cpp | 30 |
1 files changed, 27 insertions, 3 deletions
@@ -9,6 +9,7 @@ extern "C" { #include "playlist.h" #include "csid.h" #include "md5.h" +#include "common.h" } #define MAX_SID_SONGS 65536 @@ -270,6 +271,31 @@ csid_read (char *bytes, int size) { extern "C" int csid_seek (float time) { + float t = time; + if (t < csid.info.position) { + // reinit + sidplay->load (tune); + } + else { + t -= csid.info.position; + } + int samples = t * csid.info.samplesPerSecond; + samples *= 2 * csid.info.channels; + uint16_t buffer[4096 * csid.info.channels]; + 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; +// } + } + samples -= done; + } + csid.info.position = time; + return 0; } @@ -313,14 +339,12 @@ csid_add (const char *fname) { it->timeend = 0; SidTuneInfo sidinfo; tune->getInfo (sidinfo); - int i = sidinfo.numberOfCommentStrings; + int i = sidinfo.numberOfInfoStrings; if (i >= 1 && sidinfo.infoString[0] && sidinfo.infoString[0][0]) { ps_add_meta (it, sidinfo.songs > 1 ? "album" : "title", convstr (sidinfo.infoString[0])); - //printf ("album/title: %s\n", convstr (sidinfo.infoString[0])); } if (i >= 2 && sidinfo.infoString[1] && sidinfo.infoString[1][0]) { ps_add_meta (it, "artist", convstr (sidinfo.infoString[1])); - //printf ("artist: %s\n", convstr (sidinfo.infoString[1])); } if (i >= 3 && sidinfo.infoString[2] && sidinfo.infoString[2][0]) { ps_add_meta (it, "copyright", convstr (sidinfo.infoString[2])); |