NovaCoder Posted October 15, 2009 Share Posted October 15, 2009 Hiya, In my quick & dirty Amiga port I'm having trouble getting the longer running background type music to loop (re-start), apparently this happens through the soundKludge do_command code? Can anyone see why music is not restarted? This do_command code is just for DOTT BTW, I know SAM & MAX etc uses some of those 'stubbed out' commands. int AmigaSoundEngine::doCommand(int a, int b, int c, int d, int e, int f, int g, int h) { byte cmd = a&0xFF; byte param = a>>8; if (param==0) { switch(cmd) { case 6: return 1; case 7: return 1; case 8: startMusic(b); return 1; case 9: stopMusic(b); return 0; //case 10: stopAllSounds(); return 0; case 11: stopAllSounds(); return 0; case 13: return isMusicPlaying(b); case 16: return 1; case 17: return 1; case 18: return 1; default: warning("SoundEngine::do_command invalid command %d", cmd); } } else if (param==1) { switch(cmd) { case 0: return 1; case 1: return 0; case 2: return 1; case 3: return 0; case 4: return 1; case 5: return 0; case 6: return 0; case 7: return 1; case 8: return 1; case 9: return 1; case 10: return 0; case 11: return 0; case 12: return 1; case 13: return 1; case 14: return 1; case 15: return 1; case 16: return 1; case 19: return 1; case 20: return 1; case 21: return -1; case 22: return 0; case 23: return 1; case 24: return 0; default: warning("SoundEngine::do_command default midi command %d", cmd); return -1; } } return -1; } Thanks Link to comment Share on other sites More sharing options...
jestar_jokin Posted October 15, 2009 Share Posted October 15, 2009 Hiya, In my quick & dirty Amiga port I'm having trouble getting the longer running background type music to loop (re-start), apparently this happens through the soundKludge do_command code? Can anyone see why music is not restarted? This do_command code is just for DOTT BTW, I know SAM & MAX etc uses some of those 'stubbed out' commands. int AmigaSoundEngine::doCommand(int a, int b, int c, int d, int e, int f, int g, int h) { byte cmd = a&0xFF; byte param = a>>8; if (param==0) { switch(cmd) { case 6: return 1; case 7: return 1; case 8: startMusic(b); return 1; case 9: stopMusic(b); return 0; //case 10: stopAllSounds(); return 0; case 11: stopAllSounds(); return 0; case 13: return isMusicPlaying(b); case 16: return 1; case 17: return 1; case 18: return 1; default: warning("SoundEngine::do_command invalid command %d", cmd); } } else if (param==1) { switch(cmd) { case 0: return 1; case 1: return 0; case 2: return 1; case 3: return 0; case 4: return 1; case 5: return 0; case 6: return 0; case 7: return 1; case 8: return 1; case 9: return 1; case 10: return 0; case 11: return 0; case 12: return 1; case 13: return 1; case 14: return 1; case 15: return 1; case 16: return 1; case 19: return 1; case 20: return 1; case 21: return -1; case 22: return 0; case 23: return 1; case 24: return 0; default: warning("SoundEngine::do_command default midi command %d", cmd); return -1; } } return -1; } Thanks soundKludge is basically the interface to iMUSE through SCUMM scripts. I don't know iMUSE intimately enough to help, but I believe all looping information is contained as SysEx messages in the MIDI stream. The ScummC documentation on iMUSE might help: http://alban.dotsec.net/15.html Link to comment Share on other sites More sharing options...
NovaCoder Posted October 15, 2009 Author Share Posted October 15, 2009 Hiya, Thanks for that link, very helpful I found out the answer on another forum, cmnd 15 (when param == 1) sets up a 'hook jump' which means that the track is looped. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.