gpt4 book ai didi

iOS AVAudioPlayer 再次播放声音

转载 作者:行者123 更新时间:2023-11-29 02:08:43 26 4
gpt4 key购买 nike

嘿,我有几个 AVAudioPlayers,每个都包含一种声音。如果我多次按下同一个按钮,它应该从头开始重复声音。如果我之后按下另一个按钮,运行声音将停止,以便为新按钮“腾出空间”。

我为此使用的代码:

-(void) plays:(int)p{  // p is the index of the sound being triggered

if([players[p] isPlaying])
{ // setting the time back to 0 makes
players[p].currentTime = 0.0; // the player automatically play again
}
else
{
[players[p] play]; // if not playing, start playing
}

if(last!=p)
{ // if the last sound is different from the current
[players[last] stop]; // stop the last one
players[last].currentTime = 0.0;} // put its position back to 0

last=p; // set the 'last' variable

}

但是,再次按下同一个按钮会出现一点延迟(可能是 20 毫秒),在此期间听不到任何声音。这是时候,AVAudioPlayer 似乎需要“倒回”轨道以便再次播放。解决这个问题的一个想法是为每个声音创建多个 AVAudioPlayer 对象,但这会产生一些糟糕的代码!关于如何加快此过程的任何想法?

谢谢,亚历克斯

编辑:播放 2 种不同的声音效果非常好,我听不到它们之间的任何延迟,因为我预先 prepareToPlay 所有声音。

最佳答案

我知道如何消除 20 毫秒的差距,但请先考虑是否要这样做。

想象一下,如果您立即从声音文件的中间点跳到开头,没有任何间隙。更好的是,下载 Audacity 并听听它的声音。由于不连续,您会听到令人不快的噼啪声或爆裂声。也许那 1/50 秒的沉默实际上听起来比立即重新开始要好。

如果你想要一个不间断的音频流,你将不得不放弃简单的 AVAudioPlayer 接口(interface)并构建一个 AUGraph。当然,这意味着要学习复杂的音频接口(interface),学习所有关于音频格式的知识。然后您必须弄清楚要将哪些数据填充到音频流中。

如何使循环听起来不错?您可以尝试在触摸点淡出,然后淡入。或者您可以在循环的开始和结束处搜索零交叉点(零交叉点是声波值为 0 的地方。它们发生始终以单声道输出,但如果您的输出是立体声,可能会更难找到。)最终这听起来会比 20 毫秒的静音更好吗?在进入学习 AUGraph 界面的漫长道路之前,走出 Audacity 并尝试循环。

关于iOS AVAudioPlayer 再次播放声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29502454/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com