Next up: DiHalt Lite 2021! 7th-9th of January, so Jan 6th is the deadline I guess.
I assume BotB Winter Chip will have Beeper as well, so better start stashing up some tunes, hehe.
276 2020-10-28 18:13:54
Re: upcoming beeper compos (135 replies, posted in Sinclair)
277 2020-10-27 22:51:22
Re: 1tracker v0.47 (166 replies, posted in Sinclair)
song_editor.h:979
if(key>=SDLK_KP_0&&key<=SDLK_KP_9)
That looks like a bug to me, because SDLK_KP_0 = 0x40000062 and SDLK_KP_9 = 0x40000061.
278 2020-10-26 15:17:53
Re: 1tracker v0.47 (166 replies, posted in Sinclair)
Looked into getting v0.3 running on my machine today.
First, a couple of changes to the makefile:
-I./libs/angelscript/angelscript_jit -> -I./libs/angelscript_jit
1tracker: libs/angelscript_jit/virtual_asm_x86.o -> 1tracker: libs/angelscript_jit/virtual_asm_x64.o
virtual_asm_x86.o: libs/angelscript_jit/virtual_asm_x86.cpp -> virtual_asm_x64.o: libs/angelscript_jit/virtual_asm_x64.cpp
I'm also building with clang instead of gcc. Anyway, building fails with a number of errors.
./gui.h:447:7: error: no matching function for call to 'draw_menu_item'
x = draw_menu_item(x, (editStyle != EDIT_STYLE_CHOPPED)?"~F1~-Chop":"~F1~+Chop");
^~~~~~~~~~~~~~
./gui.h:409:5: note: candidate function not viable: no known conversion from 'const char [10]' to 'char *' for 2nd argument
int draw_menu_item(int x, char *str)
^
./gui.h:449:7: error: no matching function for call to 'draw_menu_item'
x = draw_menu_item(x, !quietMode ? "~F2~-Quiet" : "~F2~+Quiet");
^~~~~~~~~~~~~~
./gui.h:409:5: note: candidate function not viable: no known conversion from 'const char [11]' to 'char *' for 2nd argument
int draw_menu_item(int x, char *str)
^
Easy fix, change gui.h:409 to
int draw_menu_item(int x, const char *str)
./select_engine.h:34:9: warning: using the result of an assignment as a condition without parentheses [-Wparentheses]
if (dp = opendir(engineDirectory))
~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
./select_engine.h:34:9: note: place parentheses around the assignment to silence this warning
if (dp = opendir(engineDirectory))
^
( )
./select_engine.h:34:9: note: use '==' to turn this assignment into an equality comparison
if (dp = opendir(engineDirectory))
^
==
./select_engine.h:120:11: error: use of undeclared identifier '_fileno'; did you mean 'fileno'?
fstat(_fileno(file), &fileStat);
^~~~~~~
fileno
Ok, change select_engine.h:34 to
if ((dp = opendir(engineDirectory)))
and :120 to
fstat(fileno(file), &fileStat);
Not sure about the latter one. Anyway, now 1tracker builds (with a number of warnings, mostly from angelscript, nothing too serious as far as I can tell.
So I proceed to fire up 1tracker and start a new SquatE song. On entering the first note, this happens:
Z80Ass error: label already defined!
281: .loop
[1] 6479 segmentation fault ./1tracker
Whoops! Same thing happens on the old Squat, but not on wtbeep, for example.
279 2020-09-24 07:06:51
Re: AMP16 - New 16K Beeper Engine (1 replies, posted in Sinclair)
Holy cow, that's fantastic news. Congrats Hikaru on pulling this off. Can't imagine how much of a hassle it must've been to work out the timings.
Now what we really need is the source code and documentation of the song format...
280 2020-09-22 18:43:23
Re: Adding vocal track (8 replies, posted in Sinclair)
Haha, as usual. Giant scary looking math formula boils down to rather trivial real world solution
Ok, so this looks indeed like something that can be done on Spectrum. I'll look into this once I have some free time (end of the year, hopefully). Unless you want to try, of course! It'd be great to see a new engine from you!
281 2020-09-21 06:16:28
Re: Adding vocal track (8 replies, posted in Sinclair)
Do you know LPC fundamentals and this marvelous document? https://cnx.org/contents/swFM2W46@5.12: … troduction
Fantastic, just what I need! I briefly looked at LPC before, but was like "meh, too much maths". But in recent months I've been working on my math skills so I might be able to tackle this now.
RLE
For if we'd want to go full PCM instead of PWM (3-bit should be possible and give quite decent speech quality), I recently read that dictionary based audio compression apparently works well for low res audio, and was used quite a bit in old Amiga demos. So, chop up the audio into blocks of, say, 8 samples, create a dictionary of those, (optionally) massage dictionary a bit to eliminate similar samples, replace audio stream with pointers to dictionary. Simple enough to decode imo.
Regarding microsamples, there is one issue with fixing the length to 256 samples. You essentially end up with 3 different use cases:
- vowels: arbitrary length, must be looped
- k, t, p etc: one-shot samples with fixed length
- s, th, kh: noise, arbitrary length.
The main thing here is the noise ones: If you use a 256 b looped sample for it, you cannot control pitch, because it won't sound like noise for anything but the lowest stepping speed.
So to me it seems like the best approach is to detect the "type" of sound beforehand, and just synthesize the noisy ones, and perhaps the plosives as well. That's how I ended up with "hey, if we can synthesize the vowels as well, then we don't actually need samples".
282 2020-09-18 21:56:07
Re: Adding vocal track (8 replies, posted in Sinclair)
Been actually thinking about making an engine with a dedicated vocal/speech synth track for quite some time now. 256-byte wavetables is indeed well-suited for this. What I'd really want to do though is formant synthesis. Haven't been able to pull it off yet, though.
283 2020-09-15 10:31:02
Re: new-ish engine: SquatE (5 replies, posted in Sinclair)
Oh, I like the sound of that. Will be a few days before I get around to trying it out, but I'm already drooling over the description, hehe. Percussion is still a problem area in beeper imo, so great to see advances in that field.
284 2020-06-13 18:00:21
Re: The 1-Bit Instrument: New paper on 1-bit music (9 replies, posted in General Discussion)
Ha, love the snail in the background. Is that your garden? Lovely song too, can't even decide if I like the original or the 1-bit version better.
285 2020-06-13 17:55:05
Re: HoustonTracker 2 (TI-82/83/83+/84+) (130 replies, posted in Calculators & Pocket Computers)
Ha, neat. Good timing, too: Recently a new developer started contributing. He fixed the play icon (didn't even remember there was one lol) and, to my utter amazement, managed to squeeze some more bytes from the compressed font.
286 2020-05-06 09:12:58
Re: HoustonTracker 2 (TI-82/83/83+/84+) (130 replies, posted in Calculators & Pocket Computers)
Ok, 2 wild guesses:
1. You are in Hold mode (can be toggled with [CLEAR])
2. Your speed is set to 0 for some reason. Do you have all columns filled in the sequence?
287 2020-04-20 09:03:48
Re: HoustonTracker 2 (TI-82/83/83+/84+) (130 replies, posted in Calculators & Pocket Computers)
You need to qualifiy the path where tilp2 is installed, then. You can use the Tab key to auto-expand names. So, if your tilp installation is in C:\My Programs\tilp\, you do something like
My<Tab>\ti<Tab>\tilp ti84+ ...<Enter>
I think you have the very old version of TiLP from http://lpg.ticalc.org/prj_tilp/. (Unfortunately they haven't updated the site in like, a decade.)
Might be better to get a more recent one from https://github.com/debrouxl/tilp_and_gfm/releases. first uninstall the old version and the Gtk runtime. Second, you will probably need to install the required version 2.24 of Gtk manually. You can get the installer here. After installing the new TiLP, you may or may not need to run Zadig again, as described in https://github.com/debrouxl/tilp_and_gf … DME.win32.
288 2020-04-19 23:22:53
Re: HoustonTracker 2 (TI-82/83/83+/84+) (130 replies, posted in Calculators & Pocket Computers)
Huh, no menu at all. Something's definitely borked here. Which version of TiLP are you using, and which version of the GTK2 runtime is installed?
Also, could you try this in a command prompt:
tilp ti84+ DirectLink path\to\DoorsCS7.8xk
289 2020-04-19 14:32:48
Re: In-game (during gameplay) music (20 replies, posted in Sinclair)
Good writeup, introspec. I'll add that in addition to the pin pulse method, the Squeeker method also allows for some deviations in timing, and both of these methods still work (albeit with noticable degration of sound quality and of course frequency range) at fairly low update rates, as demonstrated by nanobeep.
290 2020-04-19 14:23:41
Re: HoustonTracker 2 (TI-82/83/83+/84+) (130 replies, posted in Calculators & Pocket Computers)
That's odd, that File send option should be there even if the calc is not recognized.
Can you post a screenshot, perhaps?
291 2020-03-29 18:46:27
Topic: The 1-Bit Instrument: New paper on 1-bit music (9 replies, posted in General Discussion)
Check out this excellent new article on 1-bit music, by Protodome. I'd say so far this is the best and most comprehensive one of a small but growing list of academic papers on 1-bit music.
And because theory is dry, we also have https://protodome.bandcamp.com/album/4000ad
292 2020-03-28 09:44:59
Re: 1tracker v0.47 (166 replies, posted in Sinclair)
A little feature request. Would it be possible to break long data lines in the asm output (such as the ones produced by wav import)? Some assemblers choke on these, including sjasmplus.
293 2020-02-15 13:12:15
Re: next gen engine ideas (135 replies, posted in Sinclair)
So as I was just about to fall asleep last night, it occurred to me that it's possible to implement a low-pass filter with variable cut-off, without using multiplication.
Assuming an engine that supports multiple volume levels per channel, the idea is as follows:
current_volume = 0
max_volume_delta = x
loop {
new_volume = n // use whatever standard method here
if abs(current_volume - new_volume) > max_volume_delta {
if new_volume > current_volume {
new_volume = current_volume + max_volume_delta
} else {
new_volume = current_volume - max_volume_delta
}
}
... // output sound
}
This could potentially be used to add filter envelope emulation to existing synthesis algorithms such as Phaser. The question though is how to efficiently implement that big fat nested conditional.
It's fairly easy for a saw wave generator, because we can assume that when (abs(current_volume - new_volume) > max_volume_delta) is true, then (new_volume < current_volume) is also true for a real-world implementation (in other words, max_volume_delta is never exceeded on the rising edge of the saw). So that's what the attached example demonstrates.
294 2020-02-01 13:49:30
Re: Tritone? (12 replies, posted in General Discussion)
Just realized it cannot be 1tracker. The track is from 2016, but Tritone was only added to 1tracker in 2018.
Perhaps best to ask the author directly: https://demozoo.org/sceners/63068/
295 2020-02-01 12:11:23
Re: Tritone? (12 replies, posted in General Discussion)
Old version of 1tracker maybe?
296 2020-01-30 20:12:45
Re: AON, project in progress (35 replies, posted in Other Platforms)
Good read, thanks!
297 2020-01-21 09:52:19
Re: 1-bit on the Vtech Laser210/310 and VZ200/VZ300 Z80 computers. (42 replies, posted in Other Platforms)
Qchan is pin pulse so in theory it should work. However, it may be too quiet to be properly audible, or maybe the pulses will be too short to actually switch the piezo. Could also be that the volume envelopes don't quite work as intended because some piezos have a pretty strong overshoot. Nevertheless, it's worth a try methinks. Same goes for the Octode family (except Octode PWM and Octode2k16, those are pulse interleaving), Stocker, Huby, and BuzzKick.
298 2020-01-20 11:15:47
Re: Choosing the right Beeper engine for in-game music (1 replies, posted in Sinclair)
In-game beeper music is largely uncharted territory, because it's nearly impossible to pull off. This is because the process of generating 1-bit sound must be cycle-exact, and therefore pretty much all existing beeper engines block the CPU. As the old saying goes: "When beeper plays, scroller must stop".
It's not all hopeless, though. If the game in question doesn't require a lot of computation-heavy logic or screen updates, then it's possible to run the necessary game code on note updates ("between the rows"). Interrupt-based engines like SpecialFX and Savage are well suited for this. It's also been demonstrated with Tritone. In fact there's a version of Tritone in z88dk which facilitates this.
299 2020-01-20 11:08:38
Re: 1-bit on the Vtech Laser210/310 and VZ200/VZ300 Z80 computers. (42 replies, posted in Other Platforms)
Engines using the pulse interleaving technique (Savage, Tritone, many others) most likely will not work on piezos. Pulse interleaving relies on inertia of the speaker cone, which is practically absent on piezos. So only engines using OR mixing (Squeeker, Squeeker Plus, PhaseSqueek, Squat) and maybe pin pulse engines will work.
That said, VZ also has tape out, right? I'd focus on using that for sound instead of the piezo.
300 2019-12-12 16:43:24
Re: Welcome to the 1-Bit Forum (aka The Introduction Thread) (49 replies, posted in General Discussion)
Ha, the VZ gang is growing Your SDL port of VZEM might come in very handy
Anyway welcome, great to have you aboard.