Honestly, I personally don't really know, never examined these in depth. From what I can see I can say that Squeeker uses a stack-based set of 16-bit counters instead of the usual register-based counters. This approach also has been used in B'TMAN, generally it allows to have more channels than the number of register pairs allows, keeping most of registers free for other uses. It seems that these engines still use PFM, although I'm not sure how the channels are mixed. Probably the pulse widths either added or OR'ed, but the widths itself are greater than in 'pin pulse' engines, with chances to nearly reach a wave period when many channels produce a 'pin' at once, this creates the distinctive distortions.
476 2015-07-20 23:37:45
Re: Tutorial: How to Write a 1-Bit Music Routine (56 replies, posted in General Discussion)
477 2015-07-20 14:37:04
Re: Tutorial: How to Write a 1-Bit Music Routine (56 replies, posted in General Discussion)
I thought it is worth to add a simple visual explaination why exactly PFM (Pin Pulse, Narrow PWM) engines has weak low frequencies, why pulse interleaving does not have this issue, and how PFM is used to imitate volume levels.
Here is a graph of normal square wave of some duration. It has output high one half of the time and low the other half of the time. Let's count the 'cells' when the output is high, marked by orange. It is the output 'energy', or 'power', that is also percepted as 'volume'. 8 of 16 cells is 'active' here, this is max energy level possible for a wave.
Now let's take a square wave of lower frequency and the same duration, and count the 'acitve' cells again. It is the same number, 8 of 16 - despite the different frequency, square wave maintains the same energy level.
Now let's take a 'pin pulse' wave of the same frequency as in the first example. See, there is just 4 cells 'active' - just a half of the energy that a square wave of this frequency would have.
And now let's see a 'pin pulse' wave of lower frequency, the same as in the second example. Just 2 cells 'active' - less than the higher frequency pin pulse wave has, and way lesser than square wave would have.
These examples shows that a pulse wave with duty cycle less than 50% yields less energy in lower frequencies, and this difference grows up as the duty cycle gets lower. 'Pin pulse' engines has very low duty cycles, like 1%, so it is very noticeable.
How to overcome this? One solution is to play a few desynced pin pulse waves on lower frequencies. This will give 'phasing' effect, but also will add more energy to the low end. Another solution is to make pulse width dependent from the frequency, increasing the width for lower frequencies. It is somewhat difficult to implement in Z80 sound engines, but a rough version of this is seen in the Special FX/Fuzz Click engine, which has one channel louder than another - that's because it just has wider pulses, and it makes it more suitable to play bass notes.
478 2015-07-12 12:25:09
Re: plans for a 1-bit forum contest (16 replies, posted in General Discussion)
Is the point of launching a contest shortly is to bring more members on the forum? Because at the moment there is clearly not enough people even for one category.
479 2015-07-10 14:14:16
Re: 1bit web radio (10 replies, posted in Sinclair)
To begin with, it has been developed in ~1998 for Amiga, way before accuracy in emulators became important and even possible.
The main flaw of the format, though, is that it does not actually consider ZX Spectrum enviroment, i.e. there is no BASIC ROM in the emulated memory space by default, and most of beeper music players rely on having it in place. If you don't take it into account while ripping/converting music, it may easily get the drum sounds changed, or lost them althogether. Or, in worst case, all timings will be screwed up (Special FX/Fuzz Click engine has this issue), or code won't work at all (ROMBeep is an example). To make it work correctly, you need to include portions of the ROM into AY file, so you need to determine which portions actually used, which is not so easy, as to do this you need to understand how an engine works. Alternatively, to save your time, you can include whole ROM (in fact, if I remember correctly, it is not even possible, first two bytes will be missing anyway), and basically redistribute a copy of it with every AY file.
All this could easily be avoided would the format specs were explictly saying that memory space should have ROM pre-loaded (distrubuted with players, not with music).
There are other things that could be improved and cleaned up as well.
480 2015-07-10 07:20:34
Re: 1bitstudio - a bundle of VST plugins (27 replies, posted in Other Platforms)
Another fun addition to the bundle, a 'drum' synth that generates 'loading noise' (ZX Spectrum kind). Inspired by the quite unforgettable psb's Tap Music.
481 2015-07-08 21:56:46
Re: Spectrum sound hardware question (1 replies, posted in Sinclair)
Yes, the HW only allows to set it to 0 or 1, so all sound code rely on this. Toggling, if needed in a particular code, is always done in software.
482 2015-07-08 17:29:17
Re: 1bit web radio (10 replies, posted in Sinclair)
One thing I should say about using .ay files for collection purposes: it don't really suits for beeper music. I believe a new better format should be developed, at very least the old standard should be updated, before making a new music collection. Including copies (complete or partial) of the ROM into each file is really a major format design flaw. It also wouldn't hurt to add support for expanded memory and all extra sound devices ports (Covox, SD, etc), to store custom digital music and things like that.
483 2015-07-08 10:41:14
Re: 1bit web radio (10 replies, posted in Sinclair)
Does not seem much different, the same number of actions:
- Load .bbsong into Beepola
- Export WAV
- Encode into MP3
- Upload MP3
- Load .bbsong into Beepola
- Export .bin
- Convert .bin with a tool into .ay
- Upload AY
Also, with simplistic approach these AY files wouldn't be suitable for publishing, as each one would have to contain copy of ZX48 ROM, so they would only be useful as intermediate container for MP3 conversion.
484 2015-07-08 05:21:54
Re: 1bitstudio - a bundle of VST plugins (27 replies, posted in Other Platforms)
Another update. phasesynth's Detune range changed from +/- whole tone to 0..octave (with fractional numbers), this allows not just to detune it slightly, but to certain number of semitones, giving more flexibility. noisedrums added, these are simple noise-based drums with some PWM.
485 2015-07-07 11:43:38
Re: testing some new tricks... (7 replies, posted in Sinclair)
I thought why not to actually put the idea I explained above to the test, so here is proof-of-concept. I wouldn't say it sounds better, but it gives somewhat different timbres.
486 2015-07-07 11:14:10
Re: testing some new tricks... (7 replies, posted in Sinclair)
Interesting, so it is in fact one of the particular cases of what Phaser engine could do (duty control when phase reset is enabled).
More tricks the better, as they tend to sound different.
487 2015-07-07 08:23:44
Re: testing some new tricks... (7 replies, posted in Sinclair)
Haven't look into the code, but an idea for volume control I had and never tried to implement is an evolution of what has been used in Tritone: mix channels by interleaving them, but change amount of time each channel takes. Time the code in a way that it does few outputs of each channel per one loop (or maybe few copies of the loop), and force some of these outputs to zero to attenuate the channel. I.e. we have channels A and B:
ABABAB full volume
ABAB0B mid A volume
AB0B0B low A volume
and so on.
Judging by the carrier tone that is heard in the test50.sna, is it something similar to the idea?
488 2015-07-03 22:13:07
Re: 1bitstudio - a bundle of VST plugins (27 replies, posted in Other Platforms)
The bundle is updated. Minor fixes, two synths optimized, two new synths added - one Earthshaker-like (I love that sound), another with customizeable 1-bit waveform. Download link is the same.
489 2015-07-03 01:19:28
Re: 1bitstudio - a bundle of VST plugins (27 replies, posted in Other Platforms)
Here is a demo track written by theandroidvision. It only uses few plugins of the bundle, and does not have any extra instruments or processing: https://soundcloud.com/theandroidvision … o-vst-demo
490 2015-07-02 08:04:31
Re: 1bitstudio - a bundle of VST plugins (27 replies, posted in Other Platforms)
It will be 32-bit floating point music right off the bat, even with a single plugin, because that's how VST standard works. Yes, this is certainly not a purist thing, it is more of the 'fakebit' kind.
491 2015-07-02 01:32:07
Topic: 1bitstudio - a bundle of VST plugins (27 replies, posted in Other Platforms)
Fresh stuff just in time for the new forum opening.
This is a bundle of VST plugins aimed for different kinds of 1-bit sound synthesis and processing. It includes six plugins, two of them for processing, two drum synths, and two tone generators, covering majority of the 1-bit sound types. Comes with source code.
492 2015-07-01 19:40:11
Re: 1-bit music on GameBoy (7 replies, posted in Other Platforms)
To my knowledge, no, there is no access time limitations for sound registers. It is a common 'feature' (or rather an issue) of FM synth chips, but I can't remember any PSG type chip that would have this limitation.
493 2015-07-01 11:38:42
Re: 1-bit music on GameBoy (7 replies, posted in Other Platforms)
GB having Z80 is actually a common misconception. In fact it is Sharp's custom CPU that is a 8080 derivative (like Z80) and has a small fraction of Z80 extra features, but that's it. Porting Z80 code to GB CPU is about as complex as porting Z80 code to 8080 - difficult, ineffective, but has been done before.
The worst thing about GB CPU regarding 1-bit music is that is has just as many registers as 8080, i.e. it completely missing Z80's alternative register set and index registers - this will have impact on possible number of channels. Worse than that, it also missing 8080's EX DE,HL opcode that is very useful in beeper engines, and there is a major HW bug with all 16-bit increment/decrement opcodes that leads to sprite display corruption.
Still, it is certainly possible to do something, especially for CGB that has about twice more CPU horsepower, but in general the platform is not very suitable for this kind of things, so it won't perform as well as Z80-powered systems.