Spotify 相同轨迹的不同帧数

Spotify 相同轨迹的不同帧数,spotify,libspotify,Spotify,Libspotify,在libspotify的jukebox.c示例中,我计算了music\u delivery回调中当前曲目的所有帧。当调用end\u of_track时,每次播放同一曲目的帧数都不同。因此,在歌曲结束几秒钟后,会调用曲目的end\u。每次播放的时间跨度都不同 我如何确定这首歌是否真的结束了?我是否必须以秒为单位计算歌曲的持续时间,并将其与采样率相乘,以便在歌曲结束时注意 为什么交付的帧比轨道所需的帧多?为什么音轨的end\u没有在它的真正末端被调用?或者我遗漏了什么?end\u of_track在

在libspotify的jukebox.c示例中,我计算了
music\u delivery
回调中当前曲目的所有帧。当调用
end\u of_track
时,每次播放同一曲目的帧数都不同。因此,在歌曲结束几秒钟后,会调用曲目的
end\u
。每次播放的时间跨度都不同

我如何确定这首歌是否真的结束了?我是否必须以秒为单位计算歌曲的持续时间,并将其与采样率相乘,以便在歌曲结束时注意


为什么交付的帧比轨道所需的帧多?为什么音轨的
end\u
没有在它的真正末端被调用?或者我遗漏了什么?

end\u of_track
在libspotify完成该曲目的音频帧传输后被调用。这不是关于播放的信息——我见过的每个播放实现都在libspotify和声音驱动程序之间保留一个内部缓冲区


这取决于你在哪里计数,这将解释你看到的差异。由于音频代码在libspotify之外,因此您需要自己跟踪声音驱动程序的实际运行情况,并停止播放、跳到下一个曲目或需要执行的任何操作
end\u of_track
基本上是为了让您知道,您可以关闭从传送回调到音频代码或类似线路的任何输出流

我只在“music_delivery”回调中计算,不在声音驱动程序实现中计算。我将每个“num\u frames”参数添加到一个全局变量中,并将其打印在“end\u of_track”中。我想知道为什么每次我流相同的轨道帧计数不同。当歌曲的持续时间为3:10时,如果采样率相同,则样本总数应始终相同。这是否会导致计数器更改以外的问题?有许多情况可能会导致后端交付不同版本的曲目(特别是在不同用户之间),这超出了堆栈溢出的范围。另外,音乐传递回调是在与其他线程不同的线程上调用的,因此请确保在重置计数器/等时没有遇到线程错误。不,我认为没有真正的问题。我想我可以在调用“end\u of_track”时通知我的播放层,以更新播放/暂停状态。此外,我认为我可以假设,只有完整的歌曲,而不是更多的音频数据,即使是任何沉默。