Chase
Crider

COMMERCIALS
NARRATION
COMING SOON
CHARACTER
COMING SOON
(function () { const root = document.getElementById('vp'); if (!root || root.dataset.ready) return; root.dataset.ready = '1'; const button = root.querySelector('.vp-play'); const audio = root.querySelector('audio'); const meta = root.querySelector('.vp-main .vp-meta'); const scrub = root.querySelector('.vp-scrub'); const bar = root.querySelector('.vp-bar'); const fill = root.querySelector('.vp-fill'); const knob = root.querySelector('.vp-knob'); let dragging = false; function timeString(seconds) { if (!Number.isFinite(seconds)) return '0:00'; const m = Math.floor(seconds / 60); const s = Math.floor(seconds % 60); return m + ':' + String(s).padStart(2, '0'); } function setPct(p) { fill.style.width = p + '%'; knob.style.left = p + '%'; scrub.setAttribute('aria-valuenow', Math.round(p)); } function update() { const playing = !audio.paused; const started = audio.currentTime > 0; button.textContent = playing ? 'Ⅱ' : '▶'; button.setAttribute('aria-label', (playing ? 'Pause' : 'Play') + ' Commercials'); if (!dragging) setPct(audio.duration ? (audio.currentTime / audio.duration * 100) : 0); meta.textContent = (playing || started) ? timeString(audio.currentTime) + (audio.duration ? ' / ' + timeString(audio.duration) : '') : ''; } button.addEventListener('click', async () => { if (!audio.paused) { audio.pause(); update(); return; } try { await audio.play(); } catch (error) { console.error('Audio playback failed:', error); } update(); }); function seekFromEvent(e) { if (!Number.isFinite(audio.duration)) return; const r = bar.getBoundingClientRect(); const f = Math.max(0, Math.min(1, (e.clientX - r.left) / r.width)); setPct(f * 100); audio.currentTime = f * audio.duration; } scrub.addEventListener('pointerdown', e => { dragging = true; scrub.classList.add('drag'); try { scrub.setPointerCapture(e.pointerId); } catch (err) {} seekFromEvent(e); }); scrub.addEventListener('pointermove', e => { if (dragging) seekFromEvent(e); }); function endDrag() { dragging = false; scrub.classList.remove('drag'); update(); } scrub.addEventListener('pointerup', endDrag); scrub.addEventListener('pointercancel', endDrag); scrub.addEventListener('keydown', e => { if (!Number.isFinite(audio.duration)) return; if (e.key === 'ArrowRight') audio.currentTime = Math.min(audio.duration, audio.currentTime + 5); if (e.key === 'ArrowLeft') audio.currentTime = Math.max(0, audio.currentTime - 5); }); ['timeupdate', 'loadedmetadata', 'durationchange', 'play', 'pause', 'seeked'].forEach(ev => { audio.addEventListener(ev, update); }); audio.addEventListener('ended', () => { audio.currentTime = 0; update(); }); update(); })();

A little about me...

Hello! My name is Chase I am a 25-year-old voice-over artist located in Sunny Florida. If I am not voice acting, I am spending time with my wife playing video games, or...at the cinema again watching another movie!

Coming soon


Ready to add some magic?

Interested in my voice? Feel free to contact me & request audition!