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