2011-06-05 49 views
0

我已經做了一個iPhone應用程序,我按UIButton和聲音播放。但是當我再次按下時,我希望它停下來。我有很多聲音,但是我只希望在按兩次這個聲音時停止。如何阻止AVFoundation中的聲音?

這是我使用的代碼!

-(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];  
} 

回答

0

我對xcode不太瞭解,所以這可能是錯的,如果是這樣,請告訴我。

看起來,「音頻」應成爲一個類成員,而不是本地成員的函數,在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]; 
} 
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 


} 

希望這可以幫助別人!