reprodução tidal-hifi com alsa pára após cada música

1

Estou usando o hidal de maré para streaming de música no Linux (Mint 17, 64bit) com o Chrome. Para obter uma reprodução perfeita, eu desativo o pulseaudio ($ killall pulseaudio) para usar puramente o alsa para processamento de áudio e saída para o meu USB DAC. No entanto, a reprodução é interrompida após cada música e eu preciso selecionar manualmente a próxima música a ser reproduzida. Surpreendentemente, este problema não ocorre se eu usar pulseaudio.

Eu ficaria grato por quaisquer dicas de como corrigir esse comportamento.

    
por tammo 04.12.2014 / 23:18

1 resposta

2

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:

  1. Instale o mitmproxy e os seus certificados
  2. Configure seu navegador para usar o mitmproxy (você pode encontrar a configuração em Menu- > Configurações- > Avançado- > Alterar configurações de proxy
  3. 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
    
por 17.08.2015 / 17:33