【问题标题】:spotify session callback get_audio_buffer_statsspotify 会话回调 get_audio_buffer_stats
【发布时间】:2013-07-07 15:30:34
【问题描述】:

我正在尝试在 Spotify 中制作一个收集音频数据的程序。我在API中看到有一个回调get_audio_buffer_stats,它有stutter和samples。我尝试将其添加到程序中(我只是在修改点唱机示例),但即使我关闭 wifi 并等待歌曲停止播放,它也只会为口吃和采样打印 0。通过添加代码,我的意思是我为它制作了一个回调函数,并将它添加到会话回调中。我错过了什么吗?谁能帮我让这个回调工作?谢谢!我的代码如下:

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 = &notify_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,
};

【问题讨论】:

    标签: spotify libspotify


    【解决方案1】:

    我认为get_audio_buffer_stats 的想法是 应该告诉 libspotify 如果你有口吃以及你的 缓冲区。当它调用get_audio_buffer_stats 时,它会传递一个指向您应该填写的结构的指针。大概如果您告诉libspotify 您正在遭受口吃,它会尝试向您发送更多数据以使您的缓冲区更满。通过告诉 libspotify 你的缓冲区有多满,它可以适应你的时钟漂移,导致你消耗音频的速度比它预期的稍快或慢。

    【讨论】:

    • 这家伙很准!资料来源:我在 Spotify 工作,从事 libspotify 项目。
    • 我该怎么做呢?那我要不要另辟蹊径?我将如何收集这些数据以提供给回调/告诉 libspotify 我正在遭受口吃?
    • 另外,我应该填写 sp_audio_buffer_stats 的结构吗?如果是这样,我应该从哪里获取数据以填充样本和口吃?
    • @user2565444 好吧,你是怎么播放音频的?大概您在需要时将其输入到其他 API 中,不是吗?在这种情况下,您将管理自己的缓冲区,并且会知道您是否运行不足。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-27
    • 2019-05-27
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    相关资源
    最近更新 更多