Spotify 应用程序:更改位置时触发功能

Posted

技术标签:

【中文标题】Spotify 应用程序:更改位置时触发功能【英文标题】:Spotify app: Fire function on change position 【发布时间】:2013-11-14 19:09:27 【问题描述】:

在 Spotify html5 应用程序(1.0 版)中,每次播放器的当前位置发生变化(models.player.position)时,我如何调用一个函数?我的意思是,就像一个 setInterval 毫秒函数,但与播放器同步。 我尝试过“change:track”和“change”,它们在轨道改变和播放器暂停时(分别)完美触发。

models.player.addEventListener('change:track', updateCurrentTrack);
models.player.addEventListener('change', updateStatus);

在此先感谢,并为我的英语不好感到抱歉!

编辑:每秒或 500 毫秒触发的函数将是完美的。

【问题讨论】:

你的意思是每秒钟都有一个音轨变化吗? 看起来不像。我在想你可以在 api/audio 中使用 RealtimeAnalyzer 或 BufferAnalyzer,但这似乎开销很大,而且那里没有间隔控制。 @Thomas,我试过 RealtimeAnalyzer,它似乎每 250 毫秒触发一次,但我无法从中获取当前位置。 models.player.position 开火时不准确吗? 【参考方案1】:

在我的桌面上,每 850-950 毫秒打印一次。

require(['$api/audio', '$api/models'], function (audio, models) 
    var analyzer = audio.RealtimeAnalyzer.forPlayer(models.player);

    var last_position = -1;
    analyzer.addEventListener('audio', function (evt) 
        models.player.load('position').done(function() 
            if(models.player.position != last_position)  
                console.log(models.player.position + ", " + (models.player.position-last_position)); 
                last_position = models.player.position;
            
        );
    );
);

肯定不是最好的解决方案。

OTOH,实时分析器应该通过音乐可靠地报告信息,我怀疑你可以只计算调用次数并假设你非常接近 256 毫秒的倍数。

【讨论】:

谢谢!这正是我想要的!这不是最好的解决方案,但它确实有效。 如果你这样做,你可以通过添加一些东西来跳过对 models.player.load('position') 的所有其他调用来提高性能。

以上是关于Spotify 应用程序:更改位置时触发功能的主要内容,如果未能解决你的问题,请参考以下文章

带有 Spotify iOS SDK 的 Cordova iOS - 触发身份验证

locationManager:didEnterRegion:在没有位置更改的情况下触发

应用程序变量更改时触发 Firestore 查询

Spotify 应用程序/主目录位置(Windows 本地开发)?

当 S3 中的文件更改时,在 Elastic beanstalk 应用程序的所有实例中触发操作

关闭时从另一个应用程序打开 Spotify 主窗口