51

(10 replies, posted in Sinclair)

Thanks!

Will look into these issues.

52

(10 replies, posted in Sinclair)

Just finished it. Preparing the audio and video release with all the related stuff. In meanwhile, you can give it a listen with the loadable ZX Spectrum player.

There are 11 songs, all powered by the Ear Shaver EX engine and written with 1tracker. Half of the songs were sketched out while it wasn't EX and/or had less sub-engines, actually. Overall, the idea was to showcase the potential of this particular engine and the whole idea of per-row engine switching.

Edit:

YouTube
Soundcloud
Bandcamp

53

(7 replies, posted in Sinclair)

Oh, silly me, I just lost one line that is needed to make the tempo compensation work, when I was replacing the sample routing. Updated archive is in the first post.

54

(7 replies, posted in Sinclair)

There is auto correct from Phaser3, which is done at run-time instead of compile-time. I think I need to change it to the ESEX style, which had tempo correction at song compile time.

The resulting sample rate for drums should be 3500000/136=25735 Hz. WAV import resamples the source automatically.

55

(7 replies, posted in Sinclair)

P is 'pitch'. It is not really pitch per se, more like a filter of sorts, makes the sample sound more and more muffled. On some samples it actually feels like a slight pitch change, though. O is sample offset, a sample can be played not just from beginning, but starting from a later point, it helps to get more dynamics with the same sample.

56

(7 replies, posted in Sinclair)

Finally, it is here! It is much along the lines of Phaser3, but with many improvements.

- More synthesis options, including the recently discovered CrossPhase method and limited noise generation on either channel;
- A bit improved sample rate, with a trade-off that the border now shows white strips while playing;
- Sampled drums code from Ear Shaver EX, with volume, pitch, and offset controls.

Beware, it is an early version, not tested properly, so may contain some bugs/issues.

Edit: file replaced to fix one of the bugs found, tempo compensation for the interrupting drums.

57

(135 replies, posted in Sinclair)

RLA gets the topmost bit into the Carry after a logic operation XOR/OR/AND that normally does not affect Carry. Honestly, I forgot that I ever invented this method (perhaps borrowed it from you?).

Oh yeah, dithering applied to the 1-bit sound synthesis may bring some quite interesting results! Cool idea, never thought about that.

58

(135 replies, posted in Sinclair)

Some more cool finds for Phaser4 (currently in development) specifically:

Regular XOR/OR/AND modes in Phaser3 were:

    add hl,bc
    ld a,h
    add ix,sp
    xor/and/or ixh
    rla
    sbc a,a
    and 16
    out (#fe),a

Now, instead of xor ixh:rla we can do more by changing just two bytes - keeping the ix/iy prefix in place:

cp ixh:nop - the CrossPhase
adc a,ixh:add a,h - fat octaving noisy timbre
xor ixh:sub h - more noise in a similar timbre
xor ixh:sub l - very noisy yet still tonal timbre
xor ixl:sub h - periodic noise of one kind
xor ixl:sub l - periodic noise of another kind

And another cool thing is that Phaser3 unrolls the sound loop 4 times for pseudo volume effects. And we're not obliged to use the same 'algorithm' in each iteration, we can mix in any 4, getting even more weird timbres.

59

(164 replies, posted in Sinclair)

I still can't get rid of suspicion that AngelScript just does not happen to be very stable. Especially between platforms. Too bad it is too late to switch to something, and, well, back then I picked it because it shown very good speed among other script engines, plus it had C-similar syntax. These days Python would be a better bet, I guess, but alas.

60

(164 replies, posted in Sinclair)

Just tested it, no, ZXStandartExportOptions is called just once per row or F5 play on my end. To test it quickly, there is Print function, so

void ZXStandartExportOptions(uint format,bool rom)
{
Print("call");

will show each call in the log or the console window (I'm using a debug build with console enabled under Windows).

61

(164 replies, posted in Sinclair)

Wow. Maybe I'll just rework all the engines and interfaces to avoid the use of uint altogether, so it'll be int all around? I wasn't ever getting any segfaults or crashes under Windows, though.

Oh yeah, loopRow seem to be uninitialized in one of the branches in many engines. Damnit the mindless copy paste of seemingly working framework.

Assembler is intended to be called only once (function ZXStandartExportOptions in zxspectrum.1tl), but the assembler itself is a multi pass, not a single pass one.

62

(6 replies, posted in Sinclair)

Yep, I've had plans for Phaser4 recently, but it was to be more of an up-to-date version with the new better sampled drums, a noise mode, and such minor improvements. Now with CrossPhase it really worth to make. Will get to it sometime soon.

63

(135 replies, posted in Sinclair)

Named the second idea ModPhase, implemented both ideas as experimental sub-engines inside the Ear Shaver EX engine - because it blends pretty well with the design.

64

(6 replies, posted in Sinclair)

So, as I got more new ideas mentioned in the next gen engine ideas thread, I decided to test them out inside the Ear Shaver EX engine. Here is the update. It introduces two more sub-engines into the mix:


8: CrossPhase. Another kind of a Phaser1-like modulation engine, but a bit different both from Phaser1 and EarthShaker. It is a single channel mode, much like engine 6.

9: ModPhase. Provides two channels with always-on PWM modulation and modulation alteration via W column. T2 channel is louder than T1 channel.

The modulation alteration effect is better heard with long notes, it sounds kind of a mild guitar feedback.

Edit: updated it so ModPhases's default W always resets phase LFO, while other values keep it free running; phase LFO's are now separate and independent for both channels. This makes it more handy and versatile.

65

(135 replies, posted in Sinclair)

And if we just drop xor N right before cp d, it gives a quite interesting modulation control!

66

(135 replies, posted in Sinclair)

The idea above gives this simple PWM modulation type for the 16-bit adders system. It takes two 16-bit accumulators but a single adder:

    ld hl,0 ;acc1
    ld de,0 ;acc2
    ld bc,100 ;adder
    
loop

    add hl,bc
    ld a,h
    inc de
    cp d
    sbc a,a
    and 16
    out (#fe),a

    jp loop

67

(135 replies, posted in Sinclair)

Just come up with a dumb, but more controllable and thus usable PWM-like modulation idea:


    ld hl,0
    ld bc,100
    exx
    ld hl,0
    ld bc,201
    
loop

    add hl,bc
    ld a,h
    exx
    add hl,bc
    cp h
    exx
    sbc a,a
    and 16
    out (#fe),a

    jp loop

bc=100, bc'=100+detune is the regular PWM like drift, bc=100, bc'=bc*2+detune is one with octave etc, bc'=bc*4+detune is another octave, etc. Other not related values is kinda Earth Shaker'y, but not so much, a different kind of the sound.


Edit: I tested it out, and it actually matches exactly to Phaser1 in the resulting sound for any given adders I thought to test. Interesting.

Re-Edit: Nah, I messed up the previous test (was testing it inside Ear Shaver EX framework, and used a wrong pointer). It is really different both from EarthShaker and Phaser1! Hence giving this potential engine a name of CrossPhase, will add it as an Ear Shaver EX's update for now.

68

(135 replies, posted in Sinclair)

Yeah, I trying to get my head around it, but it doesn't really works the expected way. The inner adder works as usual, 3500000/t-states of inner loop/(65536/FREQ1). The outer adder is presumably 3500000*number of inner loop iterations/t-states of inner loop/(65536/FREQ2). However, when the second (modulation) frequency happens to be above the inner loop sample rate, i.e. a few phase changes should happen, it introduces another frequency into the equation, a kind of low frequency carrier, and the resulting frequency kinda gets unpredictable.

Not that it is useless anyways, but to make it usable from composer standpoint it is better to find a way to provide the secondary divider in a form better than a 0..65535 value per note.

69

(111 replies, posted in Sinclair)

I guess that's because there are too few people in the voting - about 50 total (offline/online), and half of them voting at the place, on pieces of paper, and some of them are not really understand what they're doing (people came here with their families), so it is easy to make mistakes.

One problem is that number of votes is different per each entry, some people chose not to vote for particular entries, and authors generally not voting for their own entries. So if I would vote for my own entry, I'd likely get 2nd with that tiny margin, hehe. As for lqm, I don't really know what it is.

70

(135 replies, posted in Sinclair)

One problem with it is that I still can't figure out the math required to control the modulation in a predictable way - without it a suitable modulator needs to be hand picked for each and every note. So yeah, maybe a variable rate offset will turn it into something more useful and controllable.

71

(111 replies, posted in Sinclair)

The results:

[ ZX Spectrum Beeper Music ]

1.   7.61   A Strange Game by utz ^ irrlicht project
2.   7.18   Synthetic Heartbeat by Ataritufty ^ 1bit Forum
3.   7.17   Noise In My Head by Shiru
4.   7.14   Cosmic_Puppy by AER
5.   7.06   Traffic Lights by Shiru
6.   6.04   Yo Yo Beep Beep by Ataritufty ^ 1bit Forum
7.   4.33   SAD Beeper by rnR T.A.D. 7E6 ^ s'ky killer's

72

(135 replies, posted in Sinclair)

I'm not sure if we ever used it somewhere, sometimes I'm forgetting all the tricks we've discovered prior. Anyways, a weird kind of modulation:

 add hl,bc
 ld a,h
 cp duty
 sbc a,a
 out (#fe),a
 ... 256 times

 each frame:

 ld de,1000
 add hl,de

I.e. each frame add another value to the accumulator. Different values produce various kinds of modulation, a good variety of those.

73

(111 replies, posted in Sinclair)

Yep, both of my tracks are Ear Shaver EX, and a few more to come sometime soon. I was trying to explore the possibilities of this particular engine and the potential of the whole engine-per-row approach. It is really promising indeed, although I'm thinking to EX it a bit more.

Totally, the strongest compo in years.

74

(111 replies, posted in Sinclair)

Complete results yet to come, as the prizegiving is going right at the moment, but congrats, AtariTufty (2nd with Synthetic Heartbeat) and utz (1st with A Strange Game)! Finally, utz's entry got a praise it deserves! My personal favorite this time was AER's Cosmic Puppy, though.

75

(111 replies, posted in Sinclair)

Yes, online voting is still open, results tommorow: https://events.retroscene.org/dh2023/beeper