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