Hi!

I improved the pwmsound-example that was part
of the pwmdemos. Now it is called pcmsound,
since we are dealing with sound (PCM = Pulse Code
Modulation) :-)

The improvents are:

o using ulaw-decoding for a better sound quality
o volume can now be controlled by a second fifo

It shouldn't be too complicate to do a full sound driver,
so that you can even play games or hear to mp3-files
using xmms :-)

Ok, soundcards are so cheap and are giving you a much
better sound quality, but my motivation for doing this
would be to have a rather impressive demonstration for
what is possible with RTL (RTAI as well, of course) -
next CeBIT is comming soon :-)

Download:



Bernhard





Syntax:
   insmod pcmsound.o [soundfifo=<number-of-soundfifo>] [\
                      period=<period-in-nanoseconds>] [\
                      oversampling=<oversampling>] [\  
                      gain=<gain>] [\
                      gainfifo=<number-of-gainfifo>]

Decription:

This demo was inspired by the original "rtl-sound demo"
from Michael Barabanov, but instead of just
altnating the level of the PC-speaker according
to positive or negative waves (aka 1-Bit DA-Converter),
here we do an oversampled pulse width modulation.
As a PC-Speaker acts like a low pass filter, the
disturbing base-frequence will be unhearble.



Therory of operation:

The sound data will not only be converted to "0" or "1"
every period like it is in the original example, but
into a pulse width modulated signal (PWM):

value  t_off   t_on
====================
-127  100.0%    0.0% 
-126   99.6%    0.4%
 ...    ...     ...
  -1   50.4%   49.6%
   0   50.0%   50.0%
   1   49.6%   50.4%
 ...    ...     ...
+126    0.4%   99.6%
+127    0.0%  100.0%

Consequently, sound quality is (or at least: should be)
much better, maybe comparible to a DAC with 8Khz and
6 Bit - but your mealage may vary :-)

Note: with a beeper, the sound is rather bad, since
it doesn't act as a low-pass filter like a real speaker.

Installation:

Put your "rtl.mk"-file into this directory and type "make".
Then, insmod the new module and send some *.au-files
to /dev/rtf0, like you would do it with the original
PC-Speaker sound example included in RTL2.0:

cat linux.au > /dev/rtf0

BTW: "linux.au" has rather bad quality ... so try some more files
to recognice the accustical difference between /dev/audio and
/dev/rtf0 (both, (RTL2.0-)sound.o and pwmsound.o).
Be sure that you have write access to the fifo.

Before sending a *.au-file to a fifo, check if it is
in ulaw, 8KHz, mono format with "play" (is part of the
sox-package): play -V <soundfile.au>


Controling Volume:

do a

echo -ne "\040" > /dev/rtf1  # or selected gainfifo

to change the volume "\010" is nominal.
--- [rtl] ---
To unsubscribe:
echo "unsubscribe rtl" | mail [EMAIL PROTECTED] OR
echo "unsubscribe rtl <Your_email>" | mail [EMAIL PROTECTED]
----
For more information on Real-Time Linux see:
http://www.rtlinux.org/~rtlinux/

Reply via email to