shailesh / pyglet

Automatically exported from code.google.com/p/pyglet
BSD 3-Clause "New" or "Revised" License
0 stars 0 forks source link

"underrun" while playing audio file, audio output stops, get_audio_data continues etc #694

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
Have you tried Pyglet 1.2 alpha1 or the repository code?:
Both, although i'm currently running & testing with 1.2a1.

What steps will reproduce the problem?
1. Initialize a sound in pyglet and play it (either through a player object or 
directly with play())
2. Wait between 24-54 seconds.
3. Experience how the audio output suddenly stops.

I've added some minimal code at the bottom that isolates the problem.

Paste in the traceback or error message:
'debug_media_buffers' set to True yields this:
----------------------------------------------
...
refill 4466
Bad buffer: 3414
refill 4088
Bad buffer: 3415
refill 4540
GEN BUFFERS: 40963
Bad buffer: 3416
refill 4536
GEN BUFFERS: 40963
BUFFER DATA ERROR: 40964
Bad buffer: 3417
Bad buffer: 3418
refill 9082
GEN BUFFERS: 40963
BUFFER DATA ERROR: 40964
Bad buffer: 3419
refill 4542
GEN BUFFERS: 40963
BUFFER DATA ERROR: 40964
Bad buffer: 3420
Bad buffer: 3421
refill 9012
GEN BUFFERS: 40963
BUFFER DATA ERROR: 40964
Bad buffer: 3422
refill 4534
GEN BUFFERS: 40963
BUFFER DATA ERROR: 40964
Bad buffer: 3423
Bad buffer: 3424
Bad buffer: 0
Bad buffer: 0
Bad buffer: 0
Bad buffer: 0
Bad buffer: 0
Bad buffer: 0
refill 44800
GEN BUFFERS: 40963
underrun
Source unqueue error: -1
refill 44800
GEN BUFFERS: 40963
underrun
Source unqueue error: -1
refill 44800
GEN BUFFERS: 40963
underrun
Source unqueue error: -1
refill 44800
GEN BUFFERS: 40963
underrun
...
----------------------------------------------

Paste in the output of `python -m pyglet.info`:
----------------------------------------------
sys.version: 2.7.6 (v2.7.6:3a1db0d2747e, Nov 10 2013, 00:42:54) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]
sys.platform: darwin
sys.maxint: 9223372036854775807
PyObjC not available
os.getcwd(): /Users/michael/Dropbox/Programming/Python/MiEngine

pyglet
------------------------------------------------------------------------------
pyglet.version: 1.2alpha1
pyglet.__file__: 
/Users/michael/Dropbox/Programming/Python/MiEngine/pyglet/__init__.pyc
pyglet.options['search_local_libs'] = True
pyglet.options['debug_win32'] = False
pyglet.options['xlib_fullscreen_override_redirect'] = False
pyglet.options['debug_trace_args'] = False
pyglet.options['font'] = ('gdiplus', 'win32')
pyglet.options['debug_gl_trace_args'] = False
pyglet.options['debug_trace'] = False
pyglet.options['debug_gl_trace'] = False
pyglet.options['debug_x11'] = False
pyglet.options['debug_media'] = False
pyglet.options['debug_trace_depth'] = 1
pyglet.options['vsync'] = None
pyglet.options['debug_gl'] = True
pyglet.options['darwin_cocoa'] = True
pyglet.options['debug_trace_flush'] = True
pyglet.options['shadow_window'] = True
pyglet.options['xsync'] = True
pyglet.options['debug_font'] = False
pyglet.options['graphics_vbo'] = True
pyglet.options['debug_lib'] = False
pyglet.options['debug_graphics_batch'] = False
pyglet.options['audio'] = ('directsound', 'pulse', 'openal', 'silent')
pyglet.options['debug_texture'] = False

pyglet.window
------------------------------------------------------------------------------
2013-12-28 12:51:44.554 Python[4611:d07] ApplePersistenceIgnoreState: Existing 
state will not be touched. New state will be written to 
/var/folders/jy/sl1jh6kd5_15b9zpmcwfbzj00000gn/T/org.python.python.savedState
platform: <pyglet.window.Platform object at 0x100696d50>
display: <pyglet.canvas.cocoa.CocoaDisplay object at 0x102ce2e90>
screens[0]: CocoaScreen(x=0, y=0, width=1440, height=900)
config['double_buffer'] = 1
config['stereo'] = 0
config['buffer_size'] = 32
config['aux_buffers'] = 0
config['sample_buffers'] = 0
config['samples'] = 0
config['red_size'] = 0
config['green_size'] = 0
config['blue_size'] = 0
config['alpha_size'] = 8
config['depth_size'] = 24
config['stencil_size'] = 0
config['accum_red_size'] = 0
config['accum_green_size'] = 0
config['accum_blue_size'] = 0
config['accum_alpha_size'] = 0
config['major_version'] = None
config['minor_version'] = None
config['forward_compatible'] = None
config['debug'] = None
context: CocoaContext()

window.context._info
------------------------------------------------------------------------------
gl_info.get_version(): 2.1 INTEL-8.18.26
gl_info.get_vendor(): Intel Inc.
gl_info.get_renderer(): Intel HD Graphics 5000 OpenGL Engine
gl_info.get_extensions():
   GL_APPLE_aux_depth_stencil
   GL_APPLE_client_storage
   GL_APPLE_element_array
   GL_APPLE_fence
   GL_APPLE_float_pixels
   GL_APPLE_flush_buffer_range
   GL_APPLE_flush_render
   GL_APPLE_object_purgeable
   GL_APPLE_packed_pixels
   GL_APPLE_pixel_buffer
   GL_APPLE_rgb_422
   GL_APPLE_row_bytes
   GL_APPLE_specular_vector
   GL_APPLE_texture_range
   GL_APPLE_transform_hint
   GL_APPLE_vertex_array_object
   GL_APPLE_vertex_array_range
   GL_APPLE_vertex_point_size
   GL_APPLE_vertex_program_evaluators
   GL_APPLE_ycbcr_422
   GL_ARB_color_buffer_float
   GL_ARB_depth_buffer_float
   GL_ARB_depth_clamp
   GL_ARB_depth_texture
   GL_ARB_draw_buffers
   GL_ARB_draw_elements_base_vertex
   GL_ARB_draw_instanced
   GL_ARB_fragment_program
   GL_ARB_fragment_program_shadow
   GL_ARB_fragment_shader
   GL_ARB_framebuffer_object
   GL_ARB_framebuffer_sRGB
   GL_ARB_half_float_pixel
   GL_ARB_half_float_vertex
   GL_ARB_instanced_arrays
   GL_ARB_multisample
   GL_ARB_multitexture
   GL_ARB_occlusion_query
   GL_ARB_pixel_buffer_object
   GL_ARB_point_parameters
   GL_ARB_point_sprite
   GL_ARB_provoking_vertex
   GL_ARB_seamless_cube_map
   GL_ARB_shader_objects
   GL_ARB_shader_texture_lod
   GL_ARB_shading_language_100
   GL_ARB_shadow
   GL_ARB_sync
   GL_ARB_texture_border_clamp
   GL_ARB_texture_compression
   GL_ARB_texture_compression_rgtc
   GL_ARB_texture_cube_map
   GL_ARB_texture_env_add
   GL_ARB_texture_env_combine
   GL_ARB_texture_env_crossbar
   GL_ARB_texture_env_dot3
   GL_ARB_texture_float
   GL_ARB_texture_mirrored_repeat
   GL_ARB_texture_non_power_of_two
   GL_ARB_texture_rectangle
   GL_ARB_texture_rg
   GL_ARB_transpose_matrix
   GL_ARB_vertex_array_bgra
   GL_ARB_vertex_blend
   GL_ARB_vertex_buffer_object
   GL_ARB_vertex_program
   GL_ARB_vertex_shader
   GL_ARB_window_pos
   GL_ATI_separate_stencil
   GL_ATI_texture_env_combine3
   GL_ATI_texture_float
   GL_ATI_texture_mirror_once
   GL_EXT_abgr
   GL_EXT_bgra
   GL_EXT_blend_color
   GL_EXT_blend_equation_separate
   GL_EXT_blend_func_separate
   GL_EXT_blend_minmax
   GL_EXT_blend_subtract
   GL_EXT_clip_volume_hint
   GL_EXT_debug_label
   GL_EXT_debug_marker
   GL_EXT_draw_buffers2
   GL_EXT_draw_range_elements
   GL_EXT_fog_coord
   GL_EXT_framebuffer_blit
   GL_EXT_framebuffer_multisample
   GL_EXT_framebuffer_object
   GL_EXT_framebuffer_sRGB
   GL_EXT_geometry_shader4
   GL_EXT_gpu_program_parameters
   GL_EXT_gpu_shader4
   GL_EXT_multi_draw_arrays
   GL_EXT_packed_depth_stencil
   GL_EXT_packed_float
   GL_EXT_provoking_vertex
   GL_EXT_rescale_normal
   GL_EXT_secondary_color
   GL_EXT_separate_specular_color
   GL_EXT_shadow_funcs
   GL_EXT_stencil_two_side
   GL_EXT_stencil_wrap
   GL_EXT_texture_array
   GL_EXT_texture_compression_dxt1
   GL_EXT_texture_compression_s3tc
   GL_EXT_texture_env_add
   GL_EXT_texture_filter_anisotropic
   GL_EXT_texture_integer
   GL_EXT_texture_lod_bias
   GL_EXT_texture_rectangle
   GL_EXT_texture_sRGB
   GL_EXT_texture_sRGB_decode
   GL_EXT_texture_shared_exponent
   GL_EXT_timer_query
   GL_EXT_transform_feedback
   GL_EXT_vertex_array_bgra
   GL_IBM_rasterpos_clip
   GL_NV_blend_square
   GL_NV_conditional_render
   GL_NV_depth_clamp
   GL_NV_fog_distance
   GL_NV_light_max_exponent
   GL_NV_texgen_reflection
   GL_NV_texture_barrier
   GL_SGIS_generate_mipmap
   GL_SGIS_texture_edge_clamp
   GL_SGIS_texture_lod

pyglet.gl.glu_info
------------------------------------------------------------------------------
glu_info.get_version(): 1.3 MacOSX
glu_info.get_extensions():

pyglet.gl.glx_info
------------------------------------------------------------------------------
GLX not available.

pyglet.media
------------------------------------------------------------------------------
audio driver: <pyglet.media.drivers.openal.OpenALDriver object at 0x1058394d0>

pyglet.media.avbin
------------------------------------------------------------------------------
Library: <CDLL '/usr/local/lib/libavbin.dylib', handle 101cc0530 at 10582f810>
AVbin version: 8
FFmpeg revision: 25864

pyglet.media.drivers.openal
------------------------------------------------------------------------------
Library: <CDLL '/System/Library/Frameworks/OpenAL.framework/OpenAL', handle 
102b94170 at 105839910>
Version: (1, 1)
Extensions:
   ALC_EXT_CAPTURE
   ALC_ENUMERATION_EXT
   ALC_EXT_MAC_OSX
   ALC_EXT_ASA
   ALC_EXT_ASA_DISTORTION
   ALC_EXT_ASA_ROGER_BEEP

----------------------------------------------

Any additional info (platform/language/hardware) that may be relevant?:

Tried it on 2 different machines running OSX 10.9 (Mavericks) - a  late 2011 
MBP and a late 2013 MBA, both encountered the same problem. I have not had the 
possibility to try other platforms so far.
I've tried various file formats (ranging from simple 16bit mono wavs to stereo 
24 MP3's etc) and I also tried running different versions of Avbin (2 different 
releases of version 8 and version 10) without any luck.

Here is some pretty minimal code that I wrote to isolate the problem:
----------------------------------------------
"""
test.py
"""
import pyglet,os
os.chdir(os.path.dirname(os.path.abspath(__file__)[0:-6]))

pyglet.options['debug_media'] = True
pyglet.options['debug_media_buffers'] = True

game_window = pyglet.window.Window(800, 600)

player = pyglet.media.Player()
player.eos_action = player.EOS_LOOP
song = pyglet.media.load('resources/audio/song.mp3', streaming=False)
player.queue(song)
player.play()
player.position = (0,0,0)
player.volume = 1
player.min_distance = 30
player.max_distance = 100000
listener = pyglet.media.get_audio_driver().get_listener()
time_passed = 0

def update(dt):
    global time_passed
    time_passed += dt

def on_mouse_motion(x, y, dx, dy):
    global time_passed
    listener.position = (x,y,0)
    print time_passed

game_window.on_mouse_motion = on_mouse_motion
if __name__ == '__main__': 
    pyglet.clock.schedule_interval(update, 1/120.0)
    pyglet.app.run()
----------------------------------------------

Original issue reported on code.google.com by mich...@wielondek.com on 28 Dec 2013 at 12:05

GoogleCodeExporter commented 9 years ago
I can't recreate this error on linux mint 15 python 2.7.4 and pyglet from the 
repository.

Original comment by Adam.JT...@gmail.com on 30 Dec 2013 at 5:19

GoogleCodeExporter commented 9 years ago
I'm finding the exact same thing on Mac OS 10.8.5 and pyglet 1.2α

symptom: music stops after about 25 seconds of playback
steps to reproduce: run the code below with any mp3 file

#!/usr/bin/env python
import pyglet;

pyglet.options['debug_media']=True;

window = pyglet.window.Window();
player = pyglet.media.Player();
music = pyglet.media.load('~/Desktop/example.mp3');
player.queue(music);
player.play();

@window.event
def on_draw():
    window.clear();

window.push_handlers(pyglet.window.event.WindowEventLogger())

pyglet.app.run();

Original comment by rg.geor...@gmail.com on 25 Jan 2014 at 9:58

GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
Same issue with Pyglet 1.2x and OSX 10.9.4. Music plays for around 30 seconds 
or so then cuts off. 

    song = pyglet.media.load('example.mp3, streaming=False)
    song.play()

The streaming flag doesn't make a difference.

Here is the the output from the media debug log

refill 9024
refill 8728
refill 9052
refill 8972
refill 9024
refill 9024
refill 8728
refill 9052
refill 17996
refill 44800
underrun
refill 44800
underrun
refill 44800
underrun
refill 44800
underrun
refill 44800
underrun
refill 44800
underrun
refill 44800
underrun

Original comment by Wnt2bsle...@gmail.com on 11 Oct 2014 at 11:02