AVAudioPlayerでサウンドを再生するときアプリケーションがフリーズします

StackOverflow https://stackoverflow.com/questions/2145502

  •  23-09-2019
  •  | 
  •  

質問

私は、いくつかのミニゲームで未就学児のためのアプリを作っています。そのうちの一つが絵に「間違っているものを」見つけることが含まれます。彼らは路上で子供の演奏、pling音を押した場合たとえば、子供は通りを移動し、ラベルは「1/5のエラーが見つかった」に更新されます。彼らはそれらすべてを見つけた場合、彼らは新しいトラフィックエラーが発生した新しいのViewControllerに移動します。

すべてがうまく働いている...ほとんどの時間を。しかし、すべて一度でアプリがフリーズし、その後plingを果たしている、としています。私はそれは私がそのアウトコメントあれば、それは関数毎回のようなので、(AVAudioplayerと)実際の音の再生に関係していると考えています。

は、エラーが発見されたときに呼び出される関数がこれです

-(void)fantKnapp{

    NSLog(@"fant en knapp");
    int ant =[self.antall intValue];
    ant++;
    NSLog(@"antall %i",ant);
    self.antall=[NSNumber numberWithInt:ant];
    self.poeng.text=[NSString stringWithFormat: @"%i/5 funnet",ant];

    if(ant==5){
        NSLog(@"Du klarte alle!");
        klartAlleView.hidden=NO;
        spillIgjen.hidden=NO;
        nestebrettKnapp.hidden=NO;
        navtestAppDelegate *appDelegate=(navtestAppDelegate *)[[UIApplication sharedApplication] delegate];
        [appDelegate spillLyd:@"du_klarte_alle"];
    }
    else{
        navtestAppDelegate *appDelegate=(navtestAppDelegate *)[[UIApplication sharedApplication] delegate];
        [appDelegate spillLyd:@"cling_1"];
    }
}

このコード発見「antall」、検出されたエラー(点)の現在の数。すべてのエラーは、特定の音が再生されて発見された場合(これは常に動作します)。そうでない場合は別の音が再生されます。これは、appdelegateファイル内の関数を呼び出すことによって行われます。

-(void)spillLyd:(NSString*) filnavn{
    NSString *audioFilePath=[[NSBundle mainBundle] pathForResource:filnavn ofType:@"aif"];
    NSURL *audioFileURL=[NSURL fileURLWithPath:audioFilePath];
    self.lydspiller=[[[AVAudioPlayer alloc] initWithContentsOfURL:audioFileURL error:nil] autorelease];
    [self.lydspiller prepareToPlay];
    [self.lydspiller play];
    NSLog(@"spiller lyden");
}
それはdoesntの間、

これは49/50例ではうまく動作しますが、すべてで一度。面白いことは、音がプレーをしていることですが、アプリがフリーズし、ラベルが更新されない(self.poeng.text = ...)。しかし、すべてのNSLogのコメントは、ポイントの新しい番号を含め、示されています。サウンドが再生される前に、私はこれが起こることを期待...

これはAVAudioplayerの問題ですか?誰もが同じような経験を持っていますか?この1上のCAN誰の助け私を?私は任意のヘルプや提案のために感謝しています...

(ノルウェーについて申し訳ありません。それはおそらくdoesntの...それはどんな簡単に私を助けるために作る)

正しい解決策はありません

他のヒント

あなたはおそらく、あなたがプレーヤーからエラーをトラップしようとすることができるようにAVAudioPlayerDelegateメソッドを実装する必要があります。プレイヤーでもアプリがフリーズかかわらず正常に終了していることであれば、デリゲートレポートは、エラーが最も可能性の高いプレイヤーには関係ありません。

私はあなたのために感じます。いくつかのデバッグタスクの明確なしかし非常に断続的なバグを追跡するよりもイライラしています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top