| |
Splunkh!
Registered: Apr 2021 Posts: 40 |
Android Goattracker compatible tracker
FakeSID is a FOSS Android chiptune tracker (inspired by LFT's Blackbird). The coder is now considering rewritting the whole thing, basing it on Goattracker! One very nice aspect of this is that Goattracker's .sng-files easily can be converted to SidWizard .swm-files (With Hermit's sng2swm-tool).
According to this thread on Github, the dude mentions he would need a little bit of help with some of the 6510-assembly bits. Anybody here who perhaps would like to point him towards the right direction? In that case leave a comment and more details can be added. Have a look at this thread: https://github.com/2bt/fakesid/issues/1#issuecomment-822011536
Personally I love the idea of punching in a few melodies or beats on my phone whilst being on the bus, and then move the fragments over to the breadbox when at home :) Also the gui on the previous/earlier android installment (FakeSID) is really sweet. Screenshots/apk are available at Github link above or at Play where it has gotten some pretty great ratings: https://play.google.com/store/apps/details?id=com.twobit.fakesid |
|
| |
Splunkh!
Registered: Apr 2021 Posts: 40 |
I just briefly wanted to bring to your attention that the awesome topic above is going to interesting places at this github page: https://github.com/2bt/fakesid/issues/1 (But it would rock to hear some noise here too :D). |
| |
Jammer
Registered: Nov 2002 Posts: 1343 |
If it's going to be 100% compatible, I'm really looking forward! :) |
| |
wil
Registered: Jan 2019 Posts: 66 |
Me too! I like Splunkh!'s vision of working on some tunes while waiting for the bus. If the timing is right we might get this when bus traveling becomes normal again. |
| |
Splunkh!
Registered: Apr 2021 Posts: 40 |
Howdy Jammer & Wil !
Thank you for chipping in on this thread.
No, it from what i can read, will not be *100%* compatible, but still not bad to my own limited understanding.
Since the time you commented here the coder of the app, 2bt, wrote this on github:
Quote:
Thank you all for the feedback, this is very helpful. Let me share with you some more of my thoughts.
I wanted to get a better understanding of which features in GoatTracker would be most essential and which features are rarely used. I was curious how typical SNG files look like and see what's typical and what effects are less common. So I wrote a tool ( https://github.com/2bt/sid2sng ) to convert SID files back to SNG. Having looked at a few files, I think I have a better idea now.
Case in point is the song order list which allows for lots of flexibility like repeating patterns and transposition, all independent for each channel. That is useful if you care a lot for space efficiency but I would like to forego this and instead just have a simple table not unlike how Fakesid currently does it. As it turns out, all the files I looked at have a very regular structure where simultaneously playing patterns always have the same length. That's perfect.
So, I do not want to support everything that GoatTracker can do, for example all the song order list stuff or the channel tempo command. That's why some SNG files will cause issues when importing but in such a case I should be able to print out a warning/error describing the issue. Original source: https://github.com/2bt/fakesid/issues/1#issuecomment-847870922
Would you perhaps find that good enough to consider write some sweet beats and melodies on it whilst waiting for the bus?
:) |
| |
Slajerek
Registered: May 2015 Posts: 63 |
I suggest to let him dig into Goattracker2 source code. It is quite simple C and frankly speaking including *all* features is not a big deal, in fact I think that gathering information may take longer time than reviewing code and implementing it in the Android environment (even considering that it does not have to be re-written, but can be easily ported via JNI and let Android GUI act via wrapper to the existing code and data structures). |
| |
Splunkh!
Registered: Apr 2021 Posts: 40 |
Thanks for this interesting input Slajerek ! I forwarded that info to 2bt. Did perhaps anybody here check out the SID to GoatTracker sng conversion tool at github ? |
| |
DeMOSic
Registered: Aug 2021 Posts: 126 |
Quote: Thanks for this interesting input Slajerek ! I forwarded that info to 2bt. Did perhaps anybody here check out the SID to GoatTracker sng conversion tool at github ?
i checked it out but couldnt get it to compile sadly |
| |
Splunkh!
Registered: Apr 2021 Posts: 40 |
Quote: i checked it out but couldnt get it to compile sadly
Hmmm, too bad. I saw you added a issue on GitHub and that there was one person previously who had some problems. If anybody would manage to produce a working binary that would be really cool. |
| |
spider-j
Registered: Oct 2004 Posts: 505 |
Compiling worked fine here on Linux.
Awesome tool. I'm glad you found it. I started writing a sid2sng tool myself a couple of weeks ago – but guess I can throw that to /dev/null now :-) |
| |
DeMOSic
Registered: Aug 2021 Posts: 126 |
Quote: Hmmm, too bad. I saw you added a issue on GitHub and that there was one person previously who had some problems. If anybody would manage to produce a working binary that would be really cool.
yeah. I even asked for the creator to add a release! |
| |
DeMOSic
Registered: Aug 2021 Posts: 126 |
Quote: Compiling worked fine here on Linux.
Awesome tool. I'm glad you found it. I started writing a sid2sng tool myself a couple of weeks ago – but guess I can throw that to /dev/null now :-)
lol im a windows user so that means its a linux program? |
| |
spider-j
Registered: Oct 2004 Posts: 505 |
Quote: lol im a windows user so that means its a linux program?
It's a super simple C++ program. I guess it will run fine on Windows. But the add_compile_options params in CMakeList.txt look GCC specific to me. Maybe try building it with GCC from Cygwin on Windows instead of Visual Studio. |
| |
Splunkh!
Registered: Apr 2021 Posts: 40 |
Whohoo!!
All is now solved thanks to Spider Jerusalem & hedning in this thread sid2sng Windows builds
The CSDB entry and the compiled (Win x32/x64) binary is here: sid2sng 1.0
I tried it and it works wonders! But not every single Goat-SID works and sometimes you need to add some parameter to get an output .sng
usage: sid2sng [options...] sid-file [sng-file]
-nopulse
-nofilter
-noinstrvib
-fixedparams
-nowavedelay
I converted sng to swn and am now enjoying analyzing the Goat-SIDs in Sidwizard 1.8 on native C64! :) |
| |
DeMOSic
Registered: Aug 2021 Posts: 126 |
Quote: Whohoo!!
All is now solved thanks to Spider Jerusalem & hedning in this thread sid2sng Windows builds
The CSDB entry and the compiled (Win x32/x64) binary is here: sid2sng 1.0
I tried it and it works wonders! But not every single Goat-SID works and sometimes you need to add some parameter to get an output .sng
usage: sid2sng [options...] sid-file [sng-file]
-nopulse
-nofilter
-noinstrvib
-fixedparams
-nowavedelay
I converted sng to swn and am now enjoying analyzing the Goat-SIDs in Sidwizard 1.8 on native C64! :)
Awesome! |
| |
2bt
Registered: Jun 2021 Posts: 25 |
After a long silence, I finally found the drive to pick up the project again and have made good progress. The goal is an android app that is basically GoatTracker with a different GUI (and some limitations). The curious may check out the source at https://github.com/2bt/GTMobile. The project is not finished but almost usable and maybe close to a test release.
I would like to explain some differences to GoatTracker regarding tables because I could really benefit from feedback at this point. Maybe my idea is bad and that would be good to know.
Let's ignore the speed table for now. Each instrument is presented with its own three tables for wave, pulse, and filter. Under the hood, there are still the global tables but there won't be a way to see or edit the global tables directly. The user won't see jump commands but there's an implicit jump command at the bottom of every (local) table. You can select a table row and make it loop from there. Not being able to jump around is restrictive in theory but perhaps not so bad in practice.
The biggest consequence of not having global tables apply to table pointer commands. Since these commands reference rows in the global tables, this is a bit of a problem. One way to avoid the problem is to just not support table pointer commands. That's not acceptable.
I have another idea. I will change table pointer commands so that they don't reference rows of the global tables, but instead reference INSTRUMENTS, which in turn reference table rows. This means, whenever you want to use a new table pointer command, you first set up an instrument. Setting up such instruments happens automatically during song loading for songs that don't have these instruments set up already. When a song is saved, instrument numbers get converted back to table rows. There is a chance of running out of instrument slots but that might not be a big problem in practice.
So yea, that's the situation right now. The approach seems a but sluggish but maybe that's ok. And perhaps some of you have been able to make sense of this text and have opinion to share, thx. |
| |
Jetboy
Registered: Jul 2006 Posts: 357 |
Why not.making it compatible? What is the point of doing crippled solution? |
| |
RS-232
Registered: Oct 2024 Posts: 3 |
I think as long as the files generated are still loadable in GT2 it should be fine.
Is the reason for not using the global tables due to screen real estate on the android, or some other reason? |
| |
spider-j
Registered: Oct 2004 Posts: 505 |
Quoting JetboyWhy not.making it compatible? What is the point of doing crippled solution?
It's not that far fetched. NinjaTracker uses the same method and if you prepare your tunes in GoatTracker and throw them on gt2nt pattern fx will converted in that way automagically.
I wouldn't be surprised if the GT2 routine did the same or something similar when exporting to PRG / SID, depending on what features were used. Cadaver has a lot of stuff heavily optimized to save RAM and rastertime. |
| |
2bt
Registered: Jun 2021 Posts: 25 |
I initially had global tables in the app but found working with it cumbersome. There isn't a lot of space on a phone screen as RS-232 pointed out. But I also wanted to make the app a bit more intuitive than the original tracker, which might help new users not familiar with it.
A global table has practical advantages. All addresses, including start addresses, can be stored as a single byte. Instruments can share table data with the goal of minimizing memory usage. This happens when two instruments have the same initial table position. The android app supports this. But data could in theory be shared more creatively. For example, instrument A may execute a few initial rows after jumping right into the local table of instrument B. With only local tables shown in the app, you won't be able to do this kind of data sharing. Having looked at a bunch of songs in the wild, I can tell you that this is not very common. Instead, what's common is that wait commands in wave tables are underutilized and space could be saved but isn't. So the app's limitations in this regard should not a big loss. |
| |
2bt
Registered: Jun 2021 Posts: 25 |
I managed to build a web version which you can try out in the browser (on a PC).
https://2bt.github.io/gtmobile/index.html
Not as responsive as the real android app and no way file import/export. But I think it's fine for the purpose of getting some initial feedback regarding UI. Please try it out and let me know what you think. And tell all your friends about it. Constructive feedback will help make the final app better. |
| |
Hein
Registered: Apr 2004 Posts: 964 |
I've tried it, looks great so far. I think it'd be good to make some space for the 'advanced' tables. By combining the project tab with the settings menu, you'd have space for a tables tab with all the expert mode / table stuff. The solution you have come up with by embedding instrument table data directly in the instruments seems useful. I guess that's where it belongs to prevent it from getting too detached. I do wonder about the instruments that are created on the fly to accommodate command tables, I think they're confusing. But I'd have to try it more to see if it'd work well when creating new tunes.
I've used FL Studio Mobile on a small Android phone and SidTracker64 on iPad, they're probably both good sources of inspiration. Especially a piano roll works surprisingly well on a small device. Maybe the data input in your GT Mobile is too tiny and a bit cumbersome, thinking about novice users. If you can find other ways to enter data values (preferably not having to remember all the commands and exact hexadecimal values), it'd be more appealing to new users that don't know GT so well. After all, the base for creating SIDs are the sequencer, patterns and the instruments. The table pointers really seem advanced features on a mobile device, which you'd rather not deal with too much when having fun on such a small screen.
Really nice to see the progress nevertheless, looking forward to the updates. |
| |
2bt
Registered: Jun 2021 Posts: 25 |
Thanks for the feedback, Hein. Yea, a Piano roll might be very useful. Fake SID had something similar. I will think about it for a bit, it could be an alternative way of adding notes.
Regarding pattern commands, I was first thinking about having an icon for each command type, but couldn't come up with something I liked. I was also worried that experienced composers would miss the hex digits. When you want to put in a command, select a cell where you want it, then click the pencil on the right which opens up a dialog.
Btw, you can mark regions of the order and pattern table by holding down on a cell for a bit and then drag. There will be different buttons on the right. You can then copy that region and paste it elsewhere. For pattern data, there are also buttons with the following functions: transpose, set overwrite instrument, delete notes, set/delete commands.
I want to also add a kind of instrument manager where you can load instrument presets. I might need some help to come up with a good set of presets though. |
| |
Hein
Registered: Apr 2004 Posts: 964 |
Quoting 2bt
Regarding pattern commands, I was first thinking about having an icon for each command type, but couldn't come up with something I liked. I was also worried that experienced composers would miss the hex digits. When you want to put in a command, select a cell where you want it, then click the pencil on the right which opens up a dialog.
Ah, right.. I tried it at work quickly, but now noticed it's usable for both novice and advanced users this way, cool. |
| |
acrouzet
Registered: May 2020 Posts: 100 |
I personally think that SidTracker64 has a quite elegant solution for converting tables to a visually intuitive interface, although sacrificing hex values. Also, ST64 is for iPad only and screen real estate is an issue for phone tracking.
This interface looks good so far for a phone tracker, though. Could also work quite well on desktop with a few tweaks. Reminds me of GTUltra. |
| |
2bt
Registered: Jun 2021 Posts: 25 |
I just added loading and saving instruments. Just tap the instrument tab twice. |
| |
2bt
Registered: Jun 2021 Posts: 25 |
Here is the debug APK:
https://drive.google.com/file/d/1B_LMvW3vUbYGw5DYRs7wx34yW9SLj_.. |
| |
2bt
Registered: Jun 2021 Posts: 25 |
I just uploaded another update. The APK can be found with the same link as above. At this point I feel like the release on the Google play store is imminent. |
| |
Hein
Registered: Apr 2004 Posts: 964 |
Quoting 2btI just uploaded another update. The APK can be found with the same link as above. At this point I feel like the release on the Google play store is imminent.
Tried installing, but I get a 'App not installed as package appears to be invalid.' message. |
| |
2bt
Registered: Jun 2021 Posts: 25 |
Thanks for the feedback. I mixed something up when uploading. Please try again, it is fixed now. |
| |
Hein
Registered: Apr 2004 Posts: 964 |
Quote: Thanks for the feedback. I mixed something up when uploading. Please try again, it is fixed now.
Works now. Will try it out when I'm having X-mas holidays and I only bring my Android phone. |
| |
2bt
Registered: Jun 2021 Posts: 25 |
Happy new year! Were you able to try out the app? How did it go?
Jump commands can be used not just for loops but to jump to some other place for the purpose of reuse. It seemed to me that this usage is not very common so I didn't feel bad not supporting this. However, it seems to be very common that instruments and table commands share table data but don't necessarily point to the same address. I had not foreseen this, unfortunately. Perhaps this is where the idea of having a separate table for each instrument breaks apart. :( I wonder how bad it feels for someone used to reusing table date this way to be forced to create a separate table. |
| |
Splunkh!
Registered: Apr 2021 Posts: 40 |
This is... AMAZING.
I have tried it out on android phone and it went waaaay beyond my expectations. I expected some alpha/beta-software and found the most intuitive and powerful sid-composer software I have ever seen. One of the best things happening on CSDB in months and since this the shread about this started in 2021 all i can say now in 2025 is.... worth waiting for.
A few thoughts
1. That it's shipped with only one song is infinitly better than if there is no songs. However to study and learn I tossed some 15 .sng files shipped with GTultra into this folder GTmobile
> Android > data > com.twobit.gtmobile > files > songs.
In case anybody is interested here are the files that worked flawlessly (not being in x2 and x3 speed etc): https://nextcloud-fingal.griffin.mygiga.cloud/s/SNGs
2. Precious space is lost on top and bottom of the app. But this is very easily remedied by having Immersion Mode implemented. Immersive mode will free up valuable screen space by hiding/toggle system UI elements such as the status bar and navigation bar. The code for it is here:
https://nextcloud-fingal.griffin.mygiga.cloud/s/ImmersiveMode
3. On older Android versions (10) app does not work. Only a corner of the app is displayed in a part of the screen but tapping in certain places produce keyboard sounds. Perhaps this is know to dev.
This was just a few things from the top of my head.
---
Without going into details i must say that I liked many of the above suggestions by Hein. Does the link above btw still have the latest version? I hope that there always will be a way to get the apk since I like many do not use Google Play Store.
Congratulations for making such a cool app 2bt ! |
| |
2bt
Registered: Jun 2021 Posts: 25 |
Thanks for the positive feedback, Splunkh!.
I update the apk behind the link regularly. The last update was just now. Here are some updates: Files are stored in Documents/gtmobile. Multi-speed is supported. Tables are rewritten during song loading to handle instruments that jump around the table. There's a way to load and save instruments by double-tapping the instrument tab.
I think it's important to have more demo songs and also a reasonable instrument library. I will need help for that, though. |
| |
Splunkh!
Registered: Apr 2021 Posts: 40 |
Hey there :)
So i installed latest version but it had issues. There is no way I can add any additinal songs anymore.
- If i add them (the ones i linked above) into Documents/gtmobile they do not show up. Only hyperspace is there.
- If i delete this song from app the app crash and then resinstall it. If i delete it from Documents/gtmobile it just say "error cant load file" (which is good, meaning its looking in the right place)
- If i uninstall app and reinstall it will crash upon startup every time. The cause for this is that there is already a Documents/gtmobile folder there. That folder needs to be deleted. Then the app can create a new folder and start normally. |
| |
spider-j
Registered: Oct 2004 Posts: 505 |
If you like to have some of my songs as example, I try to keep them all tidy and sorted after release here:
https://github.com/jansalleine/sidtunes
There is also an instruments folder in each song directory. But I have a hard time coming up with names, so "lead1.ins" or "arp 0 7 C.ins" in one song usually is different from "lead1.ins" / "arp 0 7 C.ins" in another song. |
| |
2bt
Registered: Jun 2021 Posts: 25 |
Thanks, Splunkh! for reporting the problem. I switched back to using the private app storage instead of Documents/gtmobile. This seems to be the right way to do things on android these days, I guess. I touched the export code so it opens up a dialog, and you can also export SNG files, effectively just copying them from the app storage dir.
Arguably, there should perhaps also be an import button for songs, and export/import for instruments. Maybe let's keep things simple for now and add stuff in the future as features get requested.
Thanks spider-j for sharing songs and instruments. I haven't looked at it yet. Maybe it's a good idea to write to select composers directly and ask for cooperation. |
| |
Splunkh!
Registered: Apr 2021 Posts: 40 |
Well 2bt It is not ideal to use private app storage since the only way to get songs into that folder, in later android versions, is via computer/usb file system management. I think folder/file picker seems to be the most common and best solution still. But *any* workaround so that one can import songs only using the android device would be precious. Export sng works flawlessly. Import sng would be a splendid workaround. (Ofc if one could import an intire folder of songs that would help, not having to pick one at the time).
This was one failed experiment i did on previous version that used Documents/gtmobile folder:
I in the app saved copies of the hyperspace.sng and later in filemanager renamed/replaced with other imported gt-songs. But nope, the app then made them invisable, so that did not work. If i however duplicared/renamed original hyperspace.sng files the app would see the songs now with the new names. So that unfortunatly provided no workaround.
Nice sharing of songs Spider Jerusalem ! |
| |
2bt
Registered: Jun 2021 Posts: 25 |
I added an import button. :) Also, just updated resid, but I can't really hear a difference. |
| |
Splunkh!
Registered: Apr 2021 Posts: 40 |
Tested it! Great :)
On another note (for anybody that might want it): There was no linux binary for latest Sid2sng 1.2 so I made and uploaded one some weeks ago. In order to convert an entire folder in HVSC from sid to sng this is handy (occasionally with needed options) for file in *.sid; do ./sid2sng "$file" "${file%.sid}.sng"; done |
| |
2bt
Registered: Jun 2021 Posts: 25 |
Splunkh!, I added an option to enabled fullscreen mode. Hope you like it! |
| |
Splunkh!
Registered: Apr 2021 Posts: 40 |
2bt If i like it? I loOOO000ooove it!!
https://nextcloud-fingal.griffin.mygiga.cloud/s/ar2nRNC2NCodz8S
(Fullscreen or download the video). Holy cow. Now all I need is to loose my daytime job or get some time somehow. Even on a small screen the app is now much nicer to work in. A great improvment. |
| |
Splunkh!
Registered: Apr 2021 Posts: 40 |
For more demosongs and instruments... a GTmobile compo perhaps?
Will this remain the goto-place for latest apk?
https://drive.google.com/file/d/1B_LMvW3vUbYGw5DYRs7wx34yW9SLj_.. |
| |
2bt
Registered: Jun 2021 Posts: 25 |
Splunkh! thanks very much for testing. I also keep testing with Stinsen's songs a lot, they are great. But watch out, some of them use a hard restart different from the default, like FFFF. Btw, hard restart and all other song settings are saved with the song. |
| |
2bt
Registered: Jun 2021 Posts: 25 |
Yes, that's the URL I have been sticking with. A combo is a nice idea. The winners would be featured in the release or something like that. Not sure if people would be on board and excited about that though. |
| |
2bt
Registered: Jun 2021 Posts: 25 |
It's on the app store now. Tell all your friends!
https://play.google.com/store/apps/details?id=com.twobit.gtmobi.. |