101

(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.

102

(8 replies, posted in Sinclair)

Very interesting, thanks for pointing out!

103

(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.

104

(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.

105

(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!

106

(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.

107

(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.

108

(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

113

(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.

114

(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.

Prepared a more informed overview of the cards capabilities.

The tracker that is called YACH*PMS (was a joke working title, kept it because I'm lazy yet want to be fancy) for the actual card is now finished. At least it got all features I wanted to put into it. The next things to do is to write some docs, release the DOS version, then work on improving the emulation to make it similar to the real deal, then release the SDL version. Emulation is kinda tricky, as the thing is really got some analog weirdness in it, even though the sound sources all digital.

I also need to sort out some issues with the hardware, the card is missing channel #3 altogether (maybe something with the analog part), the hat section is overly loud (easy to fix with a resistor change), and it bleeds noise from the hat section all the time (curiously, the resistor change does not affect this bleed).

119

(164 replies, posted in Sinclair)

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.

120

(164 replies, posted in Sinclair)

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

Thanks! The tracker is getting along, the main editing features are all there (no instrument editor yet), player architecture is coming together, it just started to make some sounds via crude emulation. Once I'll get the basics to work via SDL build and DosBox emulation, I'll move to the real thing on a MS-DOS rig to explore the actual sound possibilities.

At the moment I'm thinking to just drive all the control bits with software envelopes to begin with, to get most flexibility, then experiment with instruments, and maybe remove envelopes that aren't much useful.

Nice! More platforms to the 1-bit love. Having a simple tracker of sorts there would be nice, perhaps?

I can hear that Phaser1 tunes are missing the drums, is this part of the code wasn't ported?

My current strong obsession is this piece of obscurity - a late USSR (1990-91) designed sound card for a Soviet Apple II+ clone called Agat-9.

https://c10.patreonusercontent.com/4/patreon-media/p/post/65083315/6106a3384702428d8231ef84812da049/eyJ3Ijo2MjB9/1.jpg?token-time=1651363200&token-hash=cCucV35WHJCmhoOqYaSBRE9V6ANqZa4dDvhtakTf7_c%3D

It was virtually unknown to the public until five years back, when it resurfaced. Enthusiasts restored the schematics and made a modern replica of it using the authentic parts, but as Agat-9 in itself is a major obscurity, it didn't catch much attention. A very recently a guy called Tronix286 made another replica that keeps the sound synthesis part intact, but adds a regular ISA-8 bus, so now it can be plugged into any ISA-enabled old IBM PC compatible, which is way easier to get access to.

What is so interesting there? It is kind of a blend between basic 1-bit synthesis and analog sound processing. It uses a couple of the good old i8253 as square wave generators (5 channels originally, 6 for ISA version). Then the signal goes into a very basic, but analog nevertheless, amplitude shaper (can do very crude decay), and a set of passive register-controlled LP/HP filters, then it also gets into a phase inverter to get pseudo stereo output. It also equipped with crude but kinda analog bass/tom synth and a hat synth. Bizarre combo to say the least.

The resulting sound is pretty unique. It is kinda between SID and OPLL to my ear.

So I got very interested in this, got one from Tronix286 himself (huge thanks!), and is currently working on a MS-DOS (and Windows/Linux SDL fork) tracker for the beast. There is no emulation at the moment, but of course I will work on it, too. I'm posting about the progress at my Patreon and Twitter accounts, and when a runnable demo will be available, will post about it here, too.

An old sound demo from ~1991
The ISA replica related stuff in English

I guess with M68K and 6522 we can actually set the shift register to the highest shift frequency possible, hook up an IRQ fired when it gets empty, and generate bit stream for a few channels at once not in a timed loop, like we usually do, but for a few iterations ahead. So we'd have the traditional sounding beeper music that will still leave some time for other code to run.

Another idea is to have the same single voice music as I did on the PET, but modulate the volume with a timer driven rapid changes, like, triangle/saw/pulse, much among the lines of the AY-3-8910 envelope abuse. This approach won't bring the polyphony, but very complex timbres instead.

Either way, a good quality sound emulation is needed to be able to tackle the thing. I'm afraid I haven't seen an actual Lisa at any computer museum here, let alone someone's personal possession. It is even biggest challenge than the PET in this regard.

125

(164 replies, posted in Sinclair)

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).