Scirra / Construct-bugs

Public bug report submissions for Construct 3 and Construct Animate. Please read the guidelines then click the 'Issues' tab to get started.
https://www.construct.net
107 stars 83 forks source link

Overlapping timeline audio with the same tag causes audio distortion #8234

Closed bobatealee closed 1 month ago

bobatealee commented 1 month ago

Problem description

When playing the same timeline several times in quick succession, audio played via the timeline with the same tags causes the audio to become distorted.

View videos https://github.com/user-attachments/assets/fe1e46d5-7526-487e-a229-4492fe17c1dc https://github.com/user-attachments/assets/db6120f0-71fe-4bf3-a0bf-96328c28dcd9

Attach a .c3p

new_timeline_audio_bug.zip

Steps to reproduce

  1. Create a timeline and add audio to that timeline.
  2. Add a tag to the audio in the timeline (e.g. "sound").
  3. Play the same timeline several times in quick succession.
  4. (Optional) Change the playback speed for each unique timeline play.

Observed result

The audio becomes distorted or choppy.

Expected result

The audio should not become distorted or choppy.

More details

Affected browsers/platforms: Google Chrome 128.0.6613.138 (x64), Mozilla Firefox 130.0.1 (x64)

First affected release: r407

System details

View details Platform information Product: Construct 3 r407 (stable) Browser: Chrome 128.0.6613.138 Browser engine: Chromium Context: browser Operating system: Windows 11 Device type: desktop Device pixel ratio: 2 Logical CPU cores: 24 Approx. device memory: 8 GB User agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Language setting: en-US Local storage Storage quota (approx): 1.1 tb Storage usage (approx): 96 mb (0%) Persistant storage: No Browser support notes This list contains missing features that are not required, but could improve performance or user experience if supported. Nothing is missing. Everything is OK! WebGL information Version string: WebGL 2.0 (OpenGL ES 3.0 Chromium) Numeric version: 2 Supports NPOT textures: yes Supports GPU profiling: no Supports highp precision: yes Vendor: Google Inc. (NVIDIA) Renderer: ANGLE (NVIDIA, NVIDIA GeForce RTX 3080 Ti (0x00002208) Direct3D11 vs_5_0 ps_5_0, D3D11) Major performance caveat: no Maximum texture size: 16384 Point size range: 1 to 1024 Extensions: EXT_clip_control EXT_color_buffer_float EXT_color_buffer_half_float EXT_conservative_depth EXT_depth_clamp EXT_disjoint_timer_query_webgl2 EXT_float_blend EXT_polygon_offset_clamp EXT_render_snorm EXT_texture_compression_bptc EXT_texture_compression_rgtc EXT_texture_filter_anisotropic EXT_texture_mirror_clamp_to_edge EXT_texture_norm16 KHR_parallel_shader_compile NV_shader_noperspective_interpolation OES_draw_buffers_indexed OES_sample_variables OES_shader_multisample_interpolation OES_texture_float_linear OVR_multiview2 WEBGL_blend_func_extended WEBGL_clip_cull_distance WEBGL_compressed_texture_s3tc WEBGL_compressed_texture_s3tc_srgb WEBGL_debug_renderer_info WEBGL_debug_shaders WEBGL_lose_context WEBGL_multi_draw WEBGL_polygon_mode WEBGL_provoking_vertex WEBGL_stencil_texturing Audio information System sample rate: 48000 Hz Output channels: 2 Output interpretation: speakers Supported decode formats: WebM Opus (audio/webm;codecs=opus) WebM Vorbis (audio/webm;codecs=vorbis) MPEG-4 Opus (audio/mp4;codecs=opus) MPEG-4 AAC (audio/mp4;codecs=mp4a.40.2) MP3 (audio/mpeg) FLAC (audio/flac) PCM WAV (audio/wav;codecs=1) Supported encode formats: WebM Opus (audio/webm;codecs=opus) MPEG-4 Opus (audio/mp4;codecs=opus) MPEG-4 AAC (audio/mp4;codecs=mp4a.40.2) Video information Supported decode formats: WebM AV1 (video/webm;codecs=av01.0.00M.08) WebM VP9 (video/webm;codecs=vp9) WebM VP8 (video/webm;codecs=vp8) MPEG-4 AV1 (video/mp4;codecs=av01.0.00M.08) MPEG-4 H.265 (video/mp4;codecs=hev1.1.2.L93.B0) MPEG-4 H.264 (video/mp4;codecs=avc1.420034) Supported encode formats: WebM AV1 (video/webm;codecs=av01.0.00M.08) WebM VP9 (video/webm;codecs=vp9) WebM VP8 (video/webm;codecs=vp8) WebM H.264 (video/webm;codecs=avc1.420034) MPEG-4 AV1 (video/mp4;codecs=av01.0.00M.08) MPEG-4 VP9 (video/mp4;codecs=vp9) MPEG-4 H.264 (video/mp4;codecs=avc1.420034)
AshleyScirra commented 1 month ago

The provided project uses a third-party addon Effect Better Outline (skymen_BetterOutline) by skymen. Please provide a project not using any third-party addons as per the bug report guidelines.

bobatealee commented 1 month ago

The provided project uses a third-party addon _Effect Better Outline (skymenBetterOutline) by skymen. Please provide a project not using any third-party addons as per the bug report guidelines.

My apologies! The OP should be updated now. I hastily cobbled together a test environment by ripping out parts of what I was working on, and I missed some things.

AshleyScirra commented 1 month ago

Can you provide a minimal project with the fewest events and objects possible, as per the bug report guidelines?

The provided project still has pretty complex logic, and it's not clear that it's not a mistake or consequence of your events. For example it looks like your events randomly change the playback rate of some sounds. So it's definitely not going to sound like the timeline being played on its own. So it's not clear what it's supposed to sound like versus what you can hear. If I remove the 'Set playback rate' action it sounds normal, so it seems to be caused by that.

bobatealee commented 1 month ago

Can you provide a minimal project with the fewest events and objects possible, as per the bug report guidelines?

The provided project still has pretty complex logic, and it's not clear that it's not a mistake or consequence of your events. For example it looks like your events randomly change the playback rate of some sounds. So it's definitely not going to sound like the timeline being played on its own. So it's not clear what it's supposed to sound like versus what you can hear. If I remove the 'Set playback rate' action it sounds normal, so it seems to be caused by that.

Hi there. Thank you for letting me know. This should be a lot more simplified and illustrative: new_timeline_audio_bug.zip

bobatealee commented 1 month ago

Hi. Just bumping this to make sure it's seen. The attached project has followed the guidelines for a few weeks now.

DiegoScirra commented 1 month ago

I don't think this has anything to do with timelines as they just serve as a convenience method to string sounds together or match playback with other things the timeline might be controlling. I suspect you would get the same results if you try to do the same things without timelines.

Once playback starts it's all taken care of by the browser's audio API. On top of that, it is what I would expect sound to be like if many short sounds are played in rapid succession.

Going to have to close this because I don't think there is anything we can do about it.

bobatealee commented 1 month ago

I don't think this has anything to do with timelines as they just serve as a convenience method to string sounds together or match playback with other things the timeline might be controlling. I suspect you would get the same results if you try to do the same things without timelines.

Once playback starts it's all taken care of by the browser's audio API. On top of that, it is what I would expect sound to be like if many short sounds are played in rapid succession.

Going to have to close this because I don't think there is anything we can do about it.

You were indeed right that timelines weren't the culprit. I've made a clean issue over at #8281. Thank you both for your attention.