如何在AVFoundation中停止声音?

时间:2011-06-05 22:50:42

标签: iphone objective-c avfoundation

我做了一个iPhone应用程序,我按下UIButton并播放声音。但当我再次按它时,我希望它停止。我有很多声音,但我只想在按两次时停止播放声音。

这是我使用的代码!

-(IBAction)pushBeat {   
    NSString *path =[[NSBundle mainBundle]
    pathForResource:@"beat1" ofType:@"mp3"];
    AVAudioPlayer* theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
    theAudio.delegate = self;
    [theAudio play];    
}

2 个答案:

答案 0 :(得分:1)

也许它不会对你有所帮助,但它可以为其他人提供帮助。

你应该做的是一个类变量 在class.h中,创建一个AVAudioPlayer变量:

{
   AVAudioPlayer *actualAudioPlayer_;
}
@property(nonatomic, retain) AVAudioPlayer *actualAudioPlayer;

在class.m中,使他的sythesize和他的dealloc,然后这是改变的方法:

-(IBAction)pushBeat {   
    NSString *path =[[NSBundle mainBundle]
    pathForResource:@"beat1" ofType:@"mp3"];

    [self.actualAudioPlayer stop]; //NEW

    AVAudioPlayer* theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];

    self.actualAudioPlayer = theAudio; //NEW
    [sel.actualAudioPlayer play];  //NEW
    [theAudio release]; //NEW


}

希望这有助于某人!!

答案 1 :(得分:0)

我对xcode了解不多,所以这可能是错的,如果是的话请告诉我。

似乎“theAudio”应该成为一个类成员,而不是该函数的本地成员,在C ++中你会这样做(再次,因为我不知道xcode这是伪代码)。

class MyClass {
public:
  MyClass();
  ~MyClass();
  void pushBeat();
private:
  AVAudioPlayer* theAudio;
}

MyClass::MyClass() {
  theAudio = NULL;
}

MyClass::~MyClass() {
  delete theAudio;
}

void pushBeat() {
  if (!theAudio) {
    theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
    theAudio.delegate = self;
  }

  if (!theAudio.playing)
    [theAudio play];
  else
    [theAudio stop];
}