Xeron |
Posted: 2007-02-03 14:56:28 |
|
|
Supreme Being Posts: 448
Member since: 2006-12-13 11:34:00 |
OK, its maths time :)
Now, since "loudest_sample" is a constant in all our calculations, we can just remove it. Since 100% stereo seperation has no clipping, we need to scale down the overall volume of the other settings to match it. On 100% stereo, the samples to be played in a given stereo channel are multiplied by 254 and then divided by 128 (the samples for the other channel are multiplied by 0), so each stereo channel has a scale factor of:
2 (channels) x 254 (value from panning table) / 128 = 3.96875
The formula for other stereo seperations is:
(2 x k / 128) + (2 x l / 128)
Where "k" is the scale value of the dominant 2 channels, and l is the scale value of the channels that are being mixed in at a lower volume from the other stereo channel.
The values for "k" and "l" for each setting are:
Setting K L Volume
100% 254 0 3.96875
75% 250 49 4.67188
50% 235 97 5.20313
25% 212 141 5.51563
0% 180 180 5.62500
|
So now we can calculate the values for "defgain". Defgain is a percentage, so:
Setting Volume Defgain Output
100% 3.96875 100 3.96875
75% 4.67188 85 3.97110
50% 5.20313 76 3.95438
25% 5.51563 73 3.97125
0% 5.62500 71 3.99375
|
So, defgain should be:
int32 defgain[] = 71, 73, 76, 85, 100 }; |
They are slightly lower, which I expected, so fingers crossed. I'm going to try it now. AHX forever! |
Xeron |
Posted: 2007-02-03 15:04:04 |
|
|
Supreme Being Posts: 448
Member since: 2006-12-13 11:34:00 |
Hmm.. I just loaded cheesepop into hively, and did "autogain" on it for each setting. It gave me 71, 72, 79, 85 and 100, which is very close to my calculations. So, i'm going to say for the final table:
int32 defgain[] = { 71, 72, 76, 85, 100 }; |
and i'm pretty damn sure that should play all AHX tunes without clipping, and you don't need to change any part of the mixing code. AHX forever! |
pieknyman |
Posted: 2007-02-03 17:37:10 |
|
|
Occasional visitor Posts: 27
Member since: 2007-01-13 11:33:20 |
Good. I think cheesepop was the only song that made trouble with the previous values. http://dhost.info/pieknyman |
d0pefish |
Posted: 2007-02-04 14:15:45 |
|
|
Occasional visitor Posts: 14
Member since: 2006-12-16 16:10:30 |
pieknyman:
I think beta6/7 of your (brilliant, btw!) plugin has a problem playing back my competiton entry that I wrote in HT1.2; one instrument sounds a bit off.
When I get back tonight (on lunch break atm) I'll provide the instrument for testing. :) -d0pefish aka. lavaburn |
Xeron |
Posted: 2007-02-04 17:52:22 |
|
|
Supreme Being Posts: 448
Member since: 2006-12-13 11:34:00 |
@lavaburn
Hrmm... TBH, its probably the instrument rather than the song which is wrong. We've fixed quite a few bugs in the replayer now. Don't worry, ALL entrants will be given the chance to fix their tunes in HivelyTracker v1.3. AHX forever! |
syphus |
Posted: 2007-02-05 04:29:14 |
|
|
Expert at chit-chat Posts: 122
Member since: 2006-12-14 19:47:57 |
Argh. I've only just tried the pieknyman plugin for xmplay (props for the songinfo and back/forward scan, btw:) and suddenly my tunes are mostly fucked - particularly my compo entries, and now I fully appreciate your aforementioned concerns:). My fault, undoubtedly, but could someone humour my remedial sensibilities and suggest why something that the latest *tracker* version considers to be perfectly reasonable is spat upon and cast into fiery and muted damnation by the *replayer*? I mean I've successfully fixed bugs where I've been over the limit in square relation but with an instrument, for instance, which only has an 020 filter value and a sawtooth wave set for it, I'm honestly at a loss :(
For reference, to date, all of my tunes have been written in versions 1.1, 1.2 and now 1.3 of the 68k tracker, and they've played back the way I've wanted them to in each...
I don't mean to diminish all the impressive maths that's been spilled in the last few pages, or pieknyman's very nice plugin, you understand:) I'm eternally grateful for anything Hively-related, and I know we're in relatively early days of all the global compatibility whatnot. http://syphus.untergrund.net |
syphus |
Posted: 2007-02-05 04:31:43 |
|
|
Expert at chit-chat Posts: 122
Member since: 2006-12-14 19:47:57 |
Please ignore that, by the way, if I've referred to ongoing and known issues that you're looking into:) I just want to know if the tracker itself should be considered gospel, when testing completed tunes, or if we should take any one particular replay method as our definitive authority on what's correct/buggy, if that makes sense... http://syphus.untergrund.net |
Xeron |
Posted: 2007-02-05 09:21:50 |
|
|
Supreme Being Posts: 448
Member since: 2006-12-13 11:34:00 |
@syphus
The maths just make everything a bit quieter :)
I don't know how recent BuZz's 68k builds are. Certainly when 1.3 is released, that should be gospel, but AFAIK pieknymans plugin should be in sync with it if we've both done the same things discussed in this thread... AHX forever! |
pieknyman |
Posted: 2007-02-05 10:10:49 |
|
|
Occasional visitor Posts: 27
Member since: 2007-01-13 11:33:20 |
@syphus
Maybe your tunes sound fucked, by tons of AHX's are finally played as they were supposed to. :) There's no reason why HivelyTracker should follow the infamous WinAHX bugs... However, I already suggested to play Hively 1.1 and 1.2 songs with the old routine with bugs preserved, but it's up to Xeron if it will be possible to differentiate between old and new songs.
@xeron
I don't know how recent BuZz's 68k builds are. Certainly when 1.3 is released, that should be gospel
|
oh, good. I was afraid that Hively 1.3 is already released and sounds different to the plugin. :)
Anyways, Beta 8 of the plugin should be in sync with everything. http://dhost.info/pieknyman |
syphus |
Posted: 2007-02-05 13:14:51 |
|
|
Expert at chit-chat Posts: 122
Member since: 2006-12-14 19:47:57 |
Ah - time for some comparisons then:) Some of them are compo entries though, so I'll zip them all up and email them to Xeron. http://syphus.untergrund.net |
syphus |
Posted: 2007-02-05 17:39:07 |
|
|
Expert at chit-chat Posts: 122
Member since: 2006-12-14 19:47:57 |
Oh, for flip's sake... Looks like my submitted tune might actually have been correct - I've lost track of which version is which, amongst my many bugfix copies of the module:) Anyway, the bug was down to me exceeding the square-relation value again.
Since this won't play in the most current HivelyTracker, I doubt it'll be a problem in future. http://syphus.untergrund.net |
syphus |
Posted: 2007-02-05 17:58:37 |
|
|
Expert at chit-chat Posts: 122
Member since: 2006-12-14 19:47:57 |
Okay, here's one that definitely isn't just in my imagination:P
Try this mod in the very latest 68k HivelyTracker and then in the xmplay plugin - http://system7.ath.cx/files/syphus-Top_Gun_AnthemTESTING.hvl
This is how the bass-note/drum instrument is constructed:
000| C-2* | 1 | 020 | 000
001| --- | 0 | 040 | 000
002| --- | 0 | 000 | 000
003| --- | 0 | 000 | 000
004| --- | 0 | 000 | 000
005| --- | 0 | 000 | 000
006| --- | 0 | 000 | 000
007| --- | 0 | 500 | 000
Notice that while HivelyTracker plays the entire note with a filter setting of 020, the xmplay plugin seems to do as the instrument instructs it and switch quickly to 040 - perhaps the plugin is being more accurate here and the tracker is being forgiving? (I want it to sound how it does in the tracker, so I'll fix it to remove the 040 command).
Possibly a point for consideration there...possibly not:) http://syphus.untergrund.net |
pieknyman |
Posted: 2007-02-06 10:38:03 |
|
|
Occasional visitor Posts: 27
Member since: 2007-01-13 11:33:20 |
The problem probably is that filter $40 is out of range. Xmplay plays this as $3F (the maximum) and I suppose the tracker just discards it.
AHX docs state that valid values are $00-$3F (actually it should be $01-$3F as effect 000 does nothing). However I have just checked AHX editor and it accepts values up to $46... (?) I'm completely lost now... It's way beyond the samples array.
If value > $46 is entered the sound stops (just like there was C00 effect). http://dhost.info/pieknyman |
Xeron |
Posted: 2007-02-06 15:08:11 |
|
|
Supreme Being Posts: 448
Member since: 2006-12-13 11:34:00 |
I'm pretty sure that after $3F, AHX starts playing whatever is off the end of the waves buffer on real Amigas. I actually used an instrument with that in AHX years ago. I think it was playing part of the replayer or something, since the odd noises it made were consistent across reboots. AHX forever! |
d0pefish |
Posted: 2007-02-10 15:21:36 |
|
|
Occasional visitor Posts: 14
Member since: 2006-12-16 16:10:30 |
I found the problem in my tune!
After updating to the Hively 1.3 beta, the instrument sounded off just like in pieknyman's XMPlay plugin.
Then I discovered it was my fault. I'd set the square relation to 340, which is a bogus value. Oops! It sounded right to me, so I mustn't have realised that it was wrong, especially in the rush I composed the tune at. :)
The older Hively and its replayer must be playing the bogus value differently to how the new Hively replayers handle it.
In any case, I have a fixed song. Can I submit it again so the fixed version gets judged/appears on the music disk? How should I go about doing so?
The only - *only* - thing changed is the instrument in question. :) -d0pefish aka. lavaburn |
Xeron |
Posted: 2007-02-12 11:06:57 |
|
|
Supreme Being Posts: 448
Member since: 2006-12-13 11:34:00 |
@lavaburn
Email it to pete _at_ petergordon _dot_ org _dot_ uk AHX forever! |
pieknyman |
Posted: 2008-03-09 09:57:32 |
|
|
Occasional visitor Posts: 27
Member since: 2007-01-13 11:33:20 |
Xeron,
"Rubber Spine" by Curt Cool (http://amp.dascene.net/downmod.php?index=89228), instrument 4 has no ADSR decay frames, and causes a division by zero crash in hvl_process_step().
So doing
if (voice->vc_ADSR.dFrames == 0)
voice->vc_ADSR.dVolume = 0;
|
is fine or do you have a better idea?
Thanks. http://dhost.info/pieknyman |
Xeron |
Posted: 2008-03-09 17:27:09 |
|
|
Supreme Being Posts: 448
Member since: 2006-12-13 11:34:00 |
Considering that it is completely invalid for that value to be 0, i consider the module file corrupt, so that seems like a perfectly valid crash-proofing solution to me.
Edit: Although perhaps a better solution would be to check for a zero frames value on loading each instrument and setting it to 1. AHX forever! |