Posts

Showing posts with the label nsf

PurrFX project final thoughts

Well, we can assume that the project is finished. Although, of course, it can be refined endlessly, I completely fulfilled the original plan. You can use the framework to create your own music program (tracker or even something like DAW), you can create utilities to work with NSF files. You can also add on-the-fly music generation support to your retro game using the framework. Or, simply study the internal structure of the emulation code by collecting logs and studying the source code. I really hope that all this is useful to someone, because I have spent probably hundreds of hours of my life on studying and experimenting. I was really trying to make the framework easy to use, so why not give it a try? If anyone needs to improve it, just let me know. For example: Enabling / disabling sound channels Playback speed control Panning Support for FME-7 and VRC6 chips Adding support for some other emulation code And finally, some statistics: Duration of work is 43 days (August 10 through Sep...

PurrFX project update 19

Image
Project status overview as of September 20, 2020. Commits : September 20, 2020. Development has gone far enough and it's time for some really interesting updates! Let's start with the fact that the library now has classes and functions for converting register values ​​to sound frequencies. For example, for the Pulse1 channel, registers $4002 and $4003 are responsible for the sound frequency. Their combination gives us an 11-bit value, which, according to a special formula, is converted into a reproducible sound frequency. Also, the library (using the CNote class) allows you to convert the frequency of a sound to a note, i.e. into a specific piano key. You can use this feature to render notes in one way or another (for example, on a piano roll). The CNesState class allows you to do something like the simplest emulation of the processor's work, accumulating the values ​​of the registers. Thus, it is possible to simulate playback of track data even without using CNes cla...

PurrFX project update 15

Project status overview as of September 7, 2020. Commits : From September 6 through 7 of 2020. Over the past two days, I have done quite a lot. And the number of commits in the PurrFX repository has already exceeded 200! I started by fixing the problem of multi-threaded access to the emulation code in the NsfPlayer project (SDL version). I just used a mutex. Also for this project, I added the ability for the user to enter the name of the file to open. After that, I added classes to the library that allow you to store in memory data loaded from NSF files. These are the CDpcmDataBuffer and CFrameDataBuffer classes.   Then I created a pretty funny project called ReversePlayer . This project loads data from NSF files, stores it in memory (using the classes mentioned above) and ... Plays it backwards! Moreover, this is not just reverse sound, but the execution of commands in the reverse order. For this, a special proxy class CFrameDataProxy is used.   Looking at this project, on...

PurrFX project update 14

Image
Project status overview as of September 5, 2020. Commits : From September 3 through 5 of 2020. I've made a new repository for sample projects using the PurrFX library! At the moment there is only one “NsfPlayer” project (in two versions - Qt and SDL2). This is the simplest possible use case. So ... Let's measure the amount of code (I mean interacting with the PurrFX library) that is needed to write such a program: Hmm ... Not so much, really!     Related information: https://en.wikipedia.org/wiki/Qt_(software) https://en.wikipedia.org/wiki/Simple_DirectMedia_Layer   Project pages: https://github.com/TheCatNose/PurrFX https://github.com/TheCatNose/PurrFX-sample-projects