如何停止 AudioToolbox 声音?

Posted

技术标签:

【中文标题】如何停止 AudioToolbox 声音?【英文标题】:How can I stop AudioToolbox sound? 【发布时间】:2013-03-12 19:38:46 【问题描述】:

我有两种不同的按钮按下声音动作。当我按下一个按钮时它应该播放一个声音,当我按下另一个时它应该停止第一个声音并播放另一个声音,我该怎么做?

谢谢,

-(void) onButtonPressAlbina 
    [soundID2 stop];     
    NSString *soundPath = [[NSBundle mainBundle] pathForResource:@"albina" ofType:@"m4a"];
    SystemSoundID soundID;
    AudioservicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath: soundPath], &soundID);
    AudioServicesPlaySystemSound (soundID);


-(void) onButtonPressBalena 
    NSString *soundPath = [[NSBundle mainBundle] pathForResource:@"balena" ofType:@"m4a"];
    SystemSoundID soundID;
    AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath: soundPath], &soundID);
    AudioServicesPlaySystemSound (soundID);    

【问题讨论】:

【参考方案1】:

您无法停止通过“AudioServicesPlaySystemSound”播放的声音,但您可以改为使用“AVAudioPlayer”。

在您的对象中保留对“AVAudioPlayer”的引用,然后您可以在需要停止它时调用"stop"。

播放

#import <AudioToolbox/AudioToolbox.h>
#import <AVFoundation/AVAudioPlayer.h>
AVAudioPlayer  *player;

// ...

NSString *path;
NSError *error;
path = [[NSBundle mainBundle] pathForResource:@"albina" ofType:@"m4a"];
if ([[NSFileManager defaultManager] fileExistsAtPath:path]) 
    
  player = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:&error];
  player.volume = 0.5f;
  [player prepareToPlay];
  [player setNumberOfLoops:0];
  [player play];    
 

停止

if (player != nil)

  if (player.isPlaying == YES)
    [player stop];

【讨论】:

以上是关于如何停止 AudioToolbox 声音?的主要内容,如果未能解决你的问题,请参考以下文章

降低 AudioToolbox 播放的音量

Monotouch 停止播放音频剪辑

使用多点连接收到消息时如何发出声音通知?

如何制作 SystemSoundID 数组?使用 AudioToolbox 框架

Swift 中的 AudioToolBox - 声音在模拟器中有效,但在我的 iPad 上无效

Xcode - AudioToolbox/AudioToolbox.h 文件未找到