| |
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 |
|
| |
ready.
Registered: Feb 2003 Posts: 441 |
about point 3: the NyquistShannon sampling theorem says that if you want to reproduce a sampled signal, the sampling frequency fs must be at least twice the bandwidth B of the signal. So, considering that an audio signal frequncy spectrum goes from 0 Hz to B Hz:
fs > 2 * B
so, once you selected the sampling freq fs at which each sample is reproduced, you must apply a low pass filter to your audio signal that cuts all frequencies higher that fs/2.
If you don't do so, you will hear the effect of aliasing, which sounds much like unwanted noise.
sorry no idea about point 1 & 2
my 2 cents. |
| |
TWW
Registered: Jul 2009 Posts: 545 |
Quote: about point 3: the NyquistShannon sampling theorem says that if you want to reproduce a sampled signal, the sampling frequency fs must be at least twice the bandwidth B of the signal. So, considering that an audio signal frequncy spectrum goes from 0 Hz to B Hz:
fs > 2 * B
so, once you selected the sampling freq fs at which each sample is reproduced, you must apply a low pass filter to your audio signal that cuts all frequencies higher that fs/2.
If you don't do so, you will hear the effect of aliasing, which sounds much like unwanted noise.
sorry no idea about point 1 & 2
my 2 cents.
Alright, let me see if I got that right:
After deciding what frequency i will do the playback;
-> Remove all frequencies from the sample which are at 2x the playback frequency (i.e. if playback is at 20kHz, the sample should not conatin any audio signal higher then 40 kHz).
Instead of applying a LP-Filter for post processing is it possible to sample only certain frequency span (0-40Khz f.ex) thus eliminating the need for a LP filter later?
I guess this falls back to question #1...
EDIT: I found a software program called "Wavosaur" (suitable name don't u think^^) where I can play around with filters, samplerates and bit-width.
I have a sample 22050 Hz / 8 Bit Mono. However lower bit rates isn't supported so I still need to convert the 8 bit into a 3 bit.
The output file is .wav so I believe it uses signed numbers for presenting the data. For converting the sample I would have to ABSolute the data first, then multiply a factor of 3/8 to the result and voilla, 3 bits scaled representation... IMHO, this is probably a really bad way to do it and there is for sure some 'better result' yielding way? |
| |
The Human Code Machine
Registered: Sep 2005 Posts: 112 |
For resampling I use the free r8brain, but I also didn't find a good tool to change the bit depth to any bit depth. Most tools only support 16 bit and 8 bit depth. You can lower the bit depth yourself by dividing the sample value by 2 for each bit. So a simple LSR should do the trick. My Mod-Converter adds a random dither while lowering 8 bit to 7 or 6 bit, but I don't know, if this helps at 3 bits. Forgot this link: Soundslogical Resampler but the demo download link is broken. Optimal would be a tool supporting noise shaping and or dithering.
|
| |
ready.
Registered: Feb 2003 Posts: 441 |
@TWW: no, it's the other way around: if playback is at 20kHz, the sample should not conatin any audio signal higher then 20/2=10 kHz
"sampling only certain frequency span" is exaclty what a filter does, so you end up needing the LP-filter.
|
| |
TWW
Registered: Jul 2009 Posts: 545 |
@ The Human Code Machine: A LSR would yieald 4 bits so still I'm 1 bit short. But I get your drift. Find the shrinkage factor and do it.
But I came to the same conclusion as you, more then just raw shrinkage (^^) needs to be applied to get a good result.
Has anyone had the chance to try out "Soundslogical Resampler"? It states it can handle various bit-width but ofcourse the demo is screwed. I don't mind dishing out some 20-30 $ (good echange rate anywasy) for it but would like to know if it works first...
@ Ready:
Alright, I got it now 8-D. Sample in "X"kHz but no sounds higher then "X/2"Khz for cleanest sound playback (hence the LP filter). It seems this can be post processed though in the proggie i mentioned above. If not I'll ask again^^ Thanx! |
| |
SIDWAVE Account closed
Registered: Apr 2002 Posts: 2238 |
why all this complicated stuff ?
soundforge, wavelab, audition - save as 4 bit unsigned raw.
(or save as 8 bit unsigned raw 8000 hz (THE old way)
convert to 3 bit in realtime on c64 with some code.
those programs resample as it shall be done, and so you dont have to do anything of that. |
| |
ready.
Registered: Feb 2003 Posts: 441 |
@rambones: I am 99% sure most of those programs have automatic functions for "clean" re-sampling (i.e.: built in LP-filter and everything), but I just wanted to point out the theory, just in case TWW or others wanted to do the re-sampling in their own way.
I am working on a sound sampler for user-port and noticed the importance of the LP-filter for getting rid of aliasing noise. |
| |
The Human Code Machine
Registered: Sep 2005 Posts: 112 |
@TWW For each bit less you'll need one LSR. If you want convert 8 bit samples to 3 bit samples you'll have to LSR 5 times. |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
and remember to save them as unsigned before, or that shifting stuff will give you something like nu metal =) |
| |
TWW
Registered: Jul 2009 Posts: 545 |
THCM:
5 LSRs?
8 bit sample gives an unsigned number between 0 to 255
3 bit sample gives an unsigned number between 0 to 7
so if the value = 161 in 8 bit the value in 3 bit should be equevivalent to:
161/255*7 = 4
If you take 161 and do 5 LSRs you get: 5
So I don't think it's entirely accurate to do it this way. I could how ever be terribly wrong here :) (it has happened before^^)
@ rambones: Can you also save in 3 bit? (25% less space right of the bat^^) |
... 14 posts hidden. Click here to view all posts.... |
Previous - 1 | 2 | 3 - Next |