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

Re: [pygame] BUG in make_sound()?



Thanks guys.

On Sun, May 24, 2009 at 11:22 AM, Lenard Lindstrom<len-l@xxxxxxxxx> wrote:
> I can't reproduce the problem (Pygame 1.8.1, Python 2.5.4, Windows 98). If
> anything should crash it is my system. I ran the test program for over two
> hours without a problem So I will be of no help here. Good luck.
>
> Lenard
>
> René Dudfield wrote:
>>
>> hi,
>>
>> yeah, he had numeric and numpy installed...
>>
>> I modified the script slightly to tell it to use numpy by default:
>>  http://rene.f0o.com/~rene/stuff/MAKE_SOUND_BUG.py
>> <http://rene.f0o.com/%7Erene/stuff/MAKE_SOUND_BUG.py>
>>
>>
>> cu,
>>
>>
>> On Sun, May 24, 2009 at 10:05 AM, <len-l@xxxxxxxxx
>> <mailto:len-l@xxxxxxxxx>> wrote:
>>
>>    Hi,
>>
>>    Does DR0ID have Numeric installed? Pygame 1.8.1 sndarray uses
>>    Numeric by default.
>>
>>    Lenard
>>
>>
>>    May 23, 2009 03:31:02 AM, pygame-users@xxxxxxxx
>>    <mailto:pygame-users@xxxxxxxx> wrote:
>>
>>        hi again,
>>
>>        DR0ID tested it on windows and got both the traceback you got,
>>        and the segfault (with python2.6 and pygame 1.8.1).  Will get
>>        around to debugging it on windows later.
>>
>>        cu,
>>
>>        On Sat, May 23, 2009 at 6:33 PM, René Dudfield
>>        <renesd@xxxxxxxxx <mailto:renesd@xxxxxxxxx>> wrote:
>>
>>            hello,
>>
>>            I haven't been able to reproduce the problem...  I tried
>>            on a ubuntu 32bit, and an osx 10.5.7 32bit python.
>>
>>            So maybe the bug happens only on windows.
>>
>>
>>            I haven't been able to find any places in the code where
>>            make_sound could return anything but a Sound object.
>>
>>            Will try it out on vista later.
>>
>>
>>            cu,
>>
>>
>>
>>            On Wed, May 20, 2009 at 1:22 PM, Brian Brown
>>            <brobab@xxxxxxxxx <mailto:brobab@xxxxxxxxx>> wrote:
>>
>>                Here's an attachment.
>>
>>
>>                On Wed, May 13, 2009 at 9:15 PM, René Dudfield
>>                <renesd@xxxxxxxxx <mailto: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 <mailto: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:                  >>
>>                >>
>>                >>      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!
>>                >
>>                >
>>
>>
>>
>>
>
>
> --
> Lenard Lindstrom
> <len-l@xxxxxxxxx>
>
>