Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

audio.playbacktime desync. #7197

Closed
Freeze7x opened this issue Jul 13, 2023 · 1 comment
Closed

audio.playbacktime desync. #7197

Freeze7x opened this issue Jul 13, 2023 · 1 comment
Assignees
Labels

Comments

@Freeze7x
Copy link

Problem description

When messing with the Audio plugin's playback rate action (and in some cases, playback time), the audio.playbacktime expression will desync from the expected audio time.

Attach a .c3p

audio.zip

Steps to reproduce

  1. Actively change playback rate, (preferably with dynamic values like 4 or 0)
  2. Optionally, change playback time.

Observed result

The built in metronome which follows simple instructions can go from properly synced to completely off.

Expected result

The built in metronome should stay on track regardless of what happens.

More details

Affected browsers/platforms: Windows, Chrome

First affected release: Issue has been present for a bit of a while, so the first affected release is could go as far as the first release. Otherwise, it is unknown.

System details

View details

Platform information
Product: Construct 3 r350 (stable)
Browser: Chrome 114.0.5735.199
Browser engine: Chromium
Context: webapp
Operating system: Windows 10
Device type: desktop
Device pixel ratio: 1.2000000476837158
Logical CPU cores: 12
Approx. device memory: 8 GB
User agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
Language setting: en-US

Local storage
Storage quota (approx): 142 gb
Storage usage (approx): 114 mb (0.1%)
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. (AMD)
Renderer: ANGLE (AMD, AMD Radeon(TM) Graphics Direct3D11 vs_5_0 ps_5_0, D3D11)
Major performance caveat: no
Maximum texture size: 16384
Point size range: 1 to 1024
Extensions:

EXT_color_buffer_float
EXT_color_buffer_half_float
EXT_disjoint_timer_query_webgl2
EXT_float_blend
EXT_texture_compression_bptc
EXT_texture_compression_rgtc
EXT_texture_filter_anisotropic
EXT_texture_norm16
KHR_parallel_shader_compile
OES_draw_buffers_indexed
OES_texture_float_linear
OVR_multiview2
WEBGL_compressed_texture_s3tc
WEBGL_compressed_texture_s3tc_srgb
WEBGL_debug_renderer_info
WEBGL_debug_shaders
WEBGL_lose_context
WEBGL_multi_draw
WEBGL_provoking_vertex
Audio information
System sample rate: 48000 Hz
Output channels: 2
Output interpretation: speakers
Supported decode formats:

WebM Opus (audio/webm; codecs=opus)
Ogg Opus (audio/ogg; codecs=opus)
WebM Vorbis (audio/webm; codecs=vorbis)
Ogg Vorbis (audio/ogg; codecs=vorbis)
MPEG-4 AAC (audio/mp4; codecs=mp4a.40.5)
MP3 (audio/mpeg)
FLAC (audio/flac)
PCM WAV (audio/wav; codecs=1)
Supported encode formats:

WebM Opus (audio/webm; codecs=opus)
Video information
Supported decode formats:

WebM AV1 (video/webm; codecs=av01.0.00M.08)
MP4 AV1 (video/mp4; codecs=av01.0.00M.08)
WebM VP9 (video/webm; codecs=vp9)
WebM VP8 (video/webm; codecs=vp8)
Ogg Theora (video/ogg; codecs=theora)
H.265 (video/mp4; codecs=hev1.1.2.L93.B0)
H.264 (video/mp4; codecs=avc1.42E01E)
Supported encode formats:

WebM AV1 (video/webm; codecs=av1)
WebM VP9 (video/webm; codecs=vp9)
WebM VP8 (video/webm; codecs=vp8)

@AshleyScirra AshleyScirra self-assigned this Jul 14, 2023
@AshleyScirra
Copy link
Member

Unfortunately there is not currently any support for getting the playback time when the playback rate changes. This is because the underlying Web Audio API does not actually provide the information we need. A spec issue was filed here some time ago: WebAudio/web-audio-api#2397

Currently all we can do to calculate the playback time is basically (currentTime - startTime) * playbackRate, which is only correct if the playback rate never changes. If it does then there's no good way at the moment to know the actual play time. There are various hacks that can be used, but in my experience these usually have their own quirks or introduce their own bugs, so I would prefer not to use them and wait for official support in the Web Audio API.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants