VITHOR MORAES
VITHOR MORAES
(function () { const container = document.getElementById('heroServicesEcho'); if (!container || container.dataset.initialized === 'true') return; container.dataset.initialized = 'true'; const mainLines = container.querySelectorAll('.main-line'); const floatingWords = [ 'SOUND DESIGN', 'MIXING', 'EDITING', 'PRODUCTION', 'ORCHESTRA', 'TRANSCRIPTIONS' ]; function buildLetters(el, text, type, lineIndex, seedOffset) { el.innerHTML = ''; Array.from(text).forEach(function (char, charIndex) { const span = document.createElement('span'); if (char === ' ') { span.className = 'space'; span.innerHTML = ' '; } else { span.className = 'letter'; span.textContent = char; const durationBase = type === 'main' ? 2.2 : 2.6; const duration = durationBase + ((charIndex + seedOffset + lineIndex * 3) % 7) * 0.12; const delay = (charIndex * 0.035) + (lineIndex * 0.09) + (seedOffset * 0.02); span.style.animationDuration = duration + 's'; span.style.animationDelay = delay + 's'; } el.appendChild(span); }); } mainLines.forEach(function (line, lineIndex) { const text = line.getAttribute('data-text') || ''; buildLetters(line, text, 'main', lineIndex, 0); const topEcho = document.createElement('div'); topEcho.className = 'hero-services-line echo-line'; topEcho.style.top = ((lineIndex + 1) * 25) + '%'; topEcho.style.marginTop = '-2.1rem'; topEcho.style.transform = 'translateX(-50%) scale(0.92)'; buildLetters(topEcho, text, 'echo', lineIndex, 4); container.appendChild(topEcho); const bottomEcho = document.createElement('div'); bottomEcho.className = 'hero-services-line echo-line'; bottomEcho.style.top = ((lineIndex + 1) * 25) + '%'; bottomEcho.style.marginTop = '2rem'; bottomEcho.style.transform = 'translateX(-50%) scale(1.05)'; buildLetters(bottomEcho, text, 'echo', lineIndex, 8); container.appendChild(bottomEcho); }); const totalFloatingWords = 24; for (let i = 0; i < totalFloatingWords; i++) { const word = document.createElement('div'); word.className = 'floating-word'; word.textContent = floatingWords[Math.floor(Math.random() * floatingWords.length)]; word.style.left = (2 + Math.random() * 96) + '%'; word.style.top = (2 + Math.random() * 96) + '%'; word.style.transform = 'translate(-50%, -50%) scale(' + (0.82 + Math.random() * 0.65) + ') rotate(' + (-12 + Math.random() * 24) + 'deg)'; word.style.animationDuration = (2.8 + Math.random() * 1.6) + 's'; word.style.animationDelay = (Math.random() * 1.6) + 's'; word.style.opacity = (0.10 + Math.random() * 0.10).toFixed(2); container.appendChild(word); } })();

About Me

My career is split between two equally important paths: audio post-production for visual media and music production and orchestration for artists and bands.On the audiovisual side, I’ve worked at four major production companies in Brazil: Dogs Can Fly, Endemol, Estúdio Plug.in, and currently Satelite Audio - handling sound design, mixing, and delivery for advertising, TV, and digital content. I also freelance with clients in Brazil, the US, the UK, Cyprus, Taiwan, India, and more, adapting to different formats, markets, and deadlines.

On the music side, I work as a producer and orchestrator. I’ve written live orchestral arrangements for shows like The Beast Experience (Iron Maiden tribute) and Deep Illusions (Guns N’ Roses symphonic project), and have produced and orchestrated albums and songs for artists and bands worldwide. The focus is on orchestral and metal-driven productions - epic, dynamic, and bombastic.My journey started with New Age piano (thanks to Yanni), then metal led me into keyboards and eventually into orchestral writing and programming - thanks to Youtube projects. I began playing in cover bands and today I’m the keyboardist and music director for Armiferum and Anette Olzon (ex-Nightwish).

I hold a degree in Music Production from Anhembi Morumbi, also studied Broadcast (Media Production) there, and completed the Audio Program at Instituto de Áudio e Vídeo (IAV). This background across studio, stage, and post-production shaped a versatile and practical skill set.Currently, the focus is on expanding my global client base and working on projects where quality, impact, and sonic direction truly matter. Outside of work, video games, books, and geek culture often influence my creative perspective in less than subtle ways.

Sound Post Production

Sound post-production for film and visual media, covering the full audio pipeline: Sound design, foley, dialogue editing, mixing, and final delivery. Projects are delivered broadcast-ready, meeting any required loudness standards and technical specifications.


PROFESSIONAL HIGHLIGHTS

Diário de Pilar (Disney)

Diário de Pilar was a 10 episode long animated TV show based on the books by Flávia Lins e Silva. The entirety of the sound production was taken care by me: Recording and editing the voice actors, recording foley, sound designing, and 5.1 mixing. This one is very special to me.
Available on Disney+

Video thumbnail
(function () { const launcher = document.querySelector('.video-launcher[data-video-id="8xaioT3zu_Q"]'); const modal = document.getElementById('videoModal-8xaioT3zu_Q'); const frame = document.getElementById('videoFrame-8xaioT3zu_Q'); const closeBtn = modal.querySelector('.video-close-btn'); const backdrop = modal.querySelector('.video-modal-backdrop'); if (!launcher || !modal || !frame) return; const videoId = launcher.getAttribute('data-video-id'); function openVideo() { frame.src = 'https://www.youtube.com/embed/' + videoId + '?autoplay=1&rel=0'; modal.classList.add('active'); document.body.style.overflow = 'hidden'; } function closeVideo() { frame.src = ''; modal.classList.remove('active'); document.body.style.overflow = ''; } launcher.addEventListener('click', openVideo); closeBtn.addEventListener('click', closeVideo); backdrop.addEventListener('click', closeVideo); document.addEventListener('keydown', function (e) { if (e.key === 'Escape' && modal.classList.contains('active')) { closeVideo(); } }); })();

The terrible adventure

The Terrible Adventure is an US independent feature film directed by Kel Thompson and starring his kids going through the craziest adventures to win a prize of $1,000,000. I took care of its entire sound production, working on foley, sound designing, and 5.1 mixing.

Visions in the Dark thumbnail
(function () { const launcher = document.querySelector('.video-launcher[data-video-id="VCLSttZ1Adc"]'); const modal = document.getElementById('videoModal'); const frame = document.getElementById('videoFrame'); const closeBtn = modal.querySelector('.video-close-btn'); const backdrop = modal.querySelector('.video-modal-backdrop'); if (!launcher || !modal || !frame) return; const videoId = launcher.getAttribute('data-video-id'); function openVideo() { frame.src = 'https://www.youtube.com/embed/' + videoId + '?autoplay=1&rel=0'; modal.classList.add('active'); document.body.style.overflow = 'hidden'; } function closeVideo() { frame.src = ''; modal.classList.remove('active'); document.body.style.overflow = ''; } launcher.addEventListener('click', openVideo); closeBtn.addEventListener('click', closeVideo); backdrop.addEventListener('click', closeVideo); document.addEventListener('keydown', function (e) { if (e.key === 'Escape' && modal.classList.contains('active')) { closeVideo(); } }); })();

KOLI TAAL

Koli Taal (Chicken Meal) and Naale Rajaa Koli Majaa (Sunday Special) are two films by Indian director Abhilash Shetty. As of previous projects I took care of its entire sound production. Chicken Meal is a greatly bucolic film was shot in the deep countryside of India, and required an extensive research of ambiences, birds and sounds from that region.

YouTube video thumbnail
(function () { const launcher = document.querySelector('.yt-video[data-video-player-id="yt-gQihxm0-U64"]'); const modal = document.getElementById('videoModal-yt-gQihxm0-U64'); const frame = document.getElementById('videoFrame-yt-gQihxm0-U64'); if (!launcher || !modal || !frame || launcher.dataset.initialized === 'true') return; launcher.dataset.initialized = 'true'; const closeBtn = modal.querySelector('.video-close-btn'); const backdrop = modal.querySelector('.video-modal-backdrop'); const videoId = 'gQihxm0-U64'; function openVideo() { frame.src = 'https://www.youtube.com/embed/' + videoId + '?autoplay=1&rel=0'; modal.classList.add('active'); document.body.style.overflow = 'hidden'; } function closeVideo() { frame.src = ''; modal.classList.remove('active'); document.body.style.overflow = ''; } launcher.addEventListener('click', openVideo); closeBtn.addEventListener('click', closeVideo); backdrop.addEventListener('click', closeVideo); document.addEventListener('keydown', function (e) { if (e.key === 'Escape' && modal.classList.contains('active')) { closeVideo(); } }); })();

LUÍSA SONZA - LOIRA GELADA

Luísa Sonza is a very influential brazilian singer and this videoclip was made together with the team of Studio Fraga - And directed by Diego Fraga. I took care of its entire sound design and audio post production.

Vimeo video thumbnail
(function () { const launcher = document.querySelector('.vimeo-video[data-video-player-id="vimeo-753181482"]'); const modal = document.getElementById('videoModal-vimeo-753181482'); const frame = document.getElementById('videoFrame-vimeo-753181482'); if (!launcher || !modal || !frame || launcher.dataset.initialized === 'true') return; launcher.dataset.initialized = 'true'; const closeBtn = modal.querySelector('.video-close-btn'); const backdrop = modal.querySelector('.video-modal-backdrop'); const videoId = '753181482'; function openVideo() { frame.src = 'https://player.vimeo.com/video/' + videoId + '?autoplay=1'; modal.classList.add('active'); document.body.style.overflow = 'hidden'; } function closeVideo() { frame.src = ''; modal.classList.remove('active'); document.body.style.overflow = ''; } launcher.addEventListener('click', openVideo); closeBtn.addEventListener('click', closeVideo); backdrop.addEventListener('click', closeVideo); document.addEventListener('keydown', function (e) { if (e.key === 'Escape' && modal.classList.contains('active')) { closeVideo(); } }); })();

Visions in the Dark

This is an art documentary directed by Flavia Lins approaching sensitive topics like womanhood and communication and relating it to horse training, people like Monty Roberts, Temple Branding and many others are featured. I took care of its violently subtle sound designing, as well as mixing.

Boticário Mother's Day thumbnail
(function () { const launcher = document.querySelector('.boticario-video[data-video-player-id="boticario-mothers-day"]'); const modal = document.getElementById('videoModal-boticario-mothers-day'); const frame = document.getElementById('videoFrame-boticario-mothers-day'); if (!launcher || !modal || !frame || launcher.dataset.initialized === 'true') return; launcher.dataset.initialized = 'true'; const closeBtn = modal.querySelector('.video-close-btn'); const backdrop = modal.querySelector('.video-modal-backdrop'); const videoId = 'VMOQthTVjpY'; function openVideo() { frame.src = 'https://www.youtube.com/embed/' + videoId + '?autoplay=1&rel=0'; modal.classList.add('active'); document.body.style.overflow = 'hidden'; } function closeVideo() { frame.src = ''; modal.classList.remove('active'); document.body.style.overflow = ''; } launcher.addEventListener('click', openVideo); closeBtn.addEventListener('click', closeVideo); backdrop.addEventListener('click', closeVideo); document.addEventListener('keydown', function (e) { if (e.key === 'Escape' && modal.classList.contains('active')) { closeVideo(); } }); })();

BOTICARIO - MOTHER'S DAY

Boticatio is a perfume brand from Brazil known for their disruptive annual ad films. This Mother's Day campaign portrays a less than ideal Mother-Son relationship figuratively placed inside a sailboat facing a heavy storm. I took care of the sound design and mixing of this project while working at Satelite Audio.

Vimeo video thumbnail
(function () { const launcher = document.querySelector('.vimeo-video[data-video-player-id="vimeo-737418995"]'); const modal = document.getElementById('videoModal-vimeo-737418995'); const frame = document.getElementById('videoFrame-vimeo-737418995'); if (!launcher || !modal || !frame || launcher.dataset.initialized === 'true') return; launcher.dataset.initialized = 'true'; const closeBtn = modal.querySelector('.video-close-btn'); const backdrop = modal.querySelector('.video-modal-backdrop'); const videoId = '737418995'; function openVideo() { frame.src = 'https://player.vimeo.com/video/' + videoId + '?autoplay=1'; modal.classList.add('active'); document.body.style.overflow = 'hidden'; } function closeVideo() { frame.src = ''; modal.classList.remove('active'); document.body.style.overflow = ''; } launcher.addEventListener('click', openVideo); closeBtn.addEventListener('click', closeVideo); backdrop.addEventListener('click', closeVideo); document.addEventListener('keydown', function (e) { if (e.key === 'Escape' && modal.classList.contains('active')) { closeVideo(); } }); })();

NON VIOLENCE

The sound of this anti-violence campaign by nonviolence.com was done overnight by me at Satelite Audio and then proceeded to be awarded with a Bronze in Sound Design at the Gerety Awards, and gold in El Ojo De Iberoamérica.


Advertising

With over five years dedicated to advertising, I’ve handled sound post-production for commercials across TV, digital, and branded content, working closely with agencies and production companies under tight deadlines. Below is a demo reel of these last five years, my full portfolio can be found on Vimeo - linked above and below.

2025 AD FILMS REEL


Under The Hood

A few sound Effects/Foley breakdown videos straight from instagram

Orchestration and Music Production

Orchestration (Arrangements and Mockups) for soundtracks, bands, artists, games and all media.


Demos:

(function () { if (window.__op2PlayersInitialized) return; window.__op2PlayersInitialized = true; window.__pauseOtherOp2Players = function (currentPlayer) { document.querySelectorAll('.op2-player').forEach(function (otherPlayer) { if (otherPlayer === currentPlayer) return; const otherAudio = otherPlayer.querySelector('.audio-player'); const otherPlayBtn = otherPlayer.querySelector('.play-btn'); if (otherAudio && !otherAudio.paused) { otherAudio.pause(); } if (otherPlayBtn) { otherPlayBtn.textContent = '▶'; } }); }; })();
0:00 / 0:00Armiferum - King of Fools
Vol
(function () { const player = document.querySelector('.op2-player[data-player-id="track-king-of-fools"]'); if (!player || player.dataset.initialized === 'true') return; player.dataset.initialized = 'true'; const audio = player.querySelector('.audio-player'); const playBtn = player.querySelector('.play-btn'); const progressWrap = player.querySelector('.progress-wrap'); const progressFill = player.querySelector('.progress-fill'); const timeLabel = player.querySelector('.time-label'); const volumeSlider = player.querySelector('.volume-slider'); function formatTime(seconds) { if (isNaN(seconds)) return '0:00'; const mins = Math.floor(seconds / 60); const secs = Math.floor(seconds % 60); return mins + ':' + String(secs).padStart(2, '0'); } function updateTime() { const current = audio.currentTime || 0; const duration = audio.duration || 0; const progress = duration ? (current / duration) * 100 : 0; progressFill.style.width = progress + '%'; timeLabel.textContent = formatTime(current) + ' / ' + formatTime(duration); } playBtn.addEventListener('click', async function () { if (audio.paused) { try { window.__pauseOtherOp2Players(player); await audio.play(); playBtn.textContent = '❚❚'; } catch (err) { console.error('Playback error:', err); } } else { audio.pause(); playBtn.textContent = '▶'; } }); audio.addEventListener('loadedmetadata', updateTime); audio.addEventListener('timeupdate', updateTime); audio.addEventListener('play', function () { playBtn.textContent = '❚❚'; }); audio.addEventListener('pause', function () { playBtn.textContent = '▶'; }); audio.addEventListener('ended', function () { playBtn.textContent = '▶'; progressFill.style.width = '0%'; }); progressWrap.addEventListener('click', function (e) { const rect = progressWrap.getBoundingClientRect(); const x = e.clientX - rect.left; const pct = x / rect.width; if (!isNaN(audio.duration)) { audio.currentTime = pct * audio.duration; } }); volumeSlider.addEventListener('input', function () { audio.volume = parseFloat(this.value); }); audio.volume = parseFloat(volumeSlider.value); updateTime(); })();
0:00 / 0:00Armiferum - Glory
Vol
(function () { const player = document.querySelector('.op2-player[data-player-id="track-glory"]'); if (!player || player.dataset.initialized === 'true') return; player.dataset.initialized = 'true'; const audio = player.querySelector('.audio-player'); const playBtn = player.querySelector('.play-btn'); const progressWrap = player.querySelector('.progress-wrap'); const progressFill = player.querySelector('.progress-fill'); const timeLabel = player.querySelector('.time-label'); const volumeSlider = player.querySelector('.volume-slider'); function formatTime(seconds) { if (isNaN(seconds)) return '0:00'; const mins = Math.floor(seconds / 60); const secs = Math.floor(seconds % 60); return mins + ':' + String(secs).padStart(2, '0'); } function updateTime() { const current = audio.currentTime || 0; const duration = audio.duration || 0; const progress = duration ? (current / duration) * 100 : 0; progressFill.style.width = progress + '%'; timeLabel.textContent = formatTime(current) + ' / ' + formatTime(duration); } playBtn.addEventListener('click', async function () { if (audio.paused) { try { window.__pauseOtherOp2Players(player); await audio.play(); playBtn.textContent = '❚❚'; } catch (err) { console.error('Playback error:', err); } } else { audio.pause(); playBtn.textContent = '▶'; } }); audio.addEventListener('loadedmetadata', updateTime); audio.addEventListener('timeupdate', updateTime); audio.addEventListener('play', function () { playBtn.textContent = '❚❚'; }); audio.addEventListener('pause', function () { playBtn.textContent = '▶'; }); audio.addEventListener('ended', function () { playBtn.textContent = '▶'; progressFill.style.width = '0%'; }); progressWrap.addEventListener('click', function (e) { const rect = progressWrap.getBoundingClientRect(); const x = e.clientX - rect.left; const pct = x / rect.width; if (!isNaN(audio.duration)) { audio.currentTime = pct * audio.duration; } }); volumeSlider.addEventListener('input', function () { audio.volume = parseFloat(this.value); }); audio.volume = parseFloat(volumeSlider.value); updateTime(); })();
0:00 / 0:00Glowing Horizon - Sky Burns in Flames
Vol
(function () { const player = document.querySelector('.op2-player[data-player-id="track-glowing-horizon-sky-burns-in-flames"]'); if (!player || player.dataset.initialized === 'true') return; player.dataset.initialized = 'true'; const audio = player.querySelector('.audio-player'); const playBtn = player.querySelector('.play-btn'); const progressWrap = player.querySelector('.progress-wrap'); const progressFill = player.querySelector('.progress-fill'); const timeLabel = player.querySelector('.time-label'); const volumeSlider = player.querySelector('.volume-slider'); function formatTime(seconds) { if (isNaN(seconds)) return '0:00'; const mins = Math.floor(seconds / 60); const secs = Math.floor(seconds % 60); return mins + ':' + String(secs).padStart(2, '0'); } function updateTime() { const current = audio.currentTime || 0; const duration = audio.duration || 0; const progress = duration ? (current / duration) * 100 : 0; progressFill.style.width = progress + '%'; timeLabel.textContent = formatTime(current) + ' / ' + formatTime(duration); } playBtn.addEventListener('click', async function () { if (audio.paused) { try { window.__pauseOtherOp2Players(player); await audio.play(); playBtn.textContent = '❚❚'; } catch (err) { console.error('Playback error:', err); } } else { audio.pause(); playBtn.textContent = '▶'; } }); audio.addEventListener('loadedmetadata', updateTime); audio.addEventListener('timeupdate', updateTime); audio.addEventListener('play', function () { playBtn.textContent = '❚❚'; }); audio.addEventListener('pause', function () { playBtn.textContent = '▶'; }); audio.addEventListener('ended', function () { playBtn.textContent = '▶'; progressFill.style.width = '0%'; }); progressWrap.addEventListener('click', function (e) { const rect = progressWrap.getBoundingClientRect(); const x = e.clientX - rect.left; const pct = x / rect.width; if (!isNaN(audio.duration)) { audio.currentTime = pct * audio.duration; } }); volumeSlider.addEventListener('input', function () { audio.volume = parseFloat(this.value); }); audio.volume = parseFloat(volumeSlider.value); updateTime(); })();
0:00 / 0:00Glowing Horizon - Hero Of My Own Life
Vol
(function () { const player = document.querySelector('.op2-player[data-player-id="track-glowing-horizon-hero-of-my-own-life"]'); if (!player || player.dataset.initialized === 'true') return; player.dataset.initialized = 'true'; const audio = player.querySelector('.audio-player'); const playBtn = player.querySelector('.play-btn'); const progressWrap = player.querySelector('.progress-wrap'); const progressFill = player.querySelector('.progress-fill'); const timeLabel = player.querySelector('.time-label'); const volumeSlider = player.querySelector('.volume-slider'); function formatTime(seconds) { if (isNaN(seconds)) return '0:00'; const mins = Math.floor(seconds / 60); const secs = Math.floor(seconds % 60); return mins + ':' + String(secs).padStart(2, '0'); } function updateTime() { const current = audio.currentTime || 0; const duration = audio.duration || 0; const progress = duration ? (current / duration) * 100 : 0; progressFill.style.width = progress + '%'; timeLabel.textContent = formatTime(current) + ' / ' + formatTime(duration); } playBtn.addEventListener('click', async function () { if (audio.paused) { try { window.__pauseOtherOp2Players(player); await audio.play(); playBtn.textContent = '❚❚'; } catch (err) { console.error('Playback error:', err); } } else { audio.pause(); playBtn.textContent = '▶'; } }); audio.addEventListener('loadedmetadata', updateTime); audio.addEventListener('timeupdate', updateTime); audio.addEventListener('play', function () { playBtn.textContent = '❚❚'; }); audio.addEventListener('pause', function () { playBtn.textContent = '▶'; }); audio.addEventListener('ended', function () { playBtn.textContent = '▶'; progressFill.style.width = '0%'; }); progressWrap.addEventListener('click', function (e) { const rect = progressWrap.getBoundingClientRect(); const x = e.clientX - rect.left; const pct = x / rect.width; if (!isNaN(audio.duration)) { audio.currentTime = pct * audio.duration; } }); volumeSlider.addEventListener('input', function () { audio.volume = parseFloat(this.value); }); audio.volume = parseFloat(volumeSlider.value); updateTime(); })();
0:00 / 0:00The Swarm - Night Terror
Vol
(function () { const player = document.querySelector('.op2-player[data-player-id="track-the-swarm-night-terror"]'); if (!player || player.dataset.initialized === 'true') return; player.dataset.initialized = 'true'; const audio = player.querySelector('.audio-player'); const playBtn = player.querySelector('.play-btn'); const progressWrap = player.querySelector('.progress-wrap'); const progressFill = player.querySelector('.progress-fill'); const timeLabel = player.querySelector('.time-label'); const volumeSlider = player.querySelector('.volume-slider'); function formatTime(seconds) { if (isNaN(seconds)) return '0:00'; const mins = Math.floor(seconds / 60); const secs = Math.floor(seconds % 60); return mins + ':' + String(secs).padStart(2, '0'); } function updateTime() { const current = audio.currentTime || 0; const duration = audio.duration || 0; const progress = duration ? (current / duration) * 100 : 0; progressFill.style.width = progress + '%'; timeLabel.textContent = formatTime(current) + ' / ' + formatTime(duration); } playBtn.addEventListener('click', async function () { if (audio.paused) { try { window.__pauseOtherOp2Players(player); await audio.play(); playBtn.textContent = '❚❚'; } catch (err) { console.error('Playback error:', err); } } else { audio.pause(); playBtn.textContent = '▶'; } }); audio.addEventListener('loadedmetadata', updateTime); audio.addEventListener('timeupdate', updateTime); audio.addEventListener('play', function () { playBtn.textContent = '❚❚'; }); audio.addEventListener('pause', function () { playBtn.textContent = '▶'; }); audio.addEventListener('ended', function () { playBtn.textContent = '▶'; progressFill.style.width = '0%'; }); progressWrap.addEventListener('click', function (e) { const rect = progressWrap.getBoundingClientRect(); const x = e.clientX - rect.left; const pct = x / rect.width; if (!isNaN(audio.duration)) { audio.currentTime = pct * audio.duration; } }); volumeSlider.addEventListener('input', function () { audio.volume = parseFloat(this.value); }); audio.volume = parseFloat(volumeSlider.value); updateTime(); })();
0:00 / 0:00Luiz Toffoli II - Intro
Vol
(function () { const player = document.querySelector('.op2-player[data-player-id="track-luiz-toffoli-ii-intro"]'); if (!player || player.dataset.initialized === 'true') return; player.dataset.initialized = 'true'; const audio = player.querySelector('.audio-player'); const playBtn = player.querySelector('.play-btn'); const progressWrap = player.querySelector('.progress-wrap'); const progressFill = player.querySelector('.progress-fill'); const timeLabel = player.querySelector('.time-label'); const volumeSlider = player.querySelector('.volume-slider'); function formatTime(seconds) { if (isNaN(seconds)) return '0:00'; const mins = Math.floor(seconds / 60); const secs = Math.floor(seconds % 60); return mins + ':' + String(secs).padStart(2, '0'); } function updateTime() { const current = audio.currentTime || 0; const duration = audio.duration || 0; const progress = duration ? (current / duration) * 100 : 0; progressFill.style.width = progress + '%'; timeLabel.textContent = formatTime(current) + ' / ' + formatTime(duration); } playBtn.addEventListener('click', async function () { if (audio.paused) { try { window.__pauseOtherOp2Players(player); await audio.play(); playBtn.textContent = '❚❚'; } catch (err) { console.error('Playback error:', err); } } else { audio.pause(); playBtn.textContent = '▶'; } }); audio.addEventListener('loadedmetadata', updateTime); audio.addEventListener('timeupdate', updateTime); audio.addEventListener('play', function () { playBtn.textContent = '❚❚'; }); audio.addEventListener('pause', function () { playBtn.textContent = '▶'; }); audio.addEventListener('ended', function () { playBtn.textContent = '▶'; progressFill.style.width = '0%'; }); progressWrap.addEventListener('click', function (e) { const rect = progressWrap.getBoundingClientRect(); const x = e.clientX - rect.left; const pct = x / rect.width; if (!isNaN(audio.duration)) { audio.currentTime = pct * audio.duration; } }); volumeSlider.addEventListener('input', function () { audio.volume = parseFloat(this.value); }); audio.volume = parseFloat(volumeSlider.value); updateTime(); })();
0:00 / 0:00Hungrs - Mono No Aware
Vol
(function () { const player = document.querySelector('.op2-player[data-player-id="track-hungrs-mono-no-aware"]'); if (!player || player.dataset.initialized === 'true') return; player.dataset.initialized = 'true'; const audio = player.querySelector('.audio-player'); const playBtn = player.querySelector('.play-btn'); const progressWrap = player.querySelector('.progress-wrap'); const progressFill = player.querySelector('.progress-fill'); const timeLabel = player.querySelector('.time-label'); const volumeSlider = player.querySelector('.volume-slider'); function formatTime(seconds) { if (isNaN(seconds)) return '0:00'; const mins = Math.floor(seconds / 60); const secs = Math.floor(seconds % 60); return mins + ':' + String(secs).padStart(2, '0'); } function updateTime() { const current = audio.currentTime || 0; const duration = audio.duration || 0; const progress = duration ? (current / duration) * 100 : 0; progressFill.style.width = progress + '%'; timeLabel.textContent = formatTime(current) + ' / ' + formatTime(duration); } playBtn.addEventListener('click', async function () { if (audio.paused) { try { window.__pauseOtherOp2Players(player); await audio.play(); playBtn.textContent = '❚❚'; } catch (err) { console.error('Playback error:', err); } } else { audio.pause(); playBtn.textContent = '▶'; } }); audio.addEventListener('loadedmetadata', updateTime); audio.addEventListener('timeupdate', updateTime); audio.addEventListener('play', function () { playBtn.textContent = '❚❚'; }); audio.addEventListener('pause', function () { playBtn.textContent = '▶'; }); audio.addEventListener('ended', function () { playBtn.textContent = '▶'; progressFill.style.width = '0%'; }); progressWrap.addEventListener('click', function (e) { const rect = progressWrap.getBoundingClientRect(); const x = e.clientX - rect.left; const pct = x / rect.width; if (!isNaN(audio.duration)) { audio.currentTime = pct * audio.duration; } }); volumeSlider.addEventListener('input', function () { audio.volume = parseFloat(this.value); }); audio.volume = parseFloat(volumeSlider.value); updateTime(); })();
0:00 / 0:00Shaman - Fairy Tale
Vol
(function () { const player = document.querySelector('.op2-player[data-player-id="track-shaman-fairy-tale"]'); if (!player || player.dataset.initialized === 'true') return; player.dataset.initialized = 'true'; const audio = player.querySelector('.audio-player'); const playBtn = player.querySelector('.play-btn'); const progressWrap = player.querySelector('.progress-wrap'); const progressFill = player.querySelector('.progress-fill'); const timeLabel = player.querySelector('.time-label'); const volumeSlider = player.querySelector('.volume-slider'); function formatTime(seconds) { if (isNaN(seconds)) return '0:00'; const mins = Math.floor(seconds / 60); const secs = Math.floor(seconds % 60); return mins + ':' + String(secs).padStart(2, '0'); } function updateTime() { const current = audio.currentTime || 0; const duration = audio.duration || 0; const progress = duration ? (current / duration) * 100 : 0; progressFill.style.width = progress + '%'; timeLabel.textContent = formatTime(current) + ' / ' + formatTime(duration); } playBtn.addEventListener('click', async function () { if (audio.paused) { try { window.__pauseOtherOp2Players(player); await audio.play(); playBtn.textContent = '❚❚'; } catch (err) { console.error('Playback error:', err); } } else { audio.pause(); playBtn.textContent = '▶'; } }); audio.addEventListener('loadedmetadata', updateTime); audio.addEventListener('timeupdate', updateTime); audio.addEventListener('play', function () { playBtn.textContent = '❚❚'; }); audio.addEventListener('pause', function () { playBtn.textContent = '▶'; }); audio.addEventListener('ended', function () { playBtn.textContent = '▶'; progressFill.style.width = '0%'; }); progressWrap.addEventListener('click', function (e) { const rect = progressWrap.getBoundingClientRect(); const x = e.clientX - rect.left; const pct = x / rect.width; if (!isNaN(audio.duration)) { audio.currentTime = pct * audio.duration; } }); volumeSlider.addEventListener('input', function () { audio.volume = parseFloat(this.value); }); audio.volume = parseFloat(volumeSlider.value); updateTime(); })();
0:00 / 0:00Ars Goetia - Azi Dahaka
Vol
(function () { const player = document.querySelector('.op2-player[data-player-id="track-ars-goetia-azi-dahaka"]'); if (!player || player.dataset.initialized === 'true') return; player.dataset.initialized = 'true'; const audio = player.querySelector('.audio-player'); const playBtn = player.querySelector('.play-btn'); const progressWrap = player.querySelector('.progress-wrap'); const progressFill = player.querySelector('.progress-fill'); const timeLabel = player.querySelector('.time-label'); const volumeSlider = player.querySelector('.volume-slider'); function formatTime(seconds) { if (isNaN(seconds)) return '0:00'; const mins = Math.floor(seconds / 60); const secs = Math.floor(seconds % 60); return mins + ':' + String(secs).padStart(2, '0'); } function updateTime() { const current = audio.currentTime || 0; const duration = audio.duration || 0; const progress = duration ? (current / duration) * 100 : 0; progressFill.style.width = progress + '%'; timeLabel.textContent = formatTime(current) + ' / ' + formatTime(duration); } playBtn.addEventListener('click', async function () { if (audio.paused) { try { window.__pauseOtherOp2Players(player); await audio.play(); playBtn.textContent = '❚❚'; } catch (err) { console.error('Playback error:', err); } } else { audio.pause(); playBtn.textContent = '▶'; } }); audio.addEventListener('loadedmetadata', updateTime); audio.addEventListener('timeupdate', updateTime); audio.addEventListener('play', function () { playBtn.textContent = '❚❚'; }); audio.addEventListener('pause', function () { playBtn.textContent = '▶'; }); audio.addEventListener('ended', function () { playBtn.textContent = '▶'; progressFill.style.width = '0%'; }); progressWrap.addEventListener('click', function (e) { const rect = progressWrap.getBoundingClientRect(); const x = e.clientX - rect.left; const pct = x / rect.width; if (!isNaN(audio.duration)) { audio.currentTime = pct * audio.duration; } }); volumeSlider.addEventListener('input', function () { audio.volume = parseFloat(this.value); }); audio.volume = parseFloat(volumeSlider.value); updateTime(); })();
0:00 / 0:00Ars Goetia - Bed The Priest
Vol
(function () { const player = document.querySelector('.op2-player[data-player-id="track-ars-goetia-bed-the-priest"]'); if (!player || player.dataset.initialized === 'true') return; player.dataset.initialized = 'true'; const audio = player.querySelector('.audio-player'); const playBtn = player.querySelector('.play-btn'); const progressWrap = player.querySelector('.progress-wrap'); const progressFill = player.querySelector('.progress-fill'); const timeLabel = player.querySelector('.time-label'); const volumeSlider = player.querySelector('.volume-slider'); function formatTime(seconds) { if (isNaN(seconds)) return '0:00'; const mins = Math.floor(seconds / 60); const secs = Math.floor(seconds % 60); return mins + ':' + String(secs).padStart(2, '0'); } function updateTime() { const current = audio.currentTime || 0; const duration = audio.duration || 0; const progress = duration ? (current / duration) * 100 : 0; progressFill.style.width = progress + '%'; timeLabel.textContent = formatTime(current) + ' / ' + formatTime(duration); } playBtn.addEventListener('click', async function () { if (audio.paused) { try { window.__pauseOtherOp2Players(player); await audio.play(); playBtn.textContent = '❚❚'; } catch (err) { console.error('Playback error:', err); } } else { audio.pause(); playBtn.textContent = '▶'; } }); audio.addEventListener('loadedmetadata', updateTime); audio.addEventListener('timeupdate', updateTime); audio.addEventListener('play', function () { playBtn.textContent = '❚❚'; }); audio.addEventListener('pause', function () { playBtn.textContent = '▶'; }); audio.addEventListener('ended', function () { playBtn.textContent = '▶'; progressFill.style.width = '0%'; }); progressWrap.addEventListener('click', function (e) { const rect = progressWrap.getBoundingClientRect(); const x = e.clientX - rect.left; const pct = x / rect.width; if (!isNaN(audio.duration)) { audio.currentTime = pct * audio.duration; } }); volumeSlider.addEventListener('input', function () { audio.volume = parseFloat(this.value); }); audio.volume = parseFloat(volumeSlider.value); updateTime(); })();
0:00 / 0:00Ars Goetia - Ars Goetia
Vol
(function () { const player = document.querySelector('.op2-player[data-player-id="track-ars-goetia-ars-goetia"]'); if (!player || player.dataset.initialized === 'true') return; player.dataset.initialized = 'true'; const audio = player.querySelector('.audio-player'); const playBtn = player.querySelector('.play-btn'); const progressWrap = player.querySelector('.progress-wrap'); const progressFill = player.querySelector('.progress-fill'); const timeLabel = player.querySelector('.time-label'); const volumeSlider = player.querySelector('.volume-slider'); function formatTime(seconds) { if (isNaN(seconds)) return '0:00'; const mins = Math.floor(seconds / 60); const secs = Math.floor(seconds % 60); return mins + ':' + String(secs).padStart(2, '0'); } function updateTime() { const current = audio.currentTime || 0; const duration = audio.duration || 0; const progress = duration ? (current / duration) * 100 : 0; progressFill.style.width = progress + '%'; timeLabel.textContent = formatTime(current) + ' / ' + formatTime(duration); } playBtn.addEventListener('click', async function () { if (audio.paused) { try { window.__pauseOtherOp2Players(player); await audio.play(); playBtn.textContent = '❚❚'; } catch (err) { console.error('Playback error:', err); } } else { audio.pause(); playBtn.textContent = '▶'; } }); audio.addEventListener('loadedmetadata', updateTime); audio.addEventListener('timeupdate', updateTime); audio.addEventListener('play', function () { playBtn.textContent = '❚❚'; }); audio.addEventListener('pause', function () { playBtn.textContent = '▶'; }); audio.addEventListener('ended', function () { playBtn.textContent = '▶'; progressFill.style.width = '0%'; }); progressWrap.addEventListener('click', function (e) { const rect = progressWrap.getBoundingClientRect(); const x = e.clientX - rect.left; const pct = x / rect.width; if (!isNaN(audio.duration)) { audio.currentTime = pct * audio.duration; } }); volumeSlider.addEventListener('input', function () { audio.volume = parseFloat(this.value); }); audio.volume = parseFloat(volumeSlider.value); updateTime(); })();
0:00 / 0:00Ars Goetia - Outro
Vol
(function () { const player = document.querySelector('.op2-player[data-player-id="track-ars-goetia-outro"]'); if (!player || player.dataset.initialized === 'true') return; player.dataset.initialized = 'true'; const audio = player.querySelector('.audio-player'); const playBtn = player.querySelector('.play-btn'); const progressWrap = player.querySelector('.progress-wrap'); const progressFill = player.querySelector('.progress-fill'); const timeLabel = player.querySelector('.time-label'); const volumeSlider = player.querySelector('.volume-slider'); function formatTime(seconds) { if (isNaN(seconds)) return '0:00'; const mins = Math.floor(seconds / 60); const secs = Math.floor(seconds % 60); return mins + ':' + String(secs).padStart(2, '0'); } function updateTime() { const current = audio.currentTime || 0; const duration = audio.duration || 0; const progress = duration ? (current / duration) * 100 : 0; progressFill.style.width = progress + '%'; timeLabel.textContent = formatTime(current) + ' / ' + formatTime(duration); } playBtn.addEventListener('click', async function () { if (audio.paused) { try { window.__pauseOtherOp2Players(player); await audio.play(); playBtn.textContent = '❚❚'; } catch (err) { console.error('Playback error:', err); } } else { audio.pause(); playBtn.textContent = '▶'; } }); audio.addEventListener('loadedmetadata', updateTime); audio.addEventListener('timeupdate', updateTime); audio.addEventListener('play', function () { playBtn.textContent = '❚❚'; }); audio.addEventListener('pause', function () { playBtn.textContent = '▶'; }); audio.addEventListener('ended', function () { playBtn.textContent = '▶'; progressFill.style.width = '0%'; }); progressWrap.addEventListener('click', function (e) { const rect = progressWrap.getBoundingClientRect(); const x = e.clientX - rect.left; const pct = x / rect.width; if (!isNaN(audio.duration)) { audio.currentTime = pct * audio.duration; } }); volumeSlider.addEventListener('input', function () { audio.volume = parseFloat(this.value); }); audio.volume = parseFloat(volumeSlider.value); updateTime(); })();

Project Prequel - Original Soundtrack

I composed and produced the soundtrack for Project Prequel, an indie 2D survival horror game by Studio Vyrsar Games. Built around piano, strings, and atmospheres, the score was designed to express both the game’s tension and the humanity of its survivors.


Under The Hood

A few orchestration breakdown videos straight from instagram

Collaboration Covers

Youtube collaborative projects featuring musicians from all over the world

YouTube video thumbnail
(function () { const launcher = document.querySelector('.yt-video[data-video-player-id="yt-fbD_cokcIjo"]'); const modal = document.getElementById('videoModal-yt-fbD_cokcIjo'); const frame = document.getElementById('videoFrame-yt-fbD_cokcIjo'); if (!launcher || !modal || !frame || launcher.dataset.initialized === 'true') return; launcher.dataset.initialized = 'true'; const closeBtn = modal.querySelector('.video-close-btn'); const backdrop = modal.querySelector('.video-modal-backdrop'); const videoId = 'fbD_cokcIjo'; function openVideo() { frame.src = 'https://www.youtube.com/embed/' + videoId + '?autoplay=1&rel=0'; modal.classList.add('active'); document.body.style.overflow = 'hidden'; } function closeVideo() { frame.src = ''; modal.classList.remove('active'); document.body.style.overflow = ''; } launcher.addEventListener('click', openVideo); closeBtn.addEventListener('click', closeVideo); backdrop.addEventListener('click', closeVideo); document.addEventListener('keydown', function (e) { if (e.key === 'Escape' && modal.classList.contains('active')) { closeVideo(); } }); })();

GHOST OPERA - KAMELOT

YouTube video thumbnail
(function () { const launcher = document.querySelector('.yt-video[data-video-player-id="yt-gnxFgAUeQXE"]'); const modal = document.getElementById('videoModal-yt-gnxFgAUeQXE'); const frame = document.getElementById('videoFrame-yt-gnxFgAUeQXE'); if (!launcher || !modal || !frame || launcher.dataset.initialized === 'true') return; launcher.dataset.initialized = 'true'; const closeBtn = modal.querySelector('.video-close-btn'); const backdrop = modal.querySelector('.video-modal-backdrop'); const videoId = 'gnxFgAUeQXE'; function openVideo() { frame.src = 'https://www.youtube.com/embed/' + videoId + '?autoplay=1&rel=0'; modal.classList.add('active'); document.body.style.overflow = 'hidden'; } function closeVideo() { frame.src = ''; modal.classList.remove('active'); document.body.style.overflow = ''; } launcher.addEventListener('click', openVideo); closeBtn.addEventListener('click', closeVideo); backdrop.addEventListener('click', closeVideo); document.addEventListener('keydown', function (e) { if (e.key === 'Escape' && modal.classList.contains('active')) { closeVideo(); } }); })();

THE ESSENCE OF SILENCE - EPICA

YouTube video thumbnail
(function () { const launcher = document.querySelector('.yt-video[data-video-player-id="yt-5n9NzqScx1Q"]'); const modal = document.getElementById('videoModal-yt-5n9NzqScx1Q'); const frame = document.getElementById('videoFrame-yt-5n9NzqScx1Q'); if (!launcher || !modal || !frame || launcher.dataset.initialized === 'true') return; launcher.dataset.initialized = 'true'; const closeBtn = modal.querySelector('.video-close-btn'); const backdrop = modal.querySelector('.video-modal-backdrop'); const videoId = '5n9NzqScx1Q'; function openVideo() { frame.src = 'https://www.youtube.com/embed/' + videoId + '?autoplay=1&rel=0'; modal.classList.add('active'); document.body.style.overflow = 'hidden'; } function closeVideo() { frame.src = ''; modal.classList.remove('active'); document.body.style.overflow = ''; } launcher.addEventListener('click', openVideo); closeBtn.addEventListener('click', closeVideo); backdrop.addEventListener('click', closeVideo); document.addEventListener('keydown', function (e) { if (e.key === 'Escape' && modal.classList.contains('active')) { closeVideo(); } }); })();

GHOST OPERA ORCHESTRAL

YouTube video thumbnail
(function () { const launcher = document.querySelector('.yt-video[data-video-player-id="yt-aAME6cgYnrg"]'); const modal = document.getElementById('videoModal-yt-aAME6cgYnrg'); const frame = document.getElementById('videoFrame-yt-aAME6cgYnrg'); if (!launcher || !modal || !frame || launcher.dataset.initialized === 'true') return; launcher.dataset.initialized = 'true'; const closeBtn = modal.querySelector('.video-close-btn'); const backdrop = modal.querySelector('.video-modal-backdrop'); const videoId = 'aAME6cgYnrg'; function openVideo() { frame.src = 'https://www.youtube.com/embed/' + videoId + '?autoplay=1&rel=0'; modal.classList.add('active'); document.body.style.overflow = 'hidden'; } function closeVideo() { frame.src = ''; modal.classList.remove('active'); document.body.style.overflow = ''; } launcher.addEventListener('click', openVideo); closeBtn.addEventListener('click', closeVideo); backdrop.addEventListener('click', closeVideo); document.addEventListener('keydown', function (e) { if (e.key === 'Escape' && modal.classList.contains('active')) { closeVideo(); } }); })();

GHOST LOVE SCORE - NIGHTWISH


Sinestesia13

Análises de trilhas sonoras

YouTube video thumbnail
(function () { const launcher = document.querySelector('.yt-video[data-video-player-id="yt-DOjbVmQe2bQ"]'); const modal = document.getElementById('videoModal-yt-DOjbVmQe2bQ'); const frame = document.getElementById('videoFrame-yt-DOjbVmQe2bQ'); if (!launcher || !modal || !frame || launcher.dataset.initialized === 'true') return; launcher.dataset.initialized = 'true'; const closeBtn = modal.querySelector('.video-close-btn'); const backdrop = modal.querySelector('.video-modal-backdrop'); const videoId = 'DOjbVmQe2bQ'; function openVideo() { frame.src = 'https://www.youtube.com/embed/' + videoId + '?autoplay=1&rel=0'; modal.classList.add('active'); document.body.style.overflow = 'hidden'; } function closeVideo() { frame.src = ''; modal.classList.remove('active'); document.body.style.overflow = ''; } launcher.addEventListener('click', openVideo); closeBtn.addEventListener('click', closeVideo); backdrop.addEventListener('click', closeVideo); document.addEventListener('keydown', function (e) { if (e.key === 'Escape' && modal.classList.contains('active')) { closeVideo(); } }); })();

A Música de Star Wars
Uma Nova Esperança

YouTube video thumbnail
(function () { const launcher = document.querySelector('.yt-video[data-video-player-id="yt-MNrByE3NkyI"]'); const modal = document.getElementById('videoModal-yt-MNrByE3NkyI'); const frame = document.getElementById('videoFrame-yt-MNrByE3NkyI'); if (!launcher || !modal || !frame || launcher.dataset.initialized === 'true') return; launcher.dataset.initialized = 'true'; const closeBtn = modal.querySelector('.video-close-btn'); const backdrop = modal.querySelector('.video-modal-backdrop'); const videoId = 'MNrByE3NkyI'; function openVideo() { frame.src = 'https://www.youtube.com/embed/' + videoId + '?autoplay=1&rel=0'; modal.classList.add('active'); document.body.style.overflow = 'hidden'; } function closeVideo() { frame.src = ''; modal.classList.remove('active'); document.body.style.overflow = ''; } launcher.addEventListener('click', openVideo); closeBtn.addEventListener('click', closeVideo); backdrop.addEventListener('click', closeVideo); document.addEventListener('keydown', function (e) { if (e.key === 'Escape' && modal.classList.contains('active')) { closeVideo(); } }); })();

A Música de Joker
Hildur Guðnadóttir