pieknyman |
Posted: 2007-01-19 09:10:52 |
|
|
Occasional visitor Posts: 27
Member since: 2007-01-13 11:33:20 |
Simple example: Let's go to very beginning of a song. What if first track doesn't have a note in the first row? No note -> no plantperiod -> no delta = crash. :) If you check sources for the winamp plugin and windows player you'll see a check for delta != 0 too! :) http://dhost.info/pieknyman |
Xeron |
Posted: 2007-01-19 10:08:04 |
|
|
Supreme Being Posts: 448
Member since: 2006-12-13 11:34:00 |
@pieknyman
The check for "Delta != 0" is not needed if the "reset_some_stuff" routine sets the delta to 1 by default. This is the better way to do it, IMHO, so that is how the new player source will work. AHX forever! |
m0d |
Posted: 2007-01-19 11:06:19 |
|
|
Occasional visitor Posts: 28
Member since: 2006-12-22 09:27:17 |
hey pieknyman :) i see you're working hard on getting the xmp-plugin AND getting some bugs out of the way, nice one :) Hope the info we provided over at xmplay forum has helped aswell. http://m0d.untergrund.net/ |
Xeron |
Posted: 2007-01-19 11:19:00 |
|
|
Supreme Being Posts: 448
Member since: 2006-12-13 11:34:00 |
@pieknyman
OK, i've fixed all the bugs you mentioned for the next version of hively. If you want to apply the fixes before HivelyTracker 1.3 is out:
1) In "reset_some_stuff", remove the reference to "ht->ht_Voices[ i ].vc_Delta", and insert a line above there containing:
ht->ht_Voices[i].vc_Delta = 1; |
2) Replace:
for( i=0; i<(1<<voice->vc_WaveLength)*4; i++ )
{
// THX.draft-hawk fucks this up, ATM
if( SquarePtr >= &waves[WO_WHITENOISE] )
SquarePtr = &waves[WO_SQUARES];
if( SquarePtr < &waves[0] )
SquarePtr = &waves[WO_WHITENOISE-1];
if( i>=0x80 ) break;
voice->vc_SquareTempBuffer[i] = *SquarePtr;
SquarePtr += Delta;
} |
With:
for( i=0; i<(1<<voice->vc_WaveLength)*4; i++ )
{
voice->vc_SquareTempBuffer[i] = *SquarePtr;
SquarePtr += Delta;
} |
The extra code was a work around for a bug which has long since been fixed (it was fixed before the 1.0 release, but I forgot to remove the work around). AHX forever! |
pieknyman |
Posted: 2007-01-19 11:23:58 |
|
|
Occasional visitor Posts: 27
Member since: 2007-01-13 11:33:20 |
Funny, I've just found it myself literally a minute ago... :)
Your vc_delta solution works fine, too. http://dhost.info/pieknyman |
spotUP |
Posted: 2007-01-19 22:47:04 |
|
|
Moderator Posts: 197
Member since: 2006-12-15 18:06:32 |
Keep going guys! http://www.uprough.net |
Xeron |
Posted: 2007-01-19 23:08:18 |
|
|
Supreme Being Posts: 448
Member since: 2006-12-13 11:34:00 |
We'll keep going if you do. How are those skins going, btw? :) AHX forever! |
spotUP |
Posted: 2007-01-20 01:53:11 |
|
|
Moderator Posts: 197
Member since: 2006-12-15 18:06:32 |
i was meaning to get back to you on that one.
don't you think it's too soon to release 1.3?
1.2 is still on the front page on the news sites.
and i _know_ you sneaky coders will add more fresh
stuff for me to change, so i will have to go through
all skins again. :P so, i'll wait untill the 1.3 release
is really close. http://www.uprough.net |
Xeron |
Posted: 2007-01-20 09:25:24 |
|
|
Supreme Being Posts: 448
Member since: 2006-12-13 11:34:00 |
The thing is, in 1.2, instruments using filtered square waves are pretty much broken, so I'm dead keen to get another version out there. AHX forever! |
pieknyman |
Posted: 2007-01-20 10:58:08 |
|
|
Occasional visitor Posts: 27
Member since: 2007-01-13 11:33:20 |
Hi,
In hvl_load_ahx():
Change this:
// Subsongs
for( i=0; i<ht->ht_SubsongNr; i++ )
{
ht->ht_Subsongs[i] = (bptr[0]<<8)|bptr[1];
bptr += 2;
}
|
to this:
// Subsongs
for( i=0; i<ht->ht_SubsongNr; i++ )
{
ht->ht_Subsongs[i] = (bptr[0]<<8)|bptr[1];
if (ht->ht_Subsongs[i] > ht->ht_PositionNr)
ht->ht_Subsongs[i] = 0;
bptr += 2;
}
|
to prevent subsong start beyond position number.
this one crashes without this. It's subsongs are obviously invalid. http://dhost.info/pieknyman |
Xeron |
Posted: 2007-01-20 11:05:46 |
|
|
Supreme Being Posts: 448
Member since: 2006-12-13 11:34:00 |
Ahh well spotted. It wouldn't crash the tracker since it always has 1000 positions (for obvious reasons). AHX forever! |
Xeron |
Posted: 2007-01-20 11:47:49 |
|
|
Supreme Being Posts: 448
Member since: 2006-12-13 11:34:00 |
Actually, that should be:
if (ht->ht_Subsongs[i] >= ht->ht_PositionNr) |
since the pattern buffer is 0 to PositioNr-1. AHX forever! |
spotUP |
Posted: 2007-01-20 18:00:41 |
|
|
Moderator Posts: 197
Member since: 2006-12-15 18:06:32 |
Xeron, aaah, I didn't realize that. I will try to update the skins as soon as possible!
http://www.uprough.net |
m0d |
Posted: 2007-01-21 23:26:43 |
|
|
Occasional visitor Posts: 28
Member since: 2006-12-22 09:27:17 |
hahaha, gotta love my AHX bug-abusing tunes. :-) http://m0d.untergrund.net/ |
pieknyman |
Posted: 2007-01-22 13:08:33 |
|
|
Occasional visitor Posts: 27
Member since: 2007-01-13 11:33:20 |
Again with the squares:
replace this loop's content:
for( i=0; i<(1<<voice->vc_WaveLength)*4; i++ )
{
voice->vc_SquareTempBuffer[i] = *SquarePtr;
SquarePtr += Delta;
}
|
with this:
if (X < 0)
{
voice->vc_SquareTempBuffer[i] = squarehacksamples;
}
else
{
voice->vc_SquareTempBuffer[i] = *SquarePtr;
SquarePtr += Delta;
}
|
where "squarehacksamples" is an 32 byte array of 0x80's. This is how the orignal amiga ahx replay code behaves.
This will take care of out-of-bounds effect 9xx. http://dhost.info/pieknyman |
Xeron |
Posted: 2007-01-22 20:40:26 |
|
|
Supreme Being Posts: 448
Member since: 2006-12-13 11:34:00 |
Shouldn't that just be:
if (X < 0)
{
voice->vc_SquareTempBuffer[i] = 0x80;
|
? AHX forever! |
pieknyman |
Posted: 2007-01-22 20:50:05 |
|
|
Occasional visitor Posts: 27
Member since: 2007-01-13 11:33:20 |
Doh!... Yes of course. I had to be out of my mind, when I was writing this... http://dhost.info/pieknyman |
Xeron |
Posted: 2007-01-22 20:52:21 |
|
|
Supreme Being Posts: 448
Member since: 2006-12-13 11:34:00 |
OK, well, its merged in for next version :) AHX forever! |
pieknyman |
Posted: 2007-01-25 11:15:03 |
|
|
Occasional visitor Posts: 27
Member since: 2007-01-13 11:33:20 |
Cancel that merge! :)
I've came up with a better solution.
Change this:
// OkDownSquare
if( --X )
SquarePtr += X << 7;
|
To this:
if( X > 0 )
SquarePtr += (X-1) << 7;
|
The former code makes command 900 invalid, what generates an awful odd sound in Pink's "klisje paa klisje" around 0:20, which is there since the first WinAHX release. This fixes 9xx command's out of bounds parameters too, so my last suggestion isn't needed anymore and actually shouldn't be there for this fix to work correctly.
(I'm also wondering if X should really be decremented.)
Sorry for all the fuzz. http://dhost.info/pieknyman |
Xeron |
Posted: 2007-01-25 11:30:37 |
|
|
Supreme Being Posts: 448
Member since: 2006-12-13 11:34:00 |
Since X is not used after that point, it seems that the "--X" was an attempt at optimising the code you came up with; however it doesn't work since if X is zero, it becomes negative, and SquarePtr is decremented by 128.
I've unmerged the old fix and merged in the new :) AHX forever! |