| |
TWW
Registered: Jul 2009 Posts: 545 |
Converting samples to 3 bit
What I want to do:
Play a 3 voice SID tune - while using the 3 LSB's of $d418 to play samples simultaniously (3rd bit of $d418 always set so one always hear the tune).
Problem:
#1: Making samples <- Suggestion for FW/PD tool to make samples with (win7x64).
#2: Converting the sample to 3 bits from however bit-width it was greated from tool in #1 <- The correct mathematical way or a converter to do it.
#3: Any good tip on how to make the samples as "clean" as possible in addition to higher sample frequency? (i.e. any pitfalls I should try to avoid like sampling with too high bit-width or such(which might lead to a bad conversion etc.))? <- Yeah I totally don't know what I'm talking about here in #3 so bear with me 8-D
/TWW |
|
... 14 posts hidden. Click here to view all posts.... |
| |
TWW
Registered: Jul 2009 Posts: 545 |
Alright. I guess that's sorted then :)
Thanx to all involved and taking the time to reply! |
| |
ready.
Registered: Feb 2003 Posts: 441 |
but back to the original problem of not hearing the SID when $d418 = 0. Is it really a problem? I haven't tested but the zero would be played for just a very short period of time (sampling time), and would hardly be noticable. |
| |
TWW
Registered: Jul 2009 Posts: 545 |
If I understood you correctly;
The point of doing 3 bit samples is that you can have the 4th bit (bit #3) set at all times, thus making any sound produced by the SID hearble even though you use the 3 LSBs (bit 0, 1 & 2) to modulate samples. This will effectivly give you 3 sid voices + 1 "3 bit sample voice". i.e. $d418 would never be zero but instead range from 8 to 15 depending on sampledata.
If I didn't understand you correctly: What? |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
that idea is somewhat broken, what you really should do is simply use 4 bit samples and be done with it, there is no need to sacrifice that one bit at all. |
| |
TWW
Registered: Jul 2009 Posts: 545 |
Alright. I'll do some testing on the whole matter and see what I come up with. I do however see ready.'s point of $d418 being 0 during sample playing but then again how much does it matter?
Let's for the sake of argument say that it is a problem for a sid-tune playing at the same time. with 4 bit samples you could then probably do "lsr + ora #$08" and get away with it (yes this is one thing I'm gonna test soon(tm)).
If this is the case, why not just have the sample in 3 bits to begin with (Maybee even processed a bit better then a straight lsr) and then gain a 25% memory boost in the process?
Or maybee I should just shut up and test it 8-D |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
the point is that the average level of an audio sample is pretty much exactly half its amplitude. so playing a 4 bit sample along a sid tune practically equals playing the sid tune at half volume. now if you reduce the sample to 3 bits and offset it by 8 (by setting bit 3) that will equal playing the sid tune at 75% original volume.
so you are really trying to solve a problem that does not exist, you are only making it worse =) |
| |
GT Account closed
Registered: Sep 2008 Posts: 308 |
ORA #8
Done. |
| |
linde
Registered: Jul 2006 Posts: 47 |
So you want to store them in three bits per sample? That's a minimal memory gain in most cases I think, (you could try some 1-bit linear encoding instead) but if you really want to try, I could make a tool to convert 8 bit raw to 3 bit raw. |
| |
TWW
Registered: Jul 2009 Posts: 545 |
Ok I see that 4 bits is sufficient in most cases.
But for the share fun of it, It would be fun to try the 3 bit approach yielding 75% volume (on average) vs. the 50% vulume (avg.) achieved through 4 bit.
I "picture" the samples to be stored in layers over the same bytes (Yeah I know that sounds weird) like this:
11122233 34445556 66777888 11122233 34445556 66777888 etc.
So if I want to play sample #1:
lda byte 1
and #%11100000
sec
rol
rol
rol
rol
sta $02
lda $d418
and #$f0
ora $02
sta $d418
or if the hi-nybble of $d418 is known at playtime:
lda byte 1
and #%11100000
sec
rol
rol
rol
rol
ora #$X0 // Hi-nybble
sta $d418
Then increase the byte-fetcher with 3 and do again. An index-table would be faster to use if cycles are an isse vs. memory (as usual^^)
@ Groepaz: I like making problems (hehe). But seriously imho it's a quality vs. memory+slightly higer volume issue(maybee^^)
@ Geir: yes agreed for 4 bit playback.
@ Linde: A cross platform tool for prepping the samples would be cool if it uses a "better" aproacht (dithering or noise shaping?) then just dividing each byte with 32 (5 X LSRs). If this wasn't what you had in mind, it would be easy to da a straight converter tool on the c64 to convert from 4 bit or even 8 bits Unsigned RAW (if memory is enough). |
| |
algorithm
Registered: May 2002 Posts: 705 |
I would not bother with the 3 bit conversion. Even though the samples will use less space, it is more awkward for the bits to be extracted from packed bytes as well as the noise involved.
As the samples are updated thousands of times per second, there is less likelihood of muting the other audio if using the traditional 4 bit method
Severe issues ofcourse is that the digi's will be near or enough quiet on a new sid chip (unless using one or more channels to boost the digi)
I would recommend 8 bit all the way with compression (vq and/or delta modulation) but of course this method uses sid channels |
Previous - 1 | 2 | 3 - Next |