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! > > > > >