;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

Supla se emociona no clipe de nova música com João Suplicy e Erasmo Carlos

Supla se emociona após um show lotado da Brothers of Brazil em Las Vegas - Reprodução
Supla se emociona após um show lotado da Brothers of Brazil em Las Vegas Imagem: Reprodução

De Splash, em São Paulo

13/07/2021 12h02

A Brothers of Brazil está de volta! Depois de "Sai Fora Bolsonaro", a banda dos irmãos Supla e João Suplicy lança hoje "Brothers Again" ("Irmãos Novamente"), com letra de ninguém menos que Erasmo Carlos.

O clipe intercala imagens dos dois irmãos andando por São Paulo e em turnê internacional. Logo no começo, Supla aparece às lágrimas após um show lotado da banda em Las Vegas (EUA). "Achei muito bacana deixar isso no clipe, essa parte bem emocional", ele explica a Splash.

Eu saí muito emocionado, e pegou essa imagem minha falando sobre o Brothers, que é um sonho que começou de uma ideia e de repente a gente estava tocando pelo mundo todo esse som punkanova. Supla

Não sabe o que é punkanova? Ele explica: "Punkanova é a mistura do violão invocado do João Suplicy com a atitude punk bossa do Supla".

Nos comentários do vídeo, os fãs elogiam: "Que clipe liiindo. Uma vibe muito boa, nesse momento de pandemia que muitas pessoas perderam entes queridos. Demonstrar sentimento é o que há. Essa é uma música linda pra dedicar aos amigos/irmãos punk e afins, pra demonstrar um pouquinho da importância deles", diz Elís Vitória.

Confira a letra de "Brothers Again":

Me lembro quando nosso canto emudeceu
Brothers Again, Brothers Again

O surto dos amigos, e olhos rasos d'água
Brothers Again, Brothers Again

Parecia o caos enquanto se perguntavam
Brothers Again, Brothers Again

Cadê os irmãos? Por que razão não cantavam?
Brothers Again, Brothers Again

Eu não sou você, nem quero ser, não tem nada a ver
Não somos um buquê, nem precisamos de um porquê

A nuvem deu um tempo e o Sol brilhou na madrugada
Dando sentido e clareando nossa estrada

Brothers Again
Me lembro quando nosso canto emudeceu
Brothers Again, Brothers Again

O surto dos amigos, e olhos rasos d'água
Brothers Again, Brothers Again

Parecia o caos enquanto se perguntavam
Brothers Again, Brothers Again

Cadê os irmãos? Por que razão não cantavam?
Brothers Again, Brothers Again

Eu não sou você, nem quero ser, não tem nada a ver
A gente briga e brigo ainda mais
Se for por você
A nuvem deu um tempo e o Sol brilhou na madrugada
Dando sentido e clareando nossa estrada

Brothers Again
Me lembro quando nosso canto emudeceu
Brothers Again, Brothers Again

O surto dos amigos, e olhos rasos d'água
Brothers Again, Brothers Again

Parecia o caos enquanto se perguntavam
Brothers Again, Brothers Again

Cadê os irmãos? Por que razão não cantavam?
Brothers Again, Brothers Again

Brothers Again...