Как мне остановить звук в AVFoundation?

#iphone #objective-c #avfoundation

#iPhone #цель-c #avfoundation #objective-c

Вопрос:

Я создал приложение для 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];    
}
  

Ответ №1:

Возможно, это не поможет вам, но может помочь другим.

Что вам следует сделать, так это переменную класса В class.h, создать переменную AVAudioPlayer:

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

В class.m измените его систематизацию и его освобождение, а позже этот метод был изменен:

 -(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


}
  

Надеюсь, это кому-то поможет!!

Ответ №2:

Я не очень разбираюсь в 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];
}