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

Re: [pygame] BUG in make_sound()?



Here's an attachment.


On Wed, May 13, 2009 at 9:15 PM, René Dudfield <renesd@xxxxxxxxx> wrote:
> hi,
>
> thanks for the awesome bug report.
>
> Is it possible you could send me the file as an attachment?  The email seems
> to have messed with the formatting.
>
> cheers,
>
>
>
>
> On Fri, May 8, 2009 at 8:31 AM, Brian Brown <brobab@xxxxxxxxx> wrote:
>>
>>
>> ###################################################################################################
>> # A Pygame BUG Report: (Bug found about May 2009)
>> #
>> #  To Pygame People:
>> #
>> #   (Best when viewed with a monospaced font.)
>> #
>> #   I think I found a glitch/bug . . .
>> #
>> #      pygame.sndarray.make_sound() sometimes returns a "channel"?
>> #
>> #   Below is a program that can possibley re-do the glitch.
>> #
>>
>> ###################################################################################################
>> #
>> # requirements to run:
>> #          (python 2.5 or higher)?
>> #    and:   (pygame 2.8.0 or pygame 2.8.1)?
>> #    and:    (numpy)?
>> #
>>
>> ###################################################################################################
>> #
>> # On my computer:
>> #
>> #   The glitch was found with:  (python 2.5.2 + pygame 2.8.0 + numpy
>> 1.2.1)  and:  (python 2.6.2 + pygame 2.8.1 + numpy 1.3.0 ).
>> #
>> #
>> #   after a while of running (About 2 to 10 minutes), this program
>> closes and give one of these errors?:
>> #
>> #      This one:         TypeError: argument 1 must be
>> pygame.mixer.Sound, not Channel           <--(common)
>> #
>> #      Or this one:      Fatal Python error: (pygame parachute)
>> Segmentation Fault                   <--(rare)
>> #                         This application has requested the Runtime
>> to terminate in an unusual way.
>> #                           . . .
>> #
>> #   (I did a google search to see if anybody else had discovered this
>> glitch--
>> #     But-- I didn't find any pages about it . . . )
>> #
>>
>> ###################################################################################################
>> # My computer stats:
>> #
>> #   Windows Vista Home Premium
>> #    Service Pack 1
>> #     win32/32-bit Operating System
>> #      Processor:     Intel(R) Pentium(R) Dual CPU E2180 @ 2.00GHz 2.00
>> GHz
>> #       RAM/memmory:   3.00 GB
>> #
>>
>> ###################################################################################################
>> #
>> # Here's the program:
>> #
>>
>> def HE_HE_init():
>>    global screen
>>    global screen_x_size
>>    global screen_y_size
>>    global channel_max
>>    if sys.platform == 'win32' or sys.platform == 'win64':
>>       os.environ['SDL_VIDEO_CENTERED'] = '1'
>>
>>      # init the pygame.mixer according to the pygame version number:
>>    versiony_numbery = pygame.version.vernum
>>    numby = int(str(versiony_numbery[0]) + str(versiony_numbery[1]) +
>> str(versiony_numbery[2]))
>>    if numby >= 181: pygame.mixer.init(44100, -16, 1)
>>    else: pygame.mixer.init(22050, -16, 2)
>>
>>    pygame.init()
>>    random.seed()
>>    channel_max = 5
>>    pygame.mixer.set_num_channels(channel_max)
>>    screen_x_size = 640
>>    screen_y_size = 480
>>    screen = pygame.display.set_mode((screen_x_size, screen_y_size))
>>    pygame.mouse.set_visible(1)
>>    pygame.display.set_caption('BUG? --> pygame.sndarray.make_sound() <--
>> BUG?')
>>    pygame.display.flip()
>>
>>
>> def Lets_ROLL():
>>
>>    previous_channel = None
>>
>>      # Some    frequencies/Hz/Cycles-per-second: (ABCDEFGs)
>>    noteyish = (440, 493.883, 261.626, 293.665, 329.628, 349.228, 391.995,
>>                 440*2.0, 493.883*2.0, 261.626*2.0, 293.665*2.0,
>> 329.628*2.0, 349.228*2.0, 391.995*2.0,
>>                  440/2.0, 493.883/2.0, 261.626/2.0, 293.665/2.0,
>> 329.628/2.0, 349.228/2.0, 391.995/2.0
>>                 )
>>
>>    t = time.time()
>>
>>
>>
>>
>>    while True:   # <-- Main loop
>>
>>
>>         # Keep program from  running/executing  "too fast":
>>      while t > time.time(): pass
>>      t = time.time() + 0.10
>>
>>
>>
>>      screen.fill((0, 0, 0))
>>
>>
>>         # Close the  window/program  if:  [Esc is pressed]  or:  [The
>> X button is pressed]
>>      key = pygame.key.get_pressed()
>>      if key[K_ESCAPE]: END()
>>      for event in pygame.event.get():
>>        if event.type == QUIT: END()
>>
>>
>>       ##### generate/create  and  display/draw  numpy_sound_data: #####
>>
>>      total_duration_in_seconds  = .25
>>      samples_per_second          = 22050
>>      total_amount_of_samples      = total_duration_in_seconds *
>> samples_per_second
>>      cicles_per_every_second   = noteyish[int(random.random() * ((7 *
>> 3) - 1) )] #440.0
>>      numpy_sound_data =  array([0] * int(total_amount_of_samples))
>>
>>
>>         # setup some variables for  drawing/displaying  numpy_sound_data
>>      x = 0
>>      y = 200
>>      x_dividey = 10
>>      y_dividey = 1000
>>      y_addy = 200
>>      x2 = 0
>>      y2 = 400
>>      x2_dividey = 2
>>      y2_addy_addy = 200
>>
>>
>>         # yyygr  should cause a "slight" "waver" in the
>> frequencies/Hz/Cycles-per-second
>>      yyygr       = 0.00001
>>      yyygr_speed = 0.0
>>      #yyygr_speed = (0.0005 / 2.0) - random.random() * 0.0005
>>
>>      specialy = len(numpy_sound_data) - 1
>>      specialyy2 = specialy - 1000
>>      specialyy3 =        0 + 300
>>      if specialy > 2000: specialy -= 2000
>>
>>      for n in range(0, len(numpy_sound_data)):
>>
>>           if yyygr < 0:
>>             yyygr_speed -= 0.0000005
>>           elif yyygr > 0:
>>             yyygr_speed += 0.0000005
>>           yyygr += yyygr_speed
>>
>>           wavey_gurgy = ( float(n) * float(cicles_per_every_second +
>> yyygr)  /  float(samples_per_second) )
>>
>>           numpy_sound_data[n] = int(    math.sin(  wavey_gurgy *
>> radians(360)  ) * 20000.0        )
>>
>>
>>            # This "pinches" the ends of the "numpy_sound_data":
>>           if n >= specialyy2:
>>             numpy_sound_data[n] *= (1.0 - (n - specialyy2) / 1000.0)
>>           if n <= specialyy3:
>>             numpy_sound_data[n] *= (n / 300.0)
>>
>>            # Draw/plot two stretched versions of the "numpy_sound_data":
>>           xa = x
>>           ya = y
>>           x = n  / x_dividey
>>           y = numpy_sound_data[n] / y_dividey + y_addy
>>           xa2 = x2
>>           ya2 = y2
>>           x2 = n / x2_dividey
>>           y2 = y + y2_addy_addy
>>           pygame.draw.line(screen, (200, 200, 200), (x, y), (xa, ya))
>>           pygame.draw.line(screen, (200, 200, 200), (x2, y2), (xa2, ya2))
>>
>>      pygame.display.flip()
>>
>>
>>
>>
>>
>>
>>       ###### convert "numpy_sound_data" to pygame.mixer.Sound and
>> play it: #######
>>
>>
>>      sound_thing   =   pygame.sndarray.make_sound( numpy_sound_data )
>> # <-- This should always return a sound, right?
>>
>>
>>      if previous_channel != None:   previous_channel.fadeout(300) #
>> <-- Fade out previous sound. (if any)
>>
>>
>>      print type(sound_thing)                                        #
>> <-- Should print:  <type 'pygame.mixer.Sound'>
>>
>>
>>      previous_channel =
>> pygame.mixer.find_channel(True).play(sound_thing, 0)  # <-- This line
>> is where the program "should" give an error.
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> def END():
>>    print ''
>>    print 'Program ended?'
>>    print
>> "###############################################################################"
>>    print
>> "###############################################################################"
>>    print ''
>>    pygame.quit()
>>    raise SystemExit, ''
>>
>>
>> import os
>> import sys
>> import math
>> import random
>> import time
>> #import gc
>> #import copy as pythoncopy
>> #import string
>> #import struct
>> #from time import strftime, localtime
>> #import wave
>>
>> print ""
>> print
>> "###############################################################################"
>> print
>> "###############################################################################"
>> print "Program started? "
>> print ""
>> print ""
>> print ""
>> print ""
>> print ""
>> try:
>>                                                               import
>> pygame
>>                                                               from
>> pygame.locals import *
>>                                                               if not
>> pygame.font:  print '?? "pygame.font" not "found" ??'
>>                                                               if not
>> pygame.mixer: print '?? "pygame.mixer" not "found" ??'
>>                                                               from
>> pygame import scrap
>> except: print
>> '"pygame" not "found"???'
>> try:
>>                                                               import
>> numpy; from numpy import *
>> except: print
>> '"numpy" not "found"??? (Oh well! Who cares!)'
>> #try:
>> #                                                               import
>> numarray; from numarray import *
>> #except: print
>> '"numarray" not "found"??? (Oh well! Who cares!)'
>> #try:
>> #                                                               import
>> Numeric; from Numeric import *
>> #except: print
>> '"numeric" not "found"??? (Oh well! Who cares!)'
>>
>> HE_HE_init()
>> Lets_ROLL()
>> END()
>>
>> # Thanks for your effort! I hope the bug will be fixed!
>
>

Attachment: MAKE_SOUND_BUG.py
Description: Binary data