Pergunta

Tudo bem, eu tenho dois problemas. Estou usando AVAudioPlayer para reproduzir um arquivo de áudio simples no formato .caf. O que estou tentando fazer é ter um botão de reprodução e pausa. Aqui está um exemplo de um IBAction simples de jogar o áudio de um botão.

- (IBAction) clear {
NSString *path = [[NSBundle mainBundle] pathForResource:@"clear" ofType:@"caf"];
AVAudioPlayer* myAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
myAudio.delegate = self;
myAudio.volume = 1.0;
myAudio.numberOfLoops = 0;
[myAudio play]; 
}

Então, quando eu ir em frente e criar outro IBAction com o método ...

- (IBAction) stopaudio {
[myAudio stop];
audioPlayer.currentTime = 0;
}

Eu compilar e Xcode me diz que myAudio na stopaudio IBAction não está definido. Como posso corrigi-lo assim que eu sou capaz de acessar myAudio em outro IBAction?

A minha segunda pergunta é que eu estou usando NavigationController configurar um TableView, quando eu fazer uma seleção leva-me a um UIView com um botão Voltar para voltar para a TableView. O que eu estou tentando fazer é matar qualquer áudio que eu jogar no UIView quando eu voltar para o TableView. O código acima é parte do código que eu vou ter na UIView.

Também uma pergunta rápida. Vamos dizer que eu tenho um arquivo de áudio que é de 1 minuto de duração. Clicando jogo novamente irá sobrepor uma nova instância de que o áudio antes da instância antiga é feito jogando. Como posso verificar para ver se myAudio está jogando e não permitir que ele seja jogado novamente até myAudio é jogo acabado?

Obrigado!

Foi útil?

Solução

Em primeiro lugar, você deve ler a documentação. Ela irá remover quase todas as suas perguntas. No entanto, para ter acesso a sua instância do AVAudioPlayer de todos os métodos de sua classe, você deve defini-lo em seu arquivo .h. Para parar o seu jogador em retornar à tela anterior, [myAudio stop] chamada em seu método viewWillDisappear:(BOOL)animated. Sobre sua última pergunta. Se você definir myAudio em seu arquivo .h, você será capaz de verificar se ele está jogando agora. smth como

- (IBAction) clear {
    if(![myAudio isPlaying]){
        [myAudio play]; 
    }

}

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top