Close

e.g.4: interleaving audio - 3 minutes on a floppy

A project log for Floppy-bird

Use a floppy-disk as a multi-frame-buffer, store audio-samples, and increase capacity to boot!

eric-hertzEric Hertz 09/29/2018 at 17:310 Comments

New idea....

This part's been discussed in previous log[s], but a little background before launching into my new idea. 

I'm not certain, but it seems feasible that individual PWM-nibbles may be rewritten. 

This is exceedingly difficult with normal MFM storage techniques, in part because even the slightest shift in timing might cause what appears to be a different bitstream than intended. 

E.G. (neglecting MFM's encoding for a second, and merely taking into account that each *data* bit is represented by *two* MFM bits): Say you have the data 10 00 10 and want to change the 00 to 10. Now the write-head is *very-slightly* misaligned (to the right) with respect to the read-head, and instead we get the pattern 10 01 00. NOT AT ALL our intended 10 10 10. That spatial-shift to cause that may be only 1/4th of a bit-duration, the data may in fact be recorded correctly! It's merely slightly-shifted. (TODO, draw some friggin waveforms!)

(There are *many* other reasons why this'd be exceptionally difficult, but let's start with that.)

However, These PWM-nibbles have a very large spatial buffer on the trailing-end, in order to assure no two flux-transitions occur too closely-together as to interfere with each other. That's the trailing-end's sole purpose. It contains no data, and its edge, at the end, is really indicative of the *start* of the *next* PWM-nibble. So, realistically, that buffer could vary in length and not affect the stored data.

(Man, this could turn into a great write-up, with graphics... I think I did, sorta, in a previous log)

So, with PWM-data all that matters is the temporal displacement between the rising-edge at the start of the PWM-cycle and the falling-edge inbetween two cycles.

BAM: it might be possible to overwrite a nibble anywhere on-disk.

Sheesh, I haven't even gotten to my new idea for audio-recording. That starts NOW:

---------

Each track spins under the head 5 times per second.

PWM-nibbles are (presently) 5us long. 

Somewhere in there I think that correlates to 200KS/s.

Audio CDs are only 44.1KS/s... so we could easily store nearly a second of audio on each track at nearly CD quality.

(Well, 4-bit, instead of 16-bit *technically*, but we're talking PWM, here, not Data, and there's nothing limiting it to 16 discrete PWM values *except* when used for *data*... And even there, I believe I'm being conservative. This then being somewhat of a discrete-time, analog-value system, when used for audio).

OK... but how do we get 1 second of playback from a track which repeats itself every 1/5th of a second...? (Yahknow, obviously I'm trying to do this in realtime, no RAM buffer)

So... simply, interleave PWM nibbles. The first cycle will store at nibbles 0, 5, 10... The second at 1, 6, 11... Third at 2, 7, 12...

Which is really only possible (recording-wise) due to the huge buffer at the end of each nibble.

It Might Be Doable.

Now, how does this effect our simple playback circuit (previously consisting of nothing more than a 7474 flip-flop and a transistor connected to a speaker)? We'll need to add a counter 74163, I think... Two, actually (maybe two 4017s would be easier). An AND gate... (with output-enable?) And a capacitor to hold the value at the transistor's base. Hmmm, *plausible*, anyhow.

Anyways, it's just another possible tangent. That'd give 80 seconds of recording time on each side, near CD quality, mono.

Lessee, 44.1KS/s * 2Bytes (mono) = 88.2KB/s, 1.44MB per disk, I think that'd only be 16 seconds if stored normally...

Of course what is this "near CD quality"?

Well, if we neglect the analog nature of PWM, and go back to nibbles, each PWM-nibble is 4 bits of data, so, I suppose a slightly different system could be desinged using 4 nibbles to make a 16-bit sample... then we're back to roughly 1/5 second stored on each track, so a little more than 12 seconds(?) of actual CD-quality audio per side, 24ish total... sure beats 16... but, again, no sector-overhead nor error-*detection* as on a regular storage method (MFM, FAT), so... those numbers don't actually sound all that impressive. Bah! But, all it takes for playback is a handful of TTL components, that's kinda cool, no? 

And, if you wanna see the real numbers of this PWM-nibble storage method, look elsewhere in the past, (Project-Description? Log?) I think I came up with 3.2MB unformatted with PWM-nibbles, compared to 2MB unformatted with MFM.

And, again, I'm pretty sure I've been rather conservative in this design. 5bits, or even 6 should be reliable per PWM cycle, with a faster processor (I plan to use an AVR at 20MHz, leaving a 1cycle buffer between consecutive PWM-values).

Discussions