我正在尝试在Spotify中制作一个收集音频数据的程序。我在API中看到有一个回调get_audio_buffer_stats,它有断断续续的样本。我尝试将其添加到程序中(我只是修改了自动点唱机示例),但它只会打印出0用于口吃和样本,即使我关闭了wifi并等待歌曲停止播放。通过添加代码,我的意思是我为它创建了一个回调函数,并将其添加到会话回调中。我错过了什么吗?谁能帮助我让这个回调起作用?谢谢!我的代码如下:
static void get_audio_buffer_stats(sp_session *sess, sp_audio_buffer_stats *stats)
{
pthread_mutex_lock(&g_notify_mutex);
//log session data
stuttervariable = stats->stutter;
samplesvariable = stats->samples;
printf("stutter, %d\n", stuttervariable);
printf("samples, %d\n", samplesvariable);
pthread_cond_signal(&g_notify_cond);
pthread_mutex_unlock(&g_notify_mutex);
}
/**
* The session callbacks
*/
static sp_session_callbacks session_callbacks = {
.logged_in = &logged_in,
.notify_main_thread = ¬ify_main_thread,
.music_delivery = &music_delivery,
.metadata_updated = &metadata_updated,
.play_token_lost = &play_token_lost,
.log_message = NULL,
.end_of_track = &end_of_track,
.get_audio_buffer_stats = &get_audio_buffer_stats,
};
答案 0 :(得分:2)
我认为get_audio_buffer_stats
的想法是你应该告诉 libspotify 如果你遭受了口吃以及留下了多少样本你的缓冲区。当它调用get_audio_buffer_stats
时,它会传递一个指向你应该填写的结构的指针。大概如果你告诉libspotify你正在遭受口吃,它会尝试向你发送更多的数据来保持你的缓冲更充分。通过告诉libspotify你的缓冲区有多满,它可以适应你时钟的漂移,导致你的音频消耗速度比预期的要快或慢。