Sei que essa é uma pergunta antiga, mas recentemente encontrei o mesmo problema e encontrei uma solução.
O problema parece derivar do pré-carregamento de faixas no Tidal. Como você não está usando o pulseaudio O Google Chrome cria um novo controlador de áudio toda vez que uma faixa começa a ser reproduzida a partir da sua lista de reprodução. O jogador de Tidal espera que o mesmo controlador de áudio esteja no lugar quando a próxima música começar a tocar, levando ao desligamento.
A maneira como consertei o problema foi depurando o código do player javascript do Tidal injetando minhas alterações através de um proxy 'man in the middle' (procure pelo mitmproxy, ótimo software). Ao fazer isso, eu poderia mudar o comportamento do jogador. Alterando a seguinte função:
function m(t) {
t || w.pause(), g(), e.trigger("track:switched", A), I = void 0, S && x === A ? (o.player !== o.preloadPlayer && (o.player.stop(), o.setMediaPlayer(o.preloadPlayer)), u(T, S, t), x = void 0, T = void 0, S = void 0) : f(A, p, k)
}
para
function m(t) {
t || w.pause(), g(), e.trigger("track:switched", A), I = void 0, S && x === A, f(A, p, k)
}
Eu me livrei do problema. A última função sempre chamará a função 'f', criando assim um novo player, evitando o problema de pré-carregamento.
Os passos que você precisa seguir são:
- Instale o mitmproxy e os seus certificados
- Configure seu navegador para usar o mitmproxy (você pode encontrar a configuração em Menu- > Configurações- > Avançado- > Alterar configurações de proxy
- Execute o mitmproxy desta forma: mitmproxy -p 8888 --script tidal.py
O conteúdo do Tidal.py está abaixo. Note que você terá que baixar o arquivo .js e fazer as alterações, e colocá-lo em um local onde ele possa ser carregado, por exemplo, no mesmo diretório que o arquivo tidal.py. Boa sorte!
import cStringIO
from libmproxy.protocol.http import decoded
def response(context, flow):
if flow.match("~u http://listen.tidal.com/v1.6.4-p-5/app.js") and flow.response.headers.("content-type", "").startswith("application/x-javascript"):
with decoded(flow.response):
try:
injected_script = cStringIO.StringIO(open('./app.js', 'rb').read())
flow.response.content = injected_script.getvalue()
except Exception as e:
print e
pass