Avaudioplayer não está respondendo
-
20-09-2019 - |
Pergunta
Eu inicializo uma instância de Avaudioplayer:
NSString* path = [[NSBundle mainBundle] pathForResource:@"foo" ofType:@"wav"];
AVAudioPlayer* player =[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:nil]; //Returned object not nil, indicating that the file has loaded successfully
BOOL b = [player prepareToPlay]; //returns TRUE
BOOL b2 = [player play];
//returns TRUE, goes immediately to the next line since asynchronous
[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:1]; //wait 1 sec
printf("%10.4f\n",player.duration); //duration is 2s
printf("%10.4f\n",player.currentTime); //position remains 0
/* There is no sound output, player is also stuck since position==0 */
Alguém sabe por que o Avaudioplayer não está respondendo? Existe algo que estou negligenciando enquanto inicializa, interpretando o Audioplayer? Código de caldeira talvez?
Estou executando isso no simulador do iPhone. Além disso, o AudiosServicesPlaySystemSound () funciona para o mesmo arquivo, o que é intrigante, mas isso indica que a reprodução sonora também pode funcionar com a Avaudioplayer.
Solução
Eu tenho 2 sugestões rápidas:
Verifique se esse caminho realmente fornece dados. Aloc um objeto NSDATA usando [[nsdata aloc] initWithContentsOffile: Path] e inspecione -o no depurador para ver se você está realmente carregando esse arquivo WAV.
Eu escrevi um projeto de amostra que usa Avaudioplayer aqui: Exemplo de Avaudioplayer. Como o código é praticamente o mesmo que o seu, a única coisa que posso imaginar é que há um problema com seus dados.
Confira isso e veja se isso o leva a algum lugar!
Outras dicas
Acabei de ter um problema semelhante. Não tenho certeza se é a mesma solução, mas meu aplicativo registra áudio através do iPhone e depois a reproduz de volta ao usuário.
Eu pensei que estava fazendo a coisa correta dizendo à minha sessão de áudio que ela iria gravar dados, então eu fiz o seguinte:
[audioSession setCategory:AVAudioSessionCategoryRecord error:nil];
Usando essa reprodução de configuração funcionou no simulador, mas não no dispositivo ... o evento Didfinishishing nunca foi aumentado.
Eu removi essa linha depois de perceber que não precisava de uma reprodução de áudio começou a funcionar corretamente. Agora eu só preciso descobrir por que está tão quieto :)
Paulo