我在用潮汐高保真用于在 Linux(Mint 17,64 位)下使用 Chrome 播放音乐。为了实现位完美播放,我关闭了 pulseaudio ($killall pulseaudio),纯粹使用 alsa 进行音频处理并输出到我的 USB DAC。但是,播放在每首歌曲后都会停止,我需要手动选择下一首要播放的歌曲。令人惊讶的是,如果我使用 pulseaudio,就不会出现这个问题。
我将非常感激任何关于如何修复此行为的提示。
答案1
我意识到这是一个老问题,但我最近遇到了同样的问题并找到了解决方案。
问题似乎源于 Tidal 中曲目的预加载。由于您没有使用 pulseaudio,因此每次从播放列表中开始播放曲目时,Google Chrome 都会创建一个新的音频控制器。Tidal 的播放器希望在下一首歌曲开始播放时使用相同的音频控制器,从而导致挂断。
我解决问题的方法是调试 Tidal 的 javascript 播放器代码,通过“中间人”代理注入我的更改(查找 mitmproxy,很棒的软件)。通过这样做,我可以改变播放器的行为。通过更改以下函数:
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)
}
到
function m(t) {
t || w.pause(), g(), e.trigger("track:switched", A), I = void 0, S && x === A, f(A, p, k)
}
我解决了这个问题。最后一个函数将始终调用“f”函数,从而创建一个新播放器,避免预加载问题。
您需要执行的步骤是:
- 安装 mitmproxy和其证书
- 设置你的浏览器以使用 mitmproxy(你可以在菜单->设置->高级->更改代理设置下找到该设置
- 像这样运行 mitmproxy:mitmproxy -p 8888 --script tidal.py
Tidal.py 的内容如下。请注意,您必须下载 .js 文件并进行更改,然后将其放在可以加载的位置,例如与 tidal.py 文件相同的目录中。祝你好运!
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