gpt4 book ai didi

objective-c - 如何淡化 NSSound 对象

转载 作者:太空狗 更新时间:2023-10-30 03:54:33 26 4
gpt4 key购买 nike

我已经为我的 Mac 编写了一个便宜又欢快的音板,我用 NSSound 播放各种声音,如下所示:

-(void)play:(NSSound *)soundEffect:(BOOL)stopIfPlaying {
BOOL wasPlaying = FALSE;

if([nowPlaying isPlaying]) {
[nowPlaying stop];
wasPlaying = TRUE;
}

if(soundEffect != nowPlaying)
{
[soundEffect play];
nowPlaying = soundEffect;
} else if(soundEffect == nowPlaying && ![nowPlaying isPlaying] && !wasPlaying) {
[nowPlaying play];
}
}

我不希望它停止,而是希望它在几秒左右的时间内淡出。

最佳答案

这是该方法的最终版本:

-(void)play:(NSSound *)soundEffect:(BOOL)stopIfPlaying {
BOOL wasPlaying = FALSE;

if([nowPlaying isPlaying]) {
struct timespec ts;
ts.tv_sec = 0;
ts.tv_nsec = 25000000;

// If the sound effect is the same, fade it out.
if(soundEffect == nowPlaying)
{
for(int i = 1; i < 30; ++i)
{
[nowPlaying setVolume: (1.0 / i )];
nanosleep(&ts, &ts);
}
}

[nowPlaying stop];
[nowPlaying setVolume:1];
wasPlaying = TRUE;
}

if(soundEffect != nowPlaying)
{
[soundEffect play];
nowPlaying = soundEffect;
} else if(soundEffect == nowPlaying && ![nowPlaying isPlaying] && !wasPlaying) {
[nowPlaying play];
}
}

所以它只会在我传递相同的声音(即单击相同的按钮)时淡出,而且,我选择了 nanosleep 而不是 sleep ,因为它的粒度为 1 秒。

我纠结了一段时间,想弄清楚为什么我的 200 毫秒延迟似乎没有任何效果,但是 200 毫微秒并没有那么长,对吧:-)

关于objective-c - 如何淡化 NSSound 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/288687/

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