101

(164 replies, posted in Sinclair)

Alright, here is v0.44:

- A fix for the RowOpt feature to properly handle existing speed changes.
- Reference blocks, block parenting
- Copying/inserting a block by its name

I decided to keep the idea of reference blocks out of the main focus of the project, and implement it in a minimalistic way, just to have it for specific cases, and not make it an integral part of the pattern-less concept. Let's see how useful it actually is.

102

(164 replies, posted in Sinclair)

I was thinking more on the idea with references, and come to the same conclusion, it is better to have it as a manual 'sync' command rather than an automatic update. Besides of the possible unwanted changes, it brings too much trouble handing the insert/delete position (as all data shifts inside all blocks). I'm going to think some more before trying to implement it. At least a simple block copy function is possible and should not hurt anything, like, press something, input an existing block name, and it'll get copied into current position.

I implemented RowOpt to cram down all songs into my 1-bit collection, it worked just fine at the moment, but yes, it may have issues. One thing is that it won't optimize above the slowest speed, which is vary for different engines. I confirm the issue with the example, will look into it.

103

(164 replies, posted in Sinclair)

Thanks! One of reasons why I'm doing updates is to improve my creative throughput, make the process more efficient. I'm also discovering some issues and new ideas as I'm working on more songs. So it is connected, more music releases - more updates to 1tracker, and vice versa.

104

(164 replies, posted in Sinclair)

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.

Probably the first MuzCell song in two decades, by FADE: https://www.youtube.com/watch?v=9nXsgoMdg8U

Basically just that, a version of the PCSPE retargeted for the PET. Why limit it to just PeskyTone/PeskySound and 1tracker support, if we can go further. Now only the RAM is the limit.

A simple 6502 player for the VIA log files is included as well.

Download v1.0

107

(8 replies, posted in Sinclair)

The worst part is that it uses the whole/half/quarter note duration system, so adapting it for a tracker isn't too easy. Maybe it is better to separate the sound synthesis core from the rest of the engine, and do our usual pattern driven stuff around it. Will lose some authenticity, though, but I think the sound won't be much different.

108

(43 replies, posted in Atari)

This was a matter of discussion for several years on ZX scene, and the conclusion was that the difference between these volume levels is very subtle (a fraction of a volt) to be noticed by the ear; and this behavior is not replicated on most Amstrad models and clones. To my knowledge, no one ever actually tried it, though.

109

(164 replies, posted in Sinclair)

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.

110

(43 replies, posted in Atari)

Yes, this exact idea. Although I never seen this one, the one I saw was using Video RCA connector plugged into Audio input. Anyways, very cool stuff.

111

(8 replies, posted in Sinclair)

Very interesting, thanks for pointing out!

112

(43 replies, posted in Atari)

Oh, actually you're reminded me one interesting topic. I recall someone already attempted it, but generally it is totally underexplored, I believe. The idea is to generate audio using the video output. Like, we often put colored strips to the screen when a beeper engine is working (because Spectrum shares border color selection with the sound output bit). These strips actually produce voltage changes in the video signal at audible frequencies. It is possible to display patterns on the screen that will produce certain tones, and by changing the patterns it is possible to play music.

113

(43 replies, posted in Atari)

Thanks! Well, at least it'll makes people on the SV aware of the GTIA capabilities, so maybe eventually they'll get more interested and it'll turn into a more popular compo. One issue, I believe, is lack of easy to use tools, the 1tracker support is quite clumsy at the moment - you need to manually re-edit data a bit, and assemble the engine with an external assembler. To be improved, of course.

114

(43 replies, posted in Atari)

Hehe, guys, this does not work like this. I'm not sitting on a pile of finished GTIA songs ready to be sent anytime, it had to be made from scratch just before the deadline. So not this time... Nevermind, I'm actually just made one, sent it already. Don't know if it'll make to the compo, but let's hope. It sounds a bit glitchy compared to the ZX version, but as usual, there is no time to figure out what is wrong (kind of a sound port contention?). Party version it is!

115

(164 replies, posted in Sinclair)

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.

116

(164 replies, posted in Sinclair)

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.

117

(43 replies, posted in Atari)

Wanted to participate, however, seems I have missed this one. I somehow expected the deadline to be a day or two before the party, but now I see it was five days back already - when I was busy with the other stuff. I understand the reasoning behind his, but to me demoscene never really worked like that, it always has been work till the very last second before deadline.

Alas, but at least I'll hope to do some more 1-bit stuff later this year.

They do have a MOD to custom format converter, it does the resample and applying of all volumes, creating all sample data automatically. The trick is to compose the song within the MOD container, as it is really, really limited. Remember, 15-31 instruments, all patterns are 64 rows long. There is no priority system in use, i.e. the MOD had to be actually composed as 1-channel.

My PC Speaker music has been featured in the amazing Area 5150 demo. It is the usual 120 Hz stuff made with PCSPE that plays during the main part.

The credits scene, however, features a single channel PCM-based engine by Andrew, with music by cTrix. I think this is the fascinating one. I don't know all details, but: runs at 15 kHz, 60 Hz update rate, no mixing at all, no resampling either - all notes has to be sampled on all required pitches, and all of the sample data should fit a 64K segment. The guys asked me to try to do a song for it as a backup plan, just in case, so I messed around with it a bit, but it turned out to be quite difficult to do using the MOD to custom format converter.

I think this is an interesting concept to be explored in our Z80 realm, too. Not necessarily 'no resampling' scheme, though, but I think the PeskyTone/PeskySound engine's priority system that I already have implemented in 1tracker could be used to this purpose to make composing for such engine move convenient.

Edit: a 'Making of' article for my part

The whole thing about XM format is that it is just a convenient enough container that is easy to parse and convert into any custom format with strict channel management, and it allows to approximate the resulting sound while composing to some extent. So it is a easy way to set up a rudimentary but working tool chain to compose music for a custom sound system before taking a long mile of making custom trackers and stuff like that. Other than that, original purpose of the XM format is irrelevant here, i.e. it is not about playing actual XM files made to be played with regular XM players.

The same could be done with MIDI, but it is just way less convenient. The MIDI format is more difficult to parse, it does not feature a pattern format (which is the go to memory saving technique), the channel management is not strict, as each MIDI channel is polyphonic, and it takes more effort to make the composing tool to produce some sound that would be similar to the end result, to hear the approximation of the end result before finishing the song.

The sound approximation is important for chiptune musicians, as they rely on the tiniest details of their music arrangements to make it sound as impressive as possible within given limitations. Something as basic as a single channel rendition of Ragtime does not really need this.

You task in general looks much like something that creators of a simplistic Arduino sound routine would do - they're usually making a converter from a single voice MIDI into their custom sound format. So maybe google for articles on this, and you may find some converter code that would be relatively easy to adapt for your purpose.

Another update, v1.02 now, lots of minor improvements on the usability and stuff. Major improvement is the VGA 80x50 text mode support (DOS and SDL), makes a lot more to be seen on the screen.

http://shiru.untergrund.net/pic/yachpms.png

122

(164 replies, posted in Sinclair)

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.

123

(164 replies, posted in Sinclair)

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.

Fixed some minor and not so minor things there, the download link is the same.

One of issues was a bug in the percussion emulation that made the 'cut' settings to not work properly. Another one was the usual thing with non-latin characters in the file paths. Finally got this figured out how to deal with it within SDL and a multiplatform app, so it'll be fixed in 1tracker too.

The tracker is here, along with software emulation of the device, so now we can have some fun with it.