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 <bro...@gmail.com> wrote:

> Here's an attachment.
>
>
> On Wed, May 13, 2009 at 9:15 PM, René Dudfield <ren...@gmail.com> 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 <bro...@gmail.com> 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!
> >
> >
>

Reply via email to