https://github.com/nukep/famitracker-cx
https://github.com/nukep/famitracker-cx
Last synced: 3 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/nukep/famitracker-cx
- Owner: nukep
- Created: 2014-04-19T06:09:03.000Z (about 12 years ago)
- Default Branch: master
- Last Pushed: 2015-09-05T03:20:36.000Z (almost 11 years ago)
- Last Synced: 2026-01-02T12:45:47.544Z (6 months ago)
- Language: C++
- Size: 2.04 MB
- Stars: 29
- Watchers: 5
- Forks: 9
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# FamiTracker CX
**This is an old project that I worked on. It has since been discontinued.**
I'm putting it here for "historical" reasons.
Most of the core code is written by Jonathan Liss (jsr) and other contributors,
as taken from the original FamiTracker project at
[http://famitracker.com/](http://famitracker.com/). Almost everything in the
`famitracker-core` directory, with some changes by me, is written by him.
Everything else not in `famitracker-core` is written by Dan Spencer.
## What is FamiTracker CX?
FamiTracker CX is a free cross-platform fork of FamiTracker.
FamiTracker CX is created in order to bring the popular NES/Famicom music
tracker to Linux. More platforms such as Mac OS X are planned when circumstances
permit them.
The optional GUI is rewritten from scratch using the cross-platform Qt 4
library. An ncurses player is also available for terminal nerds.
ALSA and JACK are the two supported audio APIs. More are planned as the Windows
and OS X ports are completed.
The software license is mixed GPL v2/New BSD.


## Post-Mortem
### Challenges
* Porting MFC/Win32 to Qt
* Modularising the original code into reusable components, as a requirement to
allow for many UI frontends.
(the original kept all .cpp files in a single directory!)
* Lingering undefined behavior created bugs in the Linux version
### Coding Mistakes in FamiTracker CX
* The "thread pool" is not actually a thread pool, but a message queue.
* Using the `type_t` notation on structs and not typedefs.
* Using global state to keep document data for the Qt GUI.
* The sound sink implementations abused inheritence, leading to many audio bugs.
### If this project were attempted again
Closer coordination with the original author (jsr) to organize the code base to
become reusable. There would have been much to ask from jsr, such as keeping a
development branch available at all times through Git or some other DVCS.
That alone I think would have solved many of the problems being addressed
by this project.
Ultimately, many open source projects suffer from organizational issues.
This is a primary reason I think forks of projects are created instead of
everyone contributing to a single project. That's why I created a fork
for FamiTracker CX, but it was probably a misplaced reason.