On 01/02/2012 02:24 AM, Paulo da Silva wrote:
Em 30-12-2011 10:05, Dave Angel escreveu:
On 12/30/2011 02:17 AM, Paulo da Silva wrote:
Hi,
Sorry if this is a FAQ, but I have googled and didn't find any
satisfatory answer.

Is there a simple way, preferably multiplataform (or linux), of
generating sinusoidal/square waves sound in python?

Thanks for any answers/suggestions.
If you're willing to be Linux-only, then I believe you can do it without
any extra libraries.

You build up a string (8 bit char, on Python 2.x)  of samples, and write
it to  "/dev/audio".  When i experimented, I was only interested in a
few seconds, so a single write was all I needed.

Note that the samples are 8 bits, and they are offset by 128.  So a zero
signal would be a string of 128 values.  A very quiet square wave might
be a bunch of 126, followed by a bunch of 130.  and so on.  And the
loudest might be a bunch of 2's followed by a bunch of 253's.

You'll have to experiment with data rate;   The data is sent out at a
constant rate from your string, but I don't know what that rate is.


This sounds nice, but then is 8 bits the limit for /dev/audio? What
about stereo? I don't need this one ... just for curiosity.
Thanks.
I don't even remember where I got the information, but it sufficed for my needs. I wanted to be able to generate arbitrary tones at a high volume, bypassing any volume control system settings. I assume there's some way (ioctl ?) to tell the device to interpret differently. It's even possible that it's already stereo (left/right samples stored in adjacent 16bit locations -- it wouldn't change the effect I hear, except for the frequency being cut in half.

Interesting link from1991, it's from Guido, but doesn't mention Python
http://wiretap.area.com/Gopher/Library/Techdoc/Misc/audiofor.faq
Also, a lot has changed since then.

Now I wonder whether I should be sending u-law values, rather than linear ones. I'm generating sine waves, and they don't really sound flutelike.

This link probably has all our answers.
http://www.faqs.org/docs/Linux-HOWTO/Sound-HOWTO.html

I suspect that my approach will simply use the latest setup values (eg. sampling rate) and thus runs the risk of sometimes not working. That hasn't been my experience, The only problem I see is that sometimes the device is "busy". When that happens, other programs don't seem to work either. I need to find the rogue process which is hogging the device, using fuser.

--

DaveA

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to