Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 加载到内存中的音频文件在播放前有500毫秒的延迟_C#_Monogame_Naudio - Fatal编程技术网

C# 加载到内存中的音频文件在播放前有500毫秒的延迟

C# 加载到内存中的音频文件在播放前有500毫秒的延迟,c#,monogame,naudio,C#,Monogame,Naudio,在我的游戏中,我使用提供的AudioPlaybackEngine,CachedSound,以及CachedSoundSampleProvider类的提示和代码,这些类从光盘中获取音频文件并将其样本加载到内存中的float[],通过将其混合到始终播放的MixingSampleProvider上播放 现在,当我的测试播放器sprite在空中跳跃时,此代码用于播放跳跃声音: private CachedSound jumpSound; ... jumpSound = new CachedSound(C

在我的游戏中,我使用提供的
AudioPlaybackEngine
CachedSound
,以及
CachedSoundSampleProvider
类的提示和代码,这些类从光盘中获取音频文件并将其样本加载到内存中的
float[]
,通过将其混合到始终播放的
MixingSampleProvider
上播放

现在,当我的测试播放器sprite在空中跳跃时,此代码用于播放跳跃声音:

private CachedSound jumpSound;
...
jumpSound = new CachedSound(ContentPackageManager.GetAbsoluteFilePath("nsmbwiiJump"));
...
AudioPlaybackEngine.Instance.PlaySound(jumpSound);

然而,声音是在500毫秒左右的延迟后播放的,无论我是从磁盘还是从内存播放,延迟都是一样的。这里出了什么问题?

由于引擎盖下的
WaveOut
所使用的缓冲区持续时间,存在一些延迟。基本上你是在玩一个缓冲区,同时填充另一个缓冲区。因此,您至少落后于一个缓冲区的持续时间。NAudio允许您在初始化
WaveOut
设备之前配置缓冲区持续时间和缓冲区数量。但是,越低,退出的可能性越大,这听起来像是音频中的小故障。

是否检查了文件内容,以确保开始时没有500毫秒的空样本?音频开始时有200毫秒的静音-删除它有帮助,但是在调用
PlaySound
和听到声音播放之间仍然有一些延迟。感谢您的回复!我将测试几个不同的缓冲区持续时间/计数,以查看短音效的最佳点。将延迟设置为150毫秒效果非常好-几乎不明显的延迟和平滑的音频。谢谢