superdisk / hugetracker Goto Github PK
View Code? Open in Web Editor NEWThe music composition suite for the Nintendo Game Boy
Home Page: https://nickfa.ro/index.php?title=HUGETracker
The music composition suite for the Nintendo Game Boy
Home Page: https://nickfa.ro/index.php?title=HUGETracker
Drag Selection Move
From RichardULZ
Click and drag a selection to move (cut paste) Like OpenMPT? Probably a feature request worth in itself.
Since it's probably hard to program, i've split it off.
From @DeerTears Ember,
personally..."drag selection to move" is my least-favourite program feature. I know this is a Windows text standard but I've always felt that text is too fine to let it work the way it wants to. It's just really inaccessible and I'd never want to count on it when there's young kids or anybody with fine-motor-difficulties who'd be unable to use it reliably.
I understand the inaccessibility concerns about drag to move for those with fine-motor-difficulties, but i argue it can make things more accessible, and if you've never used openMPT, the margin for movement is very lenient compared to text.
To me it's an intuitive way to Re-time patterns, and more accessible than Ctrl X
Ctrl V
in many cases.
In OpenMPT, It is locked to the correct columns, dragging up/down is easy, left right needs bigger movements. The selection stays behind, while an outline of where it will place is shown.
Gif below.
You are also able to hold Ctrl to copy instead of move, but strangely only after you start dragging, this makes it hard to copy tracks, so I still use Ctrl C for that.
Pattern scrolling should follow in middle (or top bottom) the manual cursor.
Actually, we have to mouse scroll all the time.
Custom keyboard shortcuts can give us the possibility to use our own keyboard flow.
And the actual TONE change is not AZERTY friendly.
For example, if I start the program from CMD in the install directory like ".\hUGETracker.exe" it works fine. But if I go up a folder, and run ".\hUGETracker_1_0b9\hUGETracker.exe", it does not work, saying it "can't load a required file which comes with the tracker". This also breaks launching the program from the Search part of the Windows start menu.
Not exactly sure what it should detect (or if it should be expanded into a full song statistics feature).
Right now, it tells you the number of unused instruments, routines, and patterns, and lists all unused patterns just for informational purposes. It also offers the option to delete the unused patterns for you (which is currently not functional).
I was thinking maybe having a popup or even separate form which can show you information such as a list of unused patterns, waves, and routines, and assembled song ROM size just so you know your constraints.
The unused pattern removal feature isn't strictly necessary, because when rendering a ROM there's going to be an optimization step which deduplicates patterns/instruments/waves/everything, and reorders them such that they only take up the minimum amount of memory automatically. Cleaning out unused patterns would only serve to shrink your .UGE filesize.
The way the pattern editor font is loaded is a bit of a hack, and fails the first time the program is ran.
We'll have to figure this out eventually, though it's arguably low priority for the time being.
Right now the current CPU emulation relies heavily on 32 bit assembly, including the instruction SAHF
which isn't available on all processors in 64 bit mode. I'm either going to find out if LAHF
and SAHF
are present on most modern processors and try to port the assembly to 64 bit (shouldn't really require much changes) or just rewrite the whole thing in Pascal.
Edit:
All computers that support Windows 10 also support LAHF/SAHF so we should be good to go simply porting the assembly (unless we eventually need to port the tracker to phones or something.... but that'll never happen!)
It would be nice to see options that allow us to arbitrarily set arpeggios/exact pitch and duty cycle per tick like how Famitracker's instruments work. the existing envelope and defaults in the instrument settings are a great start, however I personally use complex techniques involving shifting around the duty cycle and pitch of the instrument. As it stands the only way to make this work in hUGE Tracker is to write the track at 1 tick per row placing each note and command in the pattern each time, which can be tedious and create complex timing as well as bloat in the pattern list.
Having an option that allows us to set the pitch of the instrument relative to the placed note and duty cycle per tick like Famitracker's intruments or LSDJ's Tables would make this a lot easier and far cleaner to work with.
An example is a simple kick drum, taking the note from +12 half-steps above the placed note and over the course of 5 ticks dropping it to -12 half-steps below in a parabolic pattern can make a nice punchy kick. This isn't possible with the current implementation of instruments, only being possible by writing the track at 1 Tick per Row and placing the whole set of commands each time. Another example is creating a guitar strumming sound by changing the Duty Cycle from 12.5% to 50% over 3 ticks. This also is not possible without writing the track at 1 Tick per Row and placing each command every time they are used.
Below are examples of both the instruments I am referring to.
maybe rename it to hUGETracker.lpr ?
Example:
Intrument 1 have a volume of 15
C-5 01 ...
... .. ...
C-5 01 C03
... .. ...
C-4 01 3A0 <-- here, the volume still at 03 instead of 0F.
Because an INStrument ID is set, the volume have to be reset (like XM/MOD)
Using numpad to write numbers is much faster and intuitive than using top numbers.
The undo buffer has a few problems,
Gif shows Changing channel pattern numbers is not recorded/undo able, and then changing notes in the tracker and undoing to first state can cause strange effects.
So bug 1, pattern changes are not undoable.
2, Undo buffer first state bugs
On a blank project, add 2-3 notes, then undo them, when you undo the 1st note you placed, it fills the screen with C-3
On a blank project, add 1 note, add an instrument number, then add another note, undoing back to the first operation may appear to redo, or mess up with C-3.
More refined test of same bug.
Load a project, add 1 note with or without instrument assigned, try to undo, will have no effect.
Add 1 more note after trying to undo, and undo will again have no effect.
Add 2 notes and undo will work once, then "redo" kinda.
Add 3 notes, and undo will work twice, then cause a mess of c-3 everywhere, changing patterns will update the view and show the mess is only on pattern 0, but has ruined it, and is not undoable/redoable.
Currently, hUGETracker requires the directory it's in to be writable by whoever is running the program, for example to write backup files. This is okay if running hUGETracker "portably" (which is fine on Windows due to the pre-built distribution), but less so if doing a system-wide install (more typical on Linux via package managers).
The current packaging scheme I have is to put everything in /opt
, and add a simple shell script in /usr/bin
to run hUGETracker; it would pass the relevant CLI args to specify the user backup dir.
When importing a mod containing notes under C3 it just crash.
(not a big deal for me I've just find/replace in openmt, but its an annoying bug i guess)
So I had quite a few crashes, and I think maybe it was in the process of it making backup saves, but when I tried to create a new folder in windows after, it did nothing. After hours of searching, I finally found a tut going over where the key is in regedit, and it turns out the value data had been changed from "folder" to "uge_[something]" (don't remember exactly what, sorry), that's when I was able to confirm it must've been caused by this program somehow. Super weird, and really damaging for those who don't know how to fix it. Hopefully will be easy to fix on your end though.
Reducing a lot the size of VU-meter & CH meters.
we lose to much pattern space.
Now that we have 15 dedicated instruments for all 3 channel types, typing them should be a lot easier.
1. Active instrument should be instrument 1 when editor starts.
Currently (no instument), might reduce confusion for new users expecting a sound to play.
2. Switch instrument based on channel being written to
When inserting square 1
on the Wave
or Noise
channel, it should instead switch to that channels instrument type, as Wave 1
or Noise 1
.
This was a fair complaint from GBT users who were confused when they tried square sounds on ch4, now that song playback is accurate here, it's more for those who wished it could auto switch based on selected channel.
Either change active instrument on typing
a note into the tracker, or when clicking/moving
in the tracker patterns.
Swap with the same instrument number
, or last used
instrument per channel (last used could be harder to test for bugs, might not be worth it).
When using (no instrument)
, dont change between channels.
3. Squares should play on ch1 or ch2, as some effects are exclusive to ch1
As an addendum, Squares should play on the selected channel in tracker, as the instrument sweeps
are only available on ch1, typing in ch2 should not preview them
(Double check Test C-5 will still play on channel 1 for squares, even if you last previewed a note on ch2.)
Hope it's not too much to ask, and any thoughts are welcome.
If you copy some normal text into your clipboard, for example I tested it with "this is text", and paste it into the tracker view the program crashes with the message "EStringListError with message List index (0) out of bounds"
For integration with a real Gameboy game, there needs to be some way to represent multiple tunes such that they can share instruments/waves/etc.
My ideas for how we could do it:
Add multiple order tables into the .UGE format. Regular old tunes would only use one order table. Soundtracks could utilize an order table for each song in their list. Simple solution which would allow for reuse of instruments and waves across each tune. The driver would be configured at runtime which order table to use.
Just dump each song separately, with different instruments/waves/etc. Could result in a lot of duplication and wasted space.
The problem is, the GBStudio community enjoys the capability of grabbing existing tunes and dropping them into their game, which is a nice side-effect of GBT having only one hardcoded set of instruments. With option 1, there's no guarantee the songs you grab off the internet are going to play well with each others instruments. With option 2, this is allowed but seems really wasteful space wise. I guess since GBStudio doesn't really care about a bloated ROM to begin with, this approach is feasible. Maybe we could implement both alternatives and just have an option to select which strategy to use.
executable lands into sources
Play shortcuts!
Shift enter & F5
(Play from Cursor)
Ctrl enter & F6
(Play from Start)
Enter & F7
(Play Current order / pattern)
Escape & F8
(Stop/Panic)
Alternate Note key maps
OpenMPT mode
C3-C4-C5-A5 OpenMPT current
Qwertyuiop[ ] asdfghjkl;'\ zxcvbnm,./
MilkyTracker mode
C3-B3= zSxDcvGbHnJm C4-E4= , L . ; /
C4-C5= q2w3er5t6y7ui C5-F5= 9o0p[ =]
Dare i ask about azerty and other key types? :/
Perhaps it needs to be exposed with import presets....
Change active instrument
Shift Minus -
and Shift Plus +=
next to backspace?
OpenMPT has ctrl numpad / *
which sucks, and Ctrl Up Down
which are far away...
Milky doesn't have one except fasttracker2 mode.
Active inst and Active Octave are something i change frequently, but never have good shortcuts
Change active octave
Plus
and Minus
but Milky uses = for F#5... so one might have to go in this mode
Milky has Ctrl Shift 1-8
Insert and delete row
Insert
(insert Row on pattern)
Ctrl Insert
(insert Row on whole order)
BackSpace
(Remove Row on pattern)
Ctrl Backspace
(Remove Row on whole order)
OpenMPT uses Ctrl, but Milkytracker uses shift, could do both?
Movement
Up or Down
key at edge of tracker page to cycle through Order pages.
Page Up Page Down
move in 16ths
TAB
in most trackers, moves across channels, for more keyboard only movement, would be nice when in tracker only.
Ctrl Arrow keys left and right
to change between orders is default in openMPT
Selection
Ctrl A
select entire pattern, (milky has, openMPT doesn't use)
Ctrl Shift A
Select channel? (Ctrl L is good too, but far away? not so bad)
Redo
In addition to Ctrl Y, Ctrl Shift Z
Fake alternative to Record mode?
Space bar in Milky, CtrlSpace in OpenMPT, but useless
Milky users swear by this, used to test notes out before advancing by steps.
Normally disables editing the pattern, but instead I propose...
Use Space bar to toggle step size between 0 and UserStepSize or 1
Navigation
This one's new to me, but In OpenMPT you can use Alt
and G, P, S, C
To jump between viewers,
milky tracker has the same but with Ctrl Alt
.
G for General, P for Patterns, S / I for samples and instruments, C for comments or config, i guess W for wave?
These allow close to full keyboard only support.
Not a keyboard shortcut
Click and drag a selection to move (cut paste) Like OpenMPT? Probably a feature request worth in itself.
That's a big as list, would like to get @DeerTears / ember's thoughts as they prefer Milkytracker to OpenMPT
Hello i test to build HT on raspberry pi4 raspberry os 32bit but i think that line won't work
:: Let Lazarus know about the dependencies that HT uses
lazbuild --add-package-link rackctls/RackCtlsPkg.lpk
lazbuild --add-package-link bgrabitmap/bgrabitmap/bgrabitmappack.lpk
I test build and i have this errors :
16.609] Executing "/usr/bin/ld.bfd" with command line " --dynamic-linker=/lib/ld-linux-armhf.so.3 --gc-sections -s -L. -o /home/pi/hUGETracker/Release/hUGETracker -T /home/pi/hUGETracker/Release/link.res -e _start"
[17.461] /home/pi/hUGETracker/hUGETracker.lpr(87,1) Error: (9013) Error while linking
[17.461] /home/pi/hUGETracker/hUGETracker.lpr(87,1) Fatal: (10026) There were 1 errors compiling module, stopping
[17.500] Fatal: (1018) Compilation aborted
Error: /usr/bin/ppcarm returned an error exitcode
Error: (lazarus) Compilation du projet - Mode : Production Linux - Cible : Release/hUGETracker : stopped with exit code 1
Error: (lazbuild) failed compiling of project /home/pi/hUGETracker/hUGETracker.lpi
If a 32bits version for windows exsit i can run HT with wine.
Thanks for your job.
Just changing the tempo of a song doesn't have eany inmediate effect
If you change the tempo, make any change on the song and play again, then it works
Hello , i test to build with gbdk-2020.
I use exemple in hugedriver .
i make a folder with template_minimal with gbdk_palyer_exemple.c and sample_song.c and i put hugedriver .h and i rename gbdk_palyer_exemple.c to main.c
when i make :
` :../../../bin/lcc -o Example.gb main.c sample_song.c
main.c:
sample_song.c:
sample_song.c:1051: warning 158: overflow in implicit constant conversion
?ASlink-Warning-Undefined Global '_hUGE_dosound' referenced by module 'main'
?ASlink-Warning-Undefined Global '_hUGE_mute_channel' referenced by module 'main'
?ASlink-Warning-Undefined Global '_hUGE_init' referenced by module 'main'
make: *** [Makefile:29 : Example.gb] Erreur 1 `
I don't understand how to build .The tuto only with windows .
Thanks for your help
The Numpad numbers, and + - keys, do not work in the tracker view, but do in text fields.
Not a major issue, but makes for some easy app polish.
Windows 10
0.4b (with ctrl + - & scroll for changing tracker fields patch)
If an instance of hUGETracker is already open, trying to open another one does nothing. This seems to be because of output.log, the first instance locks the file and the second instance is unable to open it. Though nothing is ever logged to output, is it even used at all?
4 unavoidable shortcuts:
-Play
-Play from cursor
-Pause
-Stop (& go to row 0)
Actually, we have to clic on the top buttons, it makes a lot of mouse move for basic features.
Proposed by @RichardULZ in #5.
[...]Some better named starting preset instruments would go a long way.
Such as the 3 square duty types 12.5, 25, 50, and same 3 duty types with an envelope.
Wave samples such as the 3 squares 12.5, 25, 50% (allows quick reusable tracks!) triangle, sine, sawtooth, others.
Hard to know what song is loaded without it in the title bar.
Might be fine with metadata Artist - Song name,
But there could be discussion about making minor changes, saving with a 1 or 2, and not knowing the difference between open files because they only pulled the metadata.
Some programs just load both names with a separator.
It would be nice if the actual register settings of instruments could be exported.
Just an info window, that shows how the registers will be set for instrument, would be sufficient too.
This would be mostly useful for using hUGETracker as an instrument designer for music/sound effects, that are run without the player. But it could also give some insight for hUGETracker users.
When pressing over multiple keys, the design cuts the sound for any key release, not the current (last) playing note key.
This is a seemingly minor issue that has a great impact on feel and polish.
Steps to reproduce
Ideas to solve,
Keep a value of the last pressed note key, and only check/compare if that is released to stop.
If there are other factors that make the note stop (eg defocus window, escape key) perhaps keep those, in case of a missed key release.
-When "CTRL" is pressed on a note, preview the sound.
-When you whange the note, preview the sound.
(Like LSDj) It will give a hUGE advantage for placing notes quickly on keyboard.
I'll look into this.
Want to skip between orders/rows/patterns (whatever they are) while a song is playing.
Was trying to have it on click if playing, but currently am modifying double click behavior.
Working OK except for returning to the 1st pattern, player only updates the order on pattern switch, so using a hacky work around with -1 on row 63.
Better than nothing...
I've noticed that the 4xy vibrato effect doesn't seem to work properly on the wave channel. When I try to use it, it just shifts the pitch up and down once and then keeps the pitch constant. In comparison, I know XPMCK's vibrato effect works on the Game Boy's wave channel as well as the pulse channels, but I'm not sure if it's doing anything specific to make it function the same way in both cases.
(I really like the overall design of hUGETracker so far! Thanks for working on this!)
Hello, I am having trouble compiling on macOS 10.13.6. I have lazarus 2.0.10 installed via MacPorts, I followed the instructions in the README file. When I get to the lazbuild step, it seems to have a problem with the output directory and where to find files and such. I am not familiar with lazarus so I don't really know how to fix this. E.g.:
Hint: (lazarus) normal output directory of package FCL 1.0.1 is not writable: "/opt/local/share/lazarus/packager/units/x86_64-darwin/"
Note: I don't want this directory to be writeable, so I'm not going to run this with sudo. I'd like to put the files somewhere in my hUGETracker directory.
I'm attaching a text file with the output of lazbuild hUGETracker.lpi --build-mode="Production Mac" &> output.txt
Any help is appreciated!
output.txt
Hey there, this looks amazing so far! I have a few ideas, not sure how feasible they are but just thought I'd put them here!
More polish, you can currently drag select a region in the tracker, or hold shift and use the arrow keys, but Shift clicking would be nice to have the same as drag box select, Standard in OpenMPT.
At first, it seems like just an accessibility feature, but if you have a small screen, being able to click, scroll, and shift click, lets you select more than you normally could by dragging.
Not major, but a nice to have.
When you do a NEW song, instrument names are kept.
Hello, got three errors while exporting song to .gbs :
rgbasm output:
ERROR/ hUGEDriver/gbs.asm (14) & (15) & (16)
Unterminated string
I was in the process of copying and pasting a block of vibrato effects in channel 2. I accidentally pasted it to the wrong row, and hit CTRL+Z to undo.
I was expecting only the last paste action to be undone. But most notes and effects in channel 2 disappeared. I was instantaneously set back roughly 50-150 undo events. Only two notes survived, which I laid around 20 minutes earlier.
My guess is that somehow the undo buffer broke or overflowed somehow. I know I hit it only once, I didn't hold it down, I didn't see half a second of undo being animated, it was instantaneous and a complete shock.
I didn't seem to be able to redo anything either. It's possible I panicked and placed a note and lost the ability to redo, but it's also possible that this bug prevents redo regardless. I've never experienced anything like this in OpenMPT in the years I've used it, so I'm pretty sure there's a serious bug here.
A possible clue, or just a coincidence: The exact point in time it reverted to, is when I kept pressing keys, trying add a "OFF" note to channel 2. I hit a bunch of keys, including Caps Lock, Tilde, plus, minus, 1-9 etc.
Proposed by @RichardULZ in #5
And noise presets with/without tone/envelope, although getting noise instruments in a linear scale would help more, everyone gets confused with only shift clock and dividing ratio.
I fully agree with this. Rulz has a function for mapping a linear scale onto the shift clock/div ratio values, so I'm likely gonna implement that.
Hello , i build huGETracker with instructions.
When i go to the folder Release and run huGETracker , i have some errors:
`abien@fabien-W55xEU:~/hUGETracker/Release$ ./hUGETracker
[ERROR] Couldn't load Pixelite!!!
(hUGETracker:25875): Gtk-CRITICAL **: 09:21:02.193: IA__gtk_widget_realize: assertion 'GTK_WIDGET_ANCHORED (widget) || GTK_IS_INVISIBLE (widget)' failed
[TGtk2WidgetSet.Destroy] WARNING: There are 1 unreleased DCs, a detailed dump follows:
[TGtk2WidgetSet.Destroy] DCs: 00007FFBB2A53A40
[TGtk2WidgetSet.Destroy] WARNING: There are 9 unreleased GDIObjects, a detailed dump follows:
[TGtk2WidgetSet.Destroy] GDIOs: 00007FFBB004E4C0 00007FFBB004E440 00007FFBB004E3C0 00007FFBB004E240 00007FFBB004E6C0 00007FFBB004E5C0 00007FFBB004E540
[TGtk2WidgetSet.Destroy] gdiBitmap: 3
[TGtk2WidgetSet.Destroy] gdiBrush: 2
[TGtk2WidgetSet.Destroy] gdiFont: 2
[TGtk2WidgetSet.Destroy] gdiPen: 2 `
When i build a lot things not found.The lines in the end of building:
[9.418] (1008) 87 lines compiled, 9.4 sec
[9.418] (1022) 2 hint(s) issued
Thanks for you help.
Hi !
Like said in the title, i can open only the version below beta 3.
The more recent Beta just doesn't open. its hard to describe it more, but first time windows asked me if i wanted to open it,
i said yes, and since, nothing is happening when launching the .exe
Friends doesnt have issue with the same beta
Thanks !
Sometimes when playing a song, a note or two of the first pattern will have a note that is just not played. After the first pattern or two this doesn't seem to occur again, and it's not reproducible deterministically. I think it might have something to do with the changes I made to the sound code where a sound register is written.
BGB has a feature to investigate wave data currently in use, using the debugger's IO map,
Since wave channel is just 16 bytes, or rather, 32 x 4 bits, an easy to use text format might be a good alternative along side the import and export of UGw wavs.
This would also allow greater precision in editing waves as well as easier sharing.
2266AAEE FFFFFEEA A6668ACF FEECA633
What are your thoughts?
Like OpenMPT, previewing/looping only a song pattern is really important.
If you are editing the bottom part of it and it reach row 0x63, it goes to the next song pattern, so you have to go back all time.
TL;DR LSDj controls would be cool
Longer version: as a long time LSDj user and fan of the ergonomics it sports (being able to make whole song natively with Dpad and 4 buttons) I wanted to suggest (and if agreed, help to betatest and design) a possibility for user to operate whole tracker using only few keyboard buttons / single modern gamepad, with possible benefits:
-opening up to Native Tracker Communities with familiar workflow
-increasing accessibility for those with special needs for it
-increasing customization for those in need of specific key combos/shortcuts
Joypad based trackers bring all control that user needs while keeping amount of buttons required low, utilizing often the directional pad in multiple ways.
Currently hUGETracker allows user to transpose notes by either -+1 note or +-1 octave, so its already halfway there, but it would be very welcome to have it without complicated CTR+SHIFT combo but enable editing values while holding one button, Left/Right adjusting 1 note up or down, and Up/Down adjusting octaves in same manner.
I could go on talking about possibilities but I will just end this message by saying that its entirely possible for hUGETracker to be usable while having only 4 Directional + 4 other buttons used for all various editing/selecting/erasing/pasting things users do, including changing screens/instruments/exporting!
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.