v3s移植infones游戏模拟器后出现声音滞后问题,声音大约滞后5秒钟左右。哪位知道如何解决呢?
离线
是不是v3s linux驱动的问题?之前看论坛帖子好像有相关反馈
离线
是不是v3s linux驱动的问题?之前看论坛帖子好像有相关反馈
那个延时500ms左右,不会延迟这么久
离线
微凉VeiLiang 说:是不是v3s linux驱动的问题?之前看论坛帖子好像有相关反馈
那个延时500ms左右,不会延迟这么久
有什么解决办法吗?困扰很久了。。
离线
是不是v3s linux驱动的问题?之前看论坛帖子好像有相关反馈
驱动那个帖子我看了,好像不管用。我看您也搞过nes移植,您那个是否有声音延迟问题呢?
离线
微凉VeiLiang 说:是不是v3s linux驱动的问题?之前看论坛帖子好像有相关反馈
驱动那个帖子我看了,好像不管用。我看您也搞过nes移植,您那个是否有声音延迟问题呢?
恩,我移植的Infones没有发现有声音延迟的问题。就是声音上有些难听,还有就是像热血格斗的打斗的声音没有,跳跃的声音很怪
离线
@微凉VeiLiang
你好,你用的内核是bsp内核还是主线内核?
离线
发现在执行Infones的时候有这个报错
root@SnailPi:~/packet/arm-NES-linux-master/linux# ./InfoNES ~/game/h1.nes
/dev/input/event0 dev not found
fb width:320 height:240
Sound Hardware Init ----
sound Init
sound Open------
ALSA lib dlmisc.c:170:(snd_dlsym_verify) unable to verify version for symbol snd_func_private_integer
ALSA lib conf.c:4556:(_snd_config_evaluate) symbol snd_func_private_integer is not defined inside (null)
ALSA lib conf.c:5047:(snd_config_expand) Evaluate error: No such device or address
ALSA lib conf.c:3694:(snd_config_hook_load) Unable to expand filenames in the pre-load section
ALSA lib conf.c:3572:(snd_config_hooks_call) function snd_config_hook_load_for_all_cards returned error: No such device or address
Sound Hardware Init doen!!----
通过增加打印记录代码
arm-NES-linux-master/linux/InfoNES_System_Linux.cpp
/*===================================================================*/
/* */
/* InfoNES_SoundOpen() : Sound Open */
/* */
/*===================================================================*/
int InfoNES_SoundOpen( int samples_per_sync, int sample_rate )
{
printf("open 1\n");
//sample_rate 采样率 44100
//samples_per_sync 735
unsigned int rate = sample_rate;
snd_pcm_hw_params_t *hw_params;
if(0 > snd_pcm_open(&playback_handle, "default", SND_PCM_STREAM_PLAYBACK, 0))
{
printf("snd_pcm_open err\n");
return -1;
}
printf("open 2\n");
if(0 > snd_pcm_hw_params_malloc(&hw_params))
{
printf("snd_pcm_hw_params_malloc err\n");
return -1;
}
printf("open 3\n");
if(0 > snd_pcm_hw_params_any(playback_handle, hw_params))
{
printf("snd_pcm_hw_params_any err\n");
return -1;
}
printf("open 4\n");
if(0 > snd_pcm_hw_params_set_access(playback_handle, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED))
{
printf("snd_pcm_hw_params_any err\n");
return -1;
}
printf("open 5\n");
//8bit PCM 数据
if(0 > snd_pcm_hw_params_set_format(playback_handle, hw_params, SND_PCM_FORMAT_U8))
{
printf("snd_pcm_hw_params_set_format err\n");
return -1;
}
printf("open 6\n");
if(0 > snd_pcm_hw_params_set_rate_near(playback_handle, hw_params, &rate, 0))
{
printf("snd_pcm_hw_params_set_rate_near err\n");
return -1;
}
printf("open 7\n");
//单声道 非立体声
if(0 > snd_pcm_hw_params_set_channels(playback_handle, hw_params, 1))
{
printf("snd_pcm_hw_params_set_channels err\n");
return -1;
}
printf("open 8\n");
if(0 > snd_pcm_hw_params(playback_handle, hw_params))
{
printf("snd_pcm_hw_params err\n");
return -1;
}
printf("open 9\n");
snd_pcm_hw_params_free(hw_params);
if(0 > snd_pcm_prepare(playback_handle))
{
printf("snd_pcm_prepare err\n");
return -1;
}
printf("open 10\n");
return 1;
}
打印如下记录
root@SnailPi:~/packet/arm-NES-linux-master/linux# ./InfoNES ~/game/h1.nes
/dev/input/event0 dev not found
fb width:320 height:240
open 1
ALSA lib dlmisc.c:170:(snd_dlsym_verify) unable to verify version for symbol snd_func_private_integer
ALSA lib conf.c:4556:(_snd_config_evaluate) symbol snd_func_private_integer is not defined inside (null)
ALSA lib conf.c:5047:(snd_config_expand) Evaluate error: No such device or address
ALSA lib conf.c:3694:(snd_config_hook_load) Unable to expand filenames in the pre-load section
ALSA lib conf.c:3572:(snd_config_hooks_call) function snd_config_hook_load_for_all_cards returned error: No such device or address
open 2
open 3
open 4
open 5
open 6
open 7
open 8
open 9
open 10
^C
离线
我在F1C100S上出现相同的问题,声音滞后或者严重发出哒哒哒的声音,通过截取波形观察,发现音频信号是间隔输出的。
再之后我屏蔽framebuff写入的代码,声音恢复正常。
尝试将infones的游戏画面分辨率设置到100*100的小分辨率,声音效果变好了很多。
推测infoNES中画面输出与音频输出使用同一个线程操作,导致再framebuff刷新期间占用了太多时间,alsa没能填充足够的数据,导致声音延迟。
验证:在infones中,有一个调音参数数组,修改其中的值,包括采样率,数据段长度等,声音要么滞后,要么哒哒哒响。
结论:F1C100S性能拉跨,或者去优化代码。
离线