0

私は学ぼうとしてきましたがAVAudioPlayer、それは行動です。

だからまず私が書いた

AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL error:nil];
player.numberOfLoops = -1;
[player play];

アプリケーションがバックグラウンドに入らない限り、うまく機能しました。それで、もう一度検索したところ、plistにエントリを追加する必要があり、次のコードも書いていることがわかりました

NSError *activationError = nil;
    if([[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&activationError] == NO)
        NSLog(@"*** %@ ***", activationError);

    [[AVAudioSession sharedInstance] setActive: YES error: nil];
    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

これで、サンプル アプリケーションはバックグラウンドでもサウンドを再生します。その後、別の問題に遭遇しました。このすべての処理の前にスリープ状態にすると、スリープ中にアプリケーションをバックグラウンドで実行し、他のアプリから音楽の再生を開始します。この場合、アプリケーションはサウンドを再生できません。他の音楽アプリが取ったオーディオセッションを取得していないことが原因と思われます。

質問 1.他のサウンドが再生されているかどうかを検出する方法があることは理解していますが、それを停止する方法がわかりませんでした。iPodのような標準アプリの音を止める方法はありますが、他のアプリの音を止める一般的な方法はありますか? 2. 失敗という結果をもたらします[player play];NO失敗の原因を見つけるにはどうすればよいですか。メソッドを実装audioPlayerDecodeErrorDidOccur:error:しましたが、呼び出されません。

これについてあなたの知識を共有してください。同じことに関するスタックオーバーフローの質問のほとんどをすでに調べましたが、この特定の問題に役立つものは何も見つかりませんでした。

4

1 に答える 1

0
-(void)loadPlayer
{
        NSURL *audioFileLocationURL = [NSURL URLWithString:[[NSBundle mainBundle] URLForResource:@"01-YedhiYedhi[www.AtoZmp3.in]" withExtension:@"mp3"]];
        NSError *error;
        audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:audioFileLocationURL error:&error];
        [audioPlayer setNumberOfLoops:-1];
        if (error)
        {
            NSLog(@"%@", [error localizedDescription]);

            [[self volumeControl] setEnabled:NO];
            [[self playPauseButton] setEnabled:NO];

            [[self alertLabel] setText:@"Unable to load file"];
            [[self alertLabel] setHidden:NO];
        }
        else
        {
            [[self alertLabel] setText:[NSString stringWithFormat:@"%@ has loaded", str]];
            [[self alertLabel] setHidden:NO];

            //Make sure the system follows our playback status
            [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
            [[AVAudioSession sharedInstance] setActive: YES error: nil];

            //Load the audio into memory
            [audioPlayer prepareToPlay];
        }
    }
    if (!self.audioPlayer.playing) {
        [self playAudio];

    } else if (self.audioPlayer.playing) {
        [self pauseAudio];

    }
}

- (void)playAudio {
    [audioPlayer play];
}
于 2013-02-22T08:43:52.383 に答える