Giter Site home page Giter Site logo

stoneface86 / trackerboy Goto Github PK

View Code? Open in Web Editor NEW
103.0 11.0 4.0 10.91 MB

Game Boy / Game Boy Color music tracker

Home Page: https://www.trackerboy.org

License: MIT License

CMake 8.24% C++ 91.76%
gameboy sound synthesizer music-tracker tracker music cpp qt5 cpp17 trackerboy

trackerboy's Introduction

Welcome

I'm stoneface. I am a hobbyist developer who specializes in low level stuff like operating systems, embedded systems and all things hardware. I am a student at Bridgewater State University, working on a bachelors degree in Computer Science.

I'm currently working on a music tracker for the gameboy, trackerboy. It's my only project at the moment but I do some side projects with emulation and sound programming every now and then.

I am looking for contributors for trackerboy, contact me if interested.

You can contact me from any of my accounts here:

trackerboy's People

Contributors

jtakakura avatar stoneface86 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

trackerboy's Issues

Roadmap

This issue will serve as a roadmap for planned features. Feel free to suggest new features here, or discuss any of the planned features. Note that the roadmap may change at any time, as certain features may be prioritized as necessary. Reminder that this repo is for the front end of Trackerboy, so some features requested may require back end support (libtrackerboy). libtrackerboy's roadmap is located here

Items in bold are features that are required for release. Once all required features are implemented, the first release version (v1.0.0) will be published. There is no schedule for this version, since it only depends on all requirements being implemented.

v0.6.4

  • Insert row, pressing Ins in the pattern editor will push all rows ahead of the cursor down 1
  • Grow / Shrink patterns
  • #20

v0.6.5

Migration to Nim

v0.7.0 (requires libtrackerboy v0.8.0)

  • Overhaul Instrument Editor to utilize new envelope sequences
    • Remove Initial envelope settings
    • Add a sequence editor for envelope
    • Implement an envelope editor for volume envelopes
    • Implement a wave macro editor for CH3 envelopes
  • Allow the user to set the loop index for a sequence graphically
  • Add per-song timing option in Module Properties dialog
  • Implement Instrument/Waveform import and export
  • Add >> row to OrderEditor (see below)
  • Add mono option to wav exporter
  • Scroll pattern editor when selecting - #16

>> row

Adds a row to the order editor at the end that allows the user to append a new row with the specified track ids
image
When the user hits enter, a row with the entered ids will be inserted, or an automatic id will be used instead

v0.8.0 (requires libtrackerboy v0.9.0)

  • Add support to pattern editor for new effect 6xx

v0.9.0 (requires libtrackerboy v0.10.0)

  • Add .asm exporter dialog
  • Add .gbs exporter dialog
  • Add .vgm exporter dialog

v0.10.0

  • Pattern editor horizontal scrolling
  • Channel volume meters
  • Volume meter toolbar (similar to OpenMPT's)

v0.11.0 (requires libtrackerboy v0.11.0)

  • Add vibrato style option to Module Properties dialog

Unplanned

  • When entering an effect, show a description of the effect in the status bar
  • Effect editor dialog. Provides a GUI interface for editing an effect column. Shown when double clicking the effect column.
  • Help dialog for an effect list
  • .mod importer dialog
  • Grooves, or speed sequences
  • OpenMPT integration
    • Clipboard support
  • FamiTracker integration
    • Clipboard support
    • Import from .ftm
  • Sound effects
    • Sound effect editor
    • Sound effect list view + model
    • Sound effect rendering
  • UI Fluff
    • Instrument preview tracking
    • Show register state
    • Channel scopes
    • Spectrum visualizer
  • Export to other driver formats
    • Pokemon sound engine
    • Rockman World 2 Driver

Discussion

Feel free to comment below if you have any suggestions with the roadmap outlined above. For feature requests, please create a separate issue, which I will then add to the roadmap if the request is doable.

Completed

v0.6.3

  • Port to Qt6
  • Update miniaudio and RtMidi to latest versions
  • Add example songs
  • Fix bug in Waveform editor when hitting enter triggers the 50% duty preset

Trackerboy playback speed differs from gbt-player in emulators

Bug description

Trackerboy playback is slightly slower than playback in emulators (tested in SameBoy, Emulicious, GB Studio).
I'm using GB Studio's GBT Player with the same tick speed as in Trackerboy. Either increasing or decreasing tick speed doesn't align.

How to reproduce

  1. Write equivalent song with tempo ticks in .mod (F04) file as a .tbm (F40)
  2. Play back .mod in GB Studio or build ROM to test in other emulators

Information

  • Trackerboy version: v0.6.2

SourceFiles.zip
GBSpeedComparisonFiles.zip

Tempo command Fxx doesn't affect playback speed

Bug description

Using command Fxx doesn't affect playback speed–it only seems to be determined by the Trackerboy module's speed.

(Also, Trackerboy's playback speed doesn't seem to align with game boy emulators)

How to reproduce

  1. Type F04 into any channel effect column
  2. Play song

Information

  • OS: MacOS 12
  • Architecture: 64-bit, Apple Silicon M1
  • Trackerboy version: v0.6.2

[Bug] Pattern Crash When Switching Songs

Bug description

Program crashes when what seemingly is pattern row ID not being valid on the next song.

How to reproduce

  1. Open the attached module: mm1gb_weirdbug.zip
  2. Go to the 3rd song in the module (Cut Man)
  3. Click on the pattern editor on the left, go to the last pattern row
  4. Change the song to the next one (Elec Man)
  5. Tracker should crash with an "Unexpected Error";
    [Uncaught exception] Type: class std::invalid_argument What: order does not exist

I cannot say for sure but it's likely trying to stay at the same pattern row (07) in the next song, despite that not being possible in the Elec Man song due to it containing only one pattern (00).

Information

  • OS: Windows 10 20H2
  • Architecture: x64
  • Trackerboy version: 0.6.0

Changing envelope via Exx effect not working

Using the Exx effect (set envelope) without a note set does not seem to be working. When playing this example pattern, nothing happens on row 0x04. The note continues on at volume = 15. The volume should be set to 0 at this row.

image

Issue occurs on all channels. The desired behavior is achieved if the note column is set with the previous note.

32-bit version

hello! Well, my computer is not capable of opening this app, and i would love be able to use the app anyway. So, please, would you (all) be able to create a 32-bit version to weak systems?

hangs when disconnecting device using pulseaudio backend

This is a known issue, and may be a problem with miniaudio, but I'll leave this issue here in case anyone else has the same problem.

When playing out to a device using the pulseaudio backend, and the device is disconnected, the render continues as if the device was operating normally. What should happen is that the render is aborted, and an error message is displayed to the user. Since we do not get an error, the device is still used and results in a deadlock (hang) when trying to use it again. Miniaudio does not report an error when stopping the device, so there is no way to know if the device disconnected.

A possible workaround would be to implement a watchdog in the render function, such that if the buffer remains full for more than 1
second or so, consider the device inoperable and abort the render.

I have posted an issue in the miniaudio repo, will update when I hear back from the maintainer.

Envelope Column

While a software envelope is planned for a future update, a dedicated column for the hardware envelope effect (aka Exx) could be very handy for artists working with trackerboy. It would be similar to a volume column, but have 2 digits for selecting the initial volume (first digit) and the fade in/out effect (second digit), essentially having a column just for the Exx effect to take place.
I do not know, however, if this would be cutting off the available effects that one can have at a time in each channel, given that Exx on its own is an effect and one can only have 3 effects at a time per channel.
I believe this would be useful for people even after software envelopes are inplemented, given that one could still make one instrument and change the values for every row if the instrument constantly changes on lenght and/or volume.
Thank you for reading (: i hope this idea passes through in some way!!

Import .mod or any other tracker files

It would be nice to be able to import .mod or other tracker files. It'll be fine if only the first 4 channels are supported and obviously there are other limitations.

new command idea, Wxx, set waveform on channel 3

this would save a lot of time for doing complex stuff with the wave channel. EG doing something like PWM or a filter sweep. there seems to be no command to change the waveform on channel 3 without using a new instrument.

Application may hang when opening a module

Bug description

Spurious hang when opening a module. Discovered by @N-SPC700

How to reproduce

Load a module and the application may hang.
Hard to reproduce. Most likely a threading issue with the Renderer class, see below.

Information

This is most likely a synchronization issue with the Renderer, I believe the hang is caused by a deadlock when calling Renderer::forceStop https://github.com/stoneface86/trackerboy/blob/develop/src/forms/MainWindow/slots.cpp#L64

Reply to this issue if you have encountered this exact problem with specific details, so we can help isolate the cause.

macOS Mojave 10.14 support

I am using an older macOS Version (10.14). Would it be possible to release a version compatible with this old OS ?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.