nyanpasu64 / j0CC-FamiTracker

(Archived, see https://github.com/Dn-Programming-Core-Management/Dn-FamiTracker) Numerous bugfixes for 0CC-FamiTracker (based off 0.3.14.5).
https://github.com/Dn-Programming-Core-Management/Dn-FamiTracker
GNU General Public License v2.0
15 stars 2 forks source link

Reset VRC6 Phase #69

Closed lindarthebard closed 6 years ago

lindarthebard commented 6 years ago

https://wiki.nesdev.com/w/index.php/VRC6_audio#Pulse_Channels There's a way to reset the phase of a VRC6 pulse channel. I would very much like to be able to do that in order to create repeatable phase effects between the two pulse channels. Currently the phase doesn't reset between notes, so the phase gradually drifts, meaning the phasing effect is unpredictable on successive repetitions.

nyanpasu64 commented 6 years ago

If I ever get around to doing this, do you need this within 0CC only, or for NSF export too? The latter will be more difficult for me to deliver.

lindarthebard commented 6 years ago

0cc for now, but NSF export would be great. Thanks!

On Fri, May 18, 2018, 03:22 jimbo1qaz, notifications@github.com wrote:

do you need this within 0CC only, or for NSF export too?

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/jimbo1qaz/0CC-FamiTracker/issues/69#issuecomment-390164484, or mute the thread https://github.com/notifications/unsubscribe-auth/AA0MAuEjDHWBWgOi0SkYjblKrS9JFNzrks5tzqD5gaJpZM4T8vcl .

todidodido commented 6 years ago

Oh, that would be so cool if possible. You can make so much neat stuff with phasing, especially in the lower register. That's how you make "reese" bass for example.

nyanpasu64 commented 6 years ago

oh, 2 people want this? I may implement it sooner rather than later.

nyanpasu64 commented 6 years ago

unfinished https://github.com/jimbo1qaz/0CC-FamiTracker/pull/81 ......

nyanpasu64 commented 6 years ago

https://wiki.nesdev.com/w/index.php/VRC6_audio#Pulse_Channels

When the channel is disabled by clearing the E bit, output is forced to 0, and the duty cycle is immediately reset and halted; it will resume from the beginning when E is once again set. Thus it is possible to reset phase by clearing and immediately setting E.

I tried that, but it seems FT's emulation doesn't handle that behavior or something... Will continue investigating (while I have time).

nyanpasu64 commented 6 years ago

Fixed VRC6 phase reset, implementation based off nsfplay code.

Can you test the build at https://ci.appveyor.com/api/buildjobs/hf0flkt0nf345jsk/artifacts/Release%2Fj0CC-PR81-phase-reset-build59.exe ?

Phase reset is =00 and only supported on VRC6. Right now, =xx (where xx is not 0) shows up as red, but still performs phase reset. Should I change it to become a no-op effect?

nyanpasu64 commented 6 years ago

hello?

nyanpasu64 commented 6 years ago

Fixed in https://github.com/jimbo1qaz/0CC-FamiTracker/pull/81