Re: 1tracker v0.47

For the love of God, please make the selection line follow the playing note when playing a song.

It's much harder to write anything otherwise.

102

Re: 1tracker v0.47

It is just matter of personal taste. There are dozens of popular trackers in the history that didn't follow the line. There are sequencers in the history that didn't display anything at all, yet was very handy to create music.

It is impossible to do with this design, anyways.

website - 1bit music - other music - youtube - bandcamp - patreon - twitter (latest news there)

103

Re: 1tracker v0.47

v0.32 is out, with many improvements. Relatively major changes in the front-end code here and there. wtbeep and Squat family support got updates. Most importantly, Velvet engine has been added.

website - 1bit music - other music - youtube - bandcamp - patreon - twitter (latest news there)

104

Re: 1tracker v0.47

Excellent, thanks a lot. I'm also glad to report that this version compiles out-of-the-box on Linux.

Re: 1tracker v0.47

1tracker v0.32 : Love your two new songs included being Freezing Point and Geostorm.
Have got them working reasonably nicely on the VZ200.

106 (edited by Shiru 2022-04-12 05:40:27)

Re: 1tracker v0.47

v0.4 is here!

In general it was expanded a bit to adopt the numerous sample-driven engines. Script API updated, but it is a bit incompatible with the previous one. A capability to save files from script has been included, as well as capability to have a few different file dialogs within a script.

Envelope and text input editors has been improved. Now they're allow to edit envelopes and strings that are wider than the screen, and there are extra controls and visuals for more convenient navigation.

A built-in engine docs viewer in the Info tab (F6). Audio file export (Ctrl+F8).

WAV file import script updated to support files with extra info chunks (like ProTools exported, lots of garbage in these).


Ear Shaver and wtbeep engines has been updated. Ear Shaver EX, qaop, yawp, PhaserX, rawp, fluidcore, PeskySoundZX, Archie engines has been added.

website - 1bit music - other music - youtube - bandcamp - patreon - twitter (latest news there)

107

Re: 1tracker v0.47

wow, so many changes at once :-)

tools for musicians are getting better and better, but it's a pity that there are less and less musicians sad

108 (edited by Shiru 2022-04-12 17:38:35)

Re: 1tracker v0.47

Yeah, and there is not enough personal time to those who are still up to make music. I myself have a mile long list of plans for music releases, albums and such (beeper, chiptune, synth, and so on), and some are waiting there for a decade by now. Making software is kinda less time consuming than making music to me, because at least I know the exact goals to achieve. With music it takes lots of experiments and sketches, and involves getting into a specific mood.

Actually that's one of reasons why I'm always returning to improve the software and to inventing more engines - I'm seeking the ways to balance out the amount of routine and creative effort needed to make music. 1-bit stuff is very appealing in this regard, because you have only so many sound possibilities within a particular engine, and it gets more about music than about fine tuning every single knob on a synth of 1000 knobs.

website - 1bit music - other music - youtube - bandcamp - patreon - twitter (latest news there)

Re: 1tracker v0.47

Brilliant, thanks Shiru.
I'll give it a try tonight.

I know what you mean about having to be in the right mood to compose.

I really want to try and master a new engine. Great to see Archie included smile

110

Re: 1tracker v0.47

Holy moly, what a massive update! Thank you so much Shiru.
Just had a quick look. Improved envelope editor is great. I'm especially happy about the addition of fluidcore, that is a pretty powerful one.

The thing compiled clean out of the box, However, peskysoundzx engine causes a segfault for me on startup, had to disable it.

home/.../1tracker-0.4/1tracker_src/engines/peskysoundzx.1te (459, 1) : INFO : Compiling void Compile(uint, uint, uint, uint)
[1]    14346 segmentation fault  ./1tracker

Same here about lack of time, as I mentioned earlier. Also 100% amen to this:

Shiru wrote:

1-bit stuff is very appealing in this regard, because you have only so many sound possibilities within a particular engine, and it gets more about music than about fine tuning every single knob on a synth of 1000 knobs.

Exactly the reason that got me into 1-bit. Except now we're constantly shooting ourselves in the foot by making more and more powerful engines. But I enjoy that even more than making beeper music, actually.

111

Re: 1tracker v0.47

PeskySoundZX script is probably one of the most complex ones. Have no idea what could be wrong with it, works for me under Windows, at least. Maybe try to disable JIT via the cfg file?

website - 1bit music - other music - youtube - bandcamp - patreon - twitter (latest news there)

112 (edited by utz 2022-04-12 19:47:49)

Re: 1tracker v0.47

Disabling JIT didn't help, unfortunately. What's strange is that it spits out this line before segfaulting. Is there any way to get some debugging messages out of Angelscript? With those "engine did not provide any data" errors I tried to debug it in gdb but the whole Angelscript part is just one big blackbox.

Edit: Probably not helpful, but here you go anyway

#0  __strlen_avx2 () at ../sysdeps/x86_64/multiarch/strlen-avx2.S:65
#1  0x00007ffff78c0d28 in __vfprintf_internal (s=0x555556472f40, format=0x5555556a20a9 "%s (%d, %d) : %s : %s\n", ap=0x7ffffffdf1e8, mode_flags=0) at vfprintf-internal.c:1647
#2  0x000055555557901b in log_add (format=0x5555556a20a9 "%s (%d, %d) : %s : %s\n") at log.h:66
#3  0x00005555556918c6 in asCScriptEngine::WriteMessage (message=0x555556eea110 "Signed/Unsigned mismatch", type=asMSGTYPE_WARNING, col=10, row=542,
    section=0x555556ed9250 "/home/heinz/classic/sinclair/zxspectrum/beeper/1tracker-0.4/1tracker_src/engines/peskysoundzx.1te", this=0x555556d8fed0) at libs/angelscript/source/as_scriptengine.cpp:1229
#4  asCScriptEngine::WriteMessage (this=0x555556d8fed0, section=0x555556ed9250 "/home/heinz/classic/sinclair/zxspectrum/beeper/1tracker-0.4/1tracker_src/engines/peskysoundzx.1te", row=542, col=10, type=asMSGTYPE_WARNING,
    message=0x555556eea110 "Signed/Unsigned mismatch") at libs/angelscript/source/as_scriptengine.cpp:1207
#5  0x000055555561832e in asCCompiler::Warning (this=0x7fffffff08a0, msg=..., node=0x555556e34fd0) at libs/angelscript/source/as_compiler.cpp:5190
#6  0x00005555556449cb in asCCompiler::CompileComparisonOperator (this=0x7fffffff08a0, node=0x555556e34fd0, lctx=0x555556d6e090, rctx=0x555556e1dd10, ctx=0x555556d6d830, op=ttLessThan) at libs/angelscript/source/as_compiler.cpp:15006
#7  0x000055555562d5ff in asCCompiler::CompileOperator (this=0x7fffffff08a0, node=0x555556e34fd0, lctx=0x555556d6e090, rctx=0x555556e1dd10, ctx=0x555556d6d830, op=ttLessThan, leftToRight=true)
    at libs/angelscript/source/as_compiler.cpp:13925
#8  0x000055555562466b in asCCompiler::CompilePostFixExpression (this=0x7fffffff08a0, postfix=0x7ffffffef690, ctx=0x7ffffffefd30) at libs/angelscript/source/as_compiler.cpp:9051
#9  0x000055555562492e in asCCompiler::CompileExpression (this=0x7fffffff08a0, expr=<optimized out>, ctx=0x7ffffffefd30) at libs/angelscript/source/as_compiler.cpp:8981
#10 0x0000555555625822 in asCCompiler::CompileCondition (this=0x7fffffff08a0, expr=0x555556e34440, ctx=0x7ffffffefd30) at libs/angelscript/source/as_compiler.cpp:8967
#11 0x000055555564bc2a in asCCompiler::CompileIfStatement (this=0x7fffffff08a0, inode=0x555556e345d0, hasReturn=0x7ffffffeff9f, bc=0x7ffffffefeb0) at libs/angelscript/source/as_compiler.cpp:4349
#12 0x000055555564b011 in asCCompiler::CompileStatementBlock (this=0x7fffffff08a0, block=<optimized out>, ownVariableScope=<optimized out>, hasReturn=0x7ffffffeff9f, bc=0x7ffffffeffe0) at libs/angelscript/source/as_compiler.cpp:1158
#13 0x000055555564bd76 in asCCompiler::CompileIfStatement (this=0x7fffffff08a0, inode=0x555556e34e90, hasReturn=0x7fffffff0330, bc=0x7fffffff0240) at libs/angelscript/source/as_compiler.cpp:4395
#14 0x000055555564b011 in asCCompiler::CompileStatementBlock (this=0x7fffffff08a0, block=<optimized out>, ownVariableScope=<optimized out>, hasReturn=0x7fffffff0330, bc=0x7fffffff03e0) at libs/angelscript/source/as_compiler.cpp:1158
#15 0x000055555564be43 in asCCompiler::CompileIfStatement (this=0x7fffffff08a0, inode=0x555556e3a430, hasReturn=0x7fffffff069f, bc=0x7fffffff05d0) at libs/angelscript/source/as_compiler.cpp:4434

113

Re: 1tracker v0.47

Yeah, can't see anything special there.

AngelScript's error messages can be kinda irritating at times, especially the 'out of bounds' ones for arrays. Like, no mention which array access caused it, so go make a guess if it happens (quite often).

website - 1bit music - other music - youtube - bandcamp - patreon - twitter (latest news there)

114

Re: 1tracker v0.47

A small write up on the projects ten year anniversary. Yes, it was that long.

website - 1bit music - other music - youtube - bandcamp - patreon - twitter (latest news there)

115

Re: 1tracker v0.47

Huh, I never realized that 1tracker was actually released around the 30th anniversary of the Spectrum. Anyway, congratulations on 10 years of what I still consider to be the best tracker in the world.

Regarding whether to switch to an external assembler, I'd say it ultimately doesn't solve the problem at hand. Yes, it'll get you support for a range of platforms without too much trouble, but eventually you'll discover some other obscure platform you'd want to support (Sharp PC cough cough) and find that wla-dx or whatever you chose doesn't suppport it, so you're back to point 0. Secondly, if you're going to link in wla-dx, then 1tracker can't be WTFPL anymore. And that would be sad. Anyway I think it's better to invest time into building a custom extensible multi-target assembler. I believe it's a manageable amount of work.

Regarding pattern-less vs traditional, I'd argue that the pattern-based approach represents a local maximum - it's good, but it's ultimately sub-optimal. Therefore it makes sense to continue innovating with a pattern-less approach in 1tracker. I think showing that a different approach to tracking is viable is actually one of the project's main achievements. That said, I believe it's possible to implement a pattern-less abstraction on top of a pattern-based implementation, if you ever want to go down that route. Probably not worth the effort, though.

116

Re: 1tracker v0.47

Very good points. Yeah, indeed, an external third party cross assembler does not solve the problem in a long run, and I really don't like to go to licenses other than WTFPL/CC0/CC-BY for my open projects (the MuzCell tracker uses a GPL 8253 core, thinking to replace it with my own basic implementation before release to avoid GPL'ing the whole thing). Custom multi-target assembler implemented on the front-end side and an ability to still use the script-implemented assemblers at will (how it works now) is probably the best way to go.

I agree, a new approach to the tracking is one of key features of the 1tracker, not adopted anywhere else at the moment, but ultimately proven to be viable, so better to stick to it. The CALL idea I think is another key element that may make the concept even more solid.

Either way, it is possible both to implement patterns in the front-end without reworking the engines (just dumping the song as one single pattern), and to implement order-less front-end that will cut the song into patterns for a pattern-based player. Some engines in 1tracker actually cutting the song into small patterns (Huby), and I kept the order list support intact in most of your engines too, just dumping the song into a single long pattern.

website - 1bit music - other music - youtube - bandcamp - patreon - twitter (latest news there)

117

Re: 1tracker v0.47

Having trouble with the Ear Shaver EX engine.

- When entering data at the loop start position, I get the good old "Engine not provided any data" error, with the addition of

Z80Ass error: label already defined!
Z80Ass error: label already defined!
 706: .loop
 706: .loop

printed to the console, and a single copy of this printed in the GUI.
- Sample import does not work, drums do not play any sound.
- Tempo seems completely messed up, I need values of at least 40 tpr to get any meaningful row length. Also, the drums seem to affect this - rows play a different length depending on the drum. The global tempo setting on the other hand seems to have no effect whatsoever.
- The new mml-style envelope editor is unusable with a qwertz keyboard, since | and * are not recognized (reading your last post on MuzCell I think you found a solution to this already, but thought I'd mention it anyway)

Post's attachments

err-esex.1tm 5.48 kb, 2 downloads since 2022-05-16 

You don't have the permssions to download the attachments of this post.

118 (edited by Shiru 2022-05-17 01:08:56)

Re: 1tracker v0.47

Thanks for the report! Not sure how to figure it out all, though. Something went wrong at many places it seems.

- Sample import does work for me.

- The problem is that when you start with some engine and switch to Ear Shaver EX with F7 without doing Zap afterwards, the global speed remains as it has been set for the previous engine, and it is usually too low to give the imported sample any chance to play. The default speed for Ear Shaver EX is 40 indeed, that's how it is intended - to provide a fine control over the tempo.

- The tempo compensation does seem a bit off to me too. It sounded fine in my test patterns, but I made a specific test that was now easier to check with the WAV export, and yes, it varies depending on the sample length. Thought it was all sorted out, but yeah, needs a fix up.

- Global speed works for me.

- No, I don't know how to handle the qwertz keyboard properly in SDL, the issue with the file paths is a different one. I have a vague idea I need to handle these keys via SDL_SCANCODE rather than the ASCII code. For now the input control just accepts all ASCII codes, but it seems it omits these symbols in the qwertz mode.

website - 1bit music - other music - youtube - bandcamp - patreon - twitter (latest news there)

119

Re: 1tracker v0.47

So the tempo issue in the ESEX seems to boil down to just line 1340, replace it with

wait_acc-=drum_frames*4;

Tempo seems to be stable now.

I also changed the front end logic to use default engine speed on engine change by F7. Preparing a minor update, just need to figure out that keyboard thing.

website - 1bit music - other music - youtube - bandcamp - patreon - twitter (latest news there)

120 (edited by Shiru 2022-08-10 00:31:28)

Re: 1tracker v0.47

Somehow forgot to make this small update. v0.41:

- Minor fix in the color schemes, c64 got brighter
- dirent updated, utf8 file paths supported
- Minor tweaks to the file selection dialog layout, navigation arrows added
- The global speed now resets to a default of the selected engine on an engine change
- MML-style envelope parser in engines now also support L as | and X as * to make it usable with QWERTZ keyboards
- Other minor fixes

Unfortunately the problem with QWERTZ keyboards in SDL isn't one that is easy to fix, so for now there is that workaround with L and X. Hope it'll help to make the engines usable, at least.

website - 1bit music - other music - youtube - bandcamp - patreon - twitter (latest news there)

Re: 1tracker v0.47

WOOHOO!   v4.0 and v4.1 works on XP again.
Whatever libraries that you are now using Shiru, its awesomely good! 

(Heh! ...I wonder how many people are scroffing at me still using XP)

122 (edited by Shiru 2022-08-10 22:44:04)

Re: 1tracker v0.47

Now the reason I needed to post the previous maintenance release is to make way for the new cool experimental feature. Didn't expect that I'll be able to implement it in just a day.

Behold and see the v0.42 with the Side track concept!

The editor now runs two copies of an engine with two separate tracks that are sharing the same song structure and settings. The original, now called Main, track gets edited and exported the usual way. The Side track only gets played in the editor, it is saved in the module file, but does not affect the export in any way.

The Main and Side tracks can be played separately or mixed together. The purpose of this is to add an extra room to sketch out the music parts and carefully plan their integration into songs of a very limited polyphony, such as 1-2 channel engines.

Functions are there to manage the Side track content, like exchanging and copying selections between two tracks. You can just exchange the contents (Ctrl+T), or copy notes from the Side track over the notes in the Main track (Ctrl+B), or use notes from the Side track to fill the gaps in the Main track (Shift+B).

Additionally, you can unwind notes within a selection (Ctrl+W), i.e. duplicate every continuous note into all subsequent empty fields, which may come handy later to fill the gaps via Shift+B.

Be aware that most beeper engines have a loose timing, so they'll eventually get de-synced to each other, even between copies of itself. Only a handful of beeper engines and most of sound chip targeted engines can maintain a stable sync for long periods of time.

website - 1bit music - other music - youtube - bandcamp - patreon - twitter (latest news there)

123

Re: 1tracker v0.47

The Side track feature is fantastic! I didn't know that I wanted it, but now that I know what it is, I totally want it. 1tracker once again innovating the tracker space.

The Main and Side tracks can be played separately or mixed together.

I don't fully understand this part. I know I can turn Side track playback on or off with Ctrl+F5, but what's the intended workflow to listen just to the Side Track? Mark the entire track and do Ctrl+T?

How would it be to have a possibility to somehow swap/copy/blend a section the current side buffer contents at an arbitrary position or even another track? I guess that would require some sort of visual representation of the Side tracks though. Perhaps have 3 display options: Side tracks off; show the all side tracks next to the Main track view; or show all side track columns next to their respective main track column. Side tracks would be shown in a different color, but otherwise act as regular tracks as far as editing is concerned.

Also since when has 1tracker had this RowOpt feature? Only noticed it now, that's great to have, too.

Still problems with peskysoundzx, on first run:

engines/peskysoundzx.1te (459, 1) : INFO : Compiling void Compile(uint, uint, uint, uint)
[1]    15724 segmentation fault  ./1tracker

Also the z80ass error persists, unfortunately.

124

Re: 1tracker v0.47

Ctrl+F6 selects the currently displayed/edited track, and when the dual mode is off, only currently displayed track plays.

Yeah, it need some thoughts to be put in to make it even more useful. Will try to develop it eventually.

Damnit, the AngelScript is a troublemaker sometimes. I don't have these particular issues on my end in the Windows build, but it sometimes drops in error messages about Z80Ass anyways. Feels like some vars/arrays don't get cleared between script calls.

website - 1bit music - other music - youtube - bandcamp - patreon - twitter (latest news there)

125 (edited by Shiru 2022-08-29 00:33:40)

Re: 1tracker v0.47

A minor update to v0.43:

- Main/side display in the header with M/S
- Rows with contents on the other track marked on the left with > < (depending on current track)
- Inactive track gets displayed in the dual mode (F6)
- Marker name copying for the whole-width copy/paste operations
- Module filename and path displayed in the window header

I also got an idea for another big improvement to the pattern-less system, a link for the already defined named blocks, but I'm still not exactly sure how to implement it interface-wise. It certainly would be a front-end side feature, so no changes needed for the engine scripts. Basically, we already have blocks of variable length and with an optional name. That name can be used as a reference for a 'link' that would synchronize contents of the same-sized same-named blocks. So you would be able to edit one block, and it automatically updates all linked blocks.

Edit: actually when I was explaining my idea here, I got a better understanding how to do it. Hopefully it won't turn the tracker into another hard-to-fix glitch fest.

website - 1bit music - other music - youtube - bandcamp - patreon - twitter (latest news there)