[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [pygame] Screeching, Howling Garbage in One Ear pygame.sndarray



andrew baker wrote:
Howdy,

I'm trying to build a stereo tone generator module. It sort of works, but I'm getting hellacious garbage noise in the left channel.

Here's a greatly simplified version of my code (the function definition is the same, but I've condensed my main):

def tone6(limit = 2770, length = 17960, granularity = 10, phones = 2, envelope = 10, attack = None):
switch_amplitude = 1
cur_level = 0
out = []
for l in range(0,length):
if abs(cur_level) >= limit:
if switch_amplitude == 1:
switch_amplitude = -1
elif switch_amplitude == -1:
switch_amplitude = 1
cur_level += switch_amplitude * granularity
out.append([cur_level,cur_level])
print "sa", switch_amplitude
return Numeric.array(out)


pygame.init()
pygame.mixer.init(11025, 16, 1)

channels = []
channels.append(pygame.mixer.Channel(0))

if not channels[0].get_sound():
                channels[0].play(pygame.sndarray.make_sound(tone6()))

The array out in the function tone6 outputs values:
array([[ 10,  10],
 [ 20,  20],
 [ 30,  30],
 [ 40,  40],
 [ 50,  50],
 [ 60,  60],
 [ 70,  70],
 [ 80,  80],
 [ 90,  90],
 [100, 100],
...snip...
 [350, 350],
 [360, 360],
 [370, 370],
 [380, 380],
 [390, 390],
 [400, 400],
 [410, 410],
 [420, 420],
 [430, 430]])

Not sure what I'm doing wrong here. Wrong scale of numbers? Wrong array format? I'm quite stuck at the moment. Someone please educate me.

Thanks a bunch,

--
Andrew Ulysses Baker
"failrate"
also, sorry for all the replies,
but the line
   for l in range(0,length):

would be faster if you said
l = 0
while l < length:
   l+=1

I believe,
because then python doesn't have to generate an array of integers
that's (length) long, which is what the range() function does in the for loop version.
That way it just uses a single variable so it should use less memory and execute faster.
Hope that helps.
-Luke