Skip to content

ruby-R53/C64play

Repository files navigation

C64play

A music player for the Commodore 64's SID tunes, based on sidplayfp.

See what I've done down below and also how you can contribute to the project!

What I added···

  • Extra displays:

    • Master volume
    • Active filters
    • Filtered channels
    • Filter resonance
    • Filter cutoff
    • With the exception of the 2nd and 3rd ones, they're all printed in hexadecimal.
  • Changes to the keybinds:

    • Replay a tune by hitting the r key instead of having a 4-second timeout.
    • YouTube player-like keybinds:
      • Hit j to go to the previous subtune;
      • k to pause one;
      • and l to go to the next subtune.
    • Hit g to jump to a specific subtune instead of repeatedly hitting j or l.
    • Hit = to double the playback speed of a tune.
      • You know I actually meant +, but pressing shift is kinda awkward, so I just made it = instead.
      • You can then hit - to halve it;
      • Or 0 to go all the way back to the normal speed!
  • Other visual changes:

    • The last row of text also shows useful keybinds instead of just showing which key exits the program and displaying the time elapsed.
    • Changes to the color palette.
    • You can now see the filter curve and/or range value on the main UI.
      • These values get hidden if filter emulation is disabled at startup.
    • The DigiBoost field now only appears if a tune uses the 8580 chip.
    • A ~ prefixes a note if its frequency doesn't match one of the ones in the frequency table.
      • It's rather meant to show vibrato. Just showing notes without that feels a little sketchy.
      • Every tune seems to use a different frequency table, so don't expect it to be that accurate! Although I'm sure it'll be off by just a semitone at worst.
    • Slightly wider interface, as a result of my additions to the UI.
    • Replaced the + character from the sides to :.
    • The configuration file automatically generated by the program doesn't have an extra empty line at the end. I'm kind of a perfectionist at times···
  • OsciDump, a script for dumping individual channels to make oscilloscope views

    • It comes in 2 versions: one for single-SID tunes and another one for double-SID ones.
    • Straightforward to use: just run oscidump[_2SID].sh and use the same arguments you'd use when playing a tune in C64play!
      • Exception: -ma and -mb arguments. Those have special behavior: they include the sample channel on the dump if needed!
  • C64's latest ROM files

    • First, these ROM files are probably available everywhere on the internet. No need to bother with copyright issues.
    • Second, my project is tiny compared to ones like VICE, which bundle these ROMs to their packages.
    • Third, convenience :)

What I removed···

  • Support for Windows

    • I'm thinking of making a new UI for that. Maybe SDL in the future?
    • Plus, as I'm still a beginner, I needed to simplify stuff. Sorry Windows folks! :p
  • Display configuration file location

    • I didn't find any use for this, as there's no command-line option to load a configuration file in a custom location and the file is always loaded from the same location ¯\_(ツ)_/¯
  • STILView

    • Never used it, didn't wanna take care of something I never messed with···
  • Support for emulating with a real SID (e.g. exSID)

    • HardSID support is untested on libsidplayfp. Why bother?? xD
  • AU file support

    • I only knew this file format existed after digging into sidplayfp's source code, really. I've never seen it being used at all, and it's an old format. Most software nowadays are probably incompatible with it.
  • Support for Songlengths.txt

    • Because since HVSC #71 (it's from 2019!), only the new MD5 format is included, so again, why botherrrrrr
  • Support for libout123

    • No idea how to work with that one, it's better to leave it Pulseaudio-only instead. Maybe I'll work with it if sidplayfp eventually fully adopts it, since there'll be more changes to the audio code along with that one.
  • Support for ALSA output*

    • *I'm actually only temporarily removing support for it, because for some reason the text synchronization is really messed up on it. Until this gets fixed, I'll keep ALSA support disabled.

Contributing

If you have any ideas to enhance the program, found any bugs, wanna point out a detail that I missed, or just ask a question, feel free to open an issue or make a pull request, that would be very appreciated!!

But just by using this program you're already contributing to it in a way tho' :)