Previous Page | Next Page

by CyberBotX at 4:29 PM EDT on October 21, 2014
OK, so I've narrowed down where the problem is. It isn't in channel allocation, it is in the ADSR calculations. What I have yet to figure out is how to fix it, I'm still gathering data to determine a fix. But it would explain why sequences like that EO3 track are getting messed up, because the channel is playing the sound for too long and thus sounds get killed off in the process. It would also explain why it looked like the NCSFs were getting ahead of their 2SF counterparts. I'll make an update once I've figured out a fix for this.
by ifrit05 at 10:48 PM EDT on October 21, 2014
Tried loading a KH Days rip that I did but winamp refuses to load the plugin.

EDIT: Nevermind forgot to place zlib1.dll in the correct spot.

edited 4:04 AM EDT October 22, 2014
by kode54 at 3:05 PM EDT on October 22, 2014
Maybe you can implement those resamplers into my resampler.[ch] singleton thing? At least if you do that there, it would help to make coefficient tables for those, so the resampler loop can be vectorized.

It currently has zero order hold (no interpolation), BLEP (band limited steps, basically the same as ZOH but band limited), linear, cubic, and 3 term Nuttal windowed sinc, which I found to be about the best window for reducing the aliasing of resampling an extreme case of sine sweep. Throw in the others, and you can just use the whole thing like a library.

It's an easy to use resampler, since all you need to do is pump it with input samples until its buffer is full, then pull out samples one at a time. It supports both fixed and floating point input/output, but operates on floating point internally.

It could use some optimization, I suppose. If you want, the latest version is located in my modplay repository, on Bitbucket.
by CyberBotX at 11:43 PM EDT on October 23, 2014
Well, good news. After checking things with fincs, he finally figured out the issue. It turns out that it actually was the channel allocation at fault. PSG and Noise channels were being allocated in reverse.

I had also fixed the calculation of the attack rate, as what is listed on kiwids about the calculation is actually wrong. Just so it is know, basically, the table on kiwids for the amplitude values of the attack rates are correct, and the calculation is actually attack rate = attack rate * amplitude value / 256 (not 255 like they listed). On top of that, it appears as if the attack rate calculation will never allow the same volume table index to be used consecutively.

Other things I did were fix a few defaults and use the Nutall 3-term window that kode54 brought up. As far as the resampler idea does, I'll consider it in the future, but for the moment, I'll leave the NCSF plugin alone. Also, as for implementing the Legrange interpolations into that resampler, I'm not against it, but I have no idea how to translate Olli Niemitalo's algorithms into a lookup table.

So yeah, I believe that now, the plugin is as good as it'll ever be, barring any weird things that come up. The current version, v1.10.3, is in the ZIP on my website. I'll have to work with kode54 so foo_input_ncsf can also be updated.
EDIT: I've sent kode54 some pull requests to update foo_input_ncsf.

Next step is to stop being lazy about the SDAT tools. <.< Ideally I will want to create the 2SF->NCSF tool and make it so the NDS->NCSF tool can output something similar to an SMAP for easier choosing of the SSEQs to include. I also want to look into stripping of the SBNKs and/or SWARs, since Knurek did mention that being a big point for optimization that I'm not doing.

edited 8:01 PM EDT October 24, 2014
by CyberBotX at 8:06 PM EDT on October 25, 2014
Something else that was mentioned to me by Henke37, SDATs have these items called PLAYERs. They are not actual players, but rather, they control things like the maximum number of concurrent sequences, heap size, and most importantly for the NCSF plugin, a bitmask of channels that can be allocated. I've applied this to the plugin, and I have also updated the SDAT tools so the PLAYERs are not stripped from the SDAT like before. I have not updated the ZIPs yet, but will do so shortly. I will also be updating the website to mention this, as I consider this a specification change, and on top of that, I have made it so things are backwards compatible to NCSFs made without the PLAYERs in the SDAT.
by henke37 at 6:10 AM EDT on October 27, 2014
Nearly all SDATs set the channel mask to zero. But there is is always the exceptions that prove the rule.
by CyberBotX at 7:25 AM EDT on October 27, 2014
From what I had seen, some of Square-Enix's games set the channel mask, as did Time Hollow.

In any case, I think today or tomorrow, I'll work on making the 2SF->NCSF tool. It shouldn't be too difficult, as I already have some code for it from the 2SF tag copier. It'll only support 2SFs made using Caitsith2's Legacy of Ys driver, but since that probably covers 99% of the existing 2SFs, it shouldn't be a problem.
by CyberBotX at 2:22 PM EDT on October 29, 2014
I just committed the update to my GitHub that contains the 2SF->NCSF converter. I haven't tested every 2SF set out there (the 2SF archive from contained 1555 7zip files and not even all of them has 2SFs in them), but I tested out some here and there.

There are some things to note about it. It will only work on 2SFs made using the Legacy of Ys driver. Thus, it cannot handle older-style 2SFs that used the Yoshi's Island driver, for instance, or any that use a driver other than the Legacy of Ys driver. It also combines everything into a single SDAT (and thus a single NCSFLIB), but it is not exactly the same as how NDStoNCSF does it. I've designed the tool so it does nothing more than a conversion and re-timing of the sequences. If you want more control over the process, I'd suggest using the original ROM with NDStoNCSF.

I'll be updating the ZIPs on my website shortly. The next task I plan on working on will be to make NDStoNCSF output and utilize something similar to an SMAP (it won't be identical, but fairly similar). This should help with some of the more crazy sets that require a lot more fine-tuning than what can be done with the command line includes and excludes. I'm looking at you, Sonic Rush Adventure. *stare* (As a side note, that game is why 2SFtoNCSF creates its SDAT the way it does, because the 2SF set is set up in a crazy way.)

As for when that will be done, I can't say for sure. I won't be starting work on that today, and I'm busy up until Sunday evening. I might start on it then or on Monday.

edited 7:29 PM EDT October 29, 2014
by TwinkTickler at 11:24 PM EDT on October 29, 2014
I tried using this on 999 and it wouldn't work.

Any reason why?
by Knurek at 2:04 AM EDT on October 30, 2014
999 uses Procyon Studio custom driver.

Previous Page | Next Page
Go to Page 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

Search this thread

Show all threads

Reply to this thread:

User Name Tags:

bold: [b]bold[/b]
italics: [i]italics[/i]
emphasis: [em]emphasis[/em]
underline: [u]underline[/u]
small: [small]small[/small]
Link: [url=]Link[/url]


HCS Forum Index
Halley's Comet Software
forum source