2
-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{

    [self NextHeading]; // this plays an mp3 file

    [self NextHeadingMeaning]; // this plays an Mp3 file

}

メソッドのみ[self NextHeadingMeaning]が呼び出され、NextHeading毎回メソッドが失われる

-(IBAction) NextHeading{ 
    [audio stop]; 

    NSString *Filename = [[NSString alloc]initWithFormat:@"CH%@S%@",Heading,Meaning];
    Filepath = [[NSBundle mainBundle]pathForResource:Filename ofType:@"mp3"]; 

    audio = [[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:Filepath] error:NULL]; 

    audio.delegate = self; 
    [audio play]; 
    [Filename autorelease]; 
}

-(IBAction) NextHeadingMeaning { 
    [audio stop]; 

     NSString *Filename = [[NSString alloc] initWithFormat:@"CH%@S%@",bold**Chapter**bold, Meaning]; 
     Filepath = [[NSBundle mainBundle]pathForResource:Filename ofType:@"mp3"]; 

     audio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:Filepath] error:NULL]; 

     audio.delegate = self; 
     [audio play]; 
     [Filename autorelease]; 
}

なぜこれが起こっているのですか?どうすれば解決できますか?

アドバイスをください、事前に感謝します。

4

2 に答える 2

2

最初の呼び出しをスキップしたり、ブレークポイントを設定したり、NSLog() で何かを出力したりする方法はありません。最も可能性の高い原因は、最初の方法が期待どおりに機能しないことです。これには、条件や特定のタイムアウトなど、さまざまな理由が考えられます。

編集:コードを見た後、変数の命名、変数のスコープなどの基本的なものが欠けているようです。単純にコードを実行するにはNSString *Filename..、2 番目のメソッドの文字列を置き換えるだけで、おそらく機能します。より良い選択は、Start Developing iOS Apps Todayにアクセスして、ロードマップに従うことです。

于 2012-04-22T09:57:38.817 に答える
2

プレーヤーとして1 つの iVar ( audio) を使用しました。 NextHeading&NextHeadingMeaningメッセージを送信すると、最初audioにファイルの init sound_1.mp3(mp3 ファイルが大きい場合は数秒かかります)、次に次の瞬間 (最初の mp3 ファイル開始されていないか、開始されたが停止し、その後に次のメッセージが続く場合)、別の mp3 ファイル (sound_2.mp3) で初期化アクションをやり直し、最後に 2 番目の mp3 ファイルの初期化audioが完了すると、 sound_2.mp3. NextHeadingそれがあなたがスキップされたと思う理由です。

したがって、この問題を解決するには、NSMutableArrayiVar (例: ) を使用して&の両方audioPlayersのローカルを作成し、それを にプッシュします。audioNextHeadingNextHeadingMeaningaudioPlayers

そしてできればサウンドファイルをプリロードしたほうがいいと思います。:)


編集:

playAtTime:代わりにメソッドがありplay、次のように、このメソッドで 2 番目のオーディオ プレーヤーの再生時間を遅らせることができます。

[audioPlayer playAtTime:(audioPlayer.deviceCurrentTime + delay)];

delay単位は秒 ( NSTimeInterval) です。

于 2012-04-22T11:11:53.707 に答える