0

iOS は純粋な魔法にすぎないと確信し始めています。解決策について AVAudioPlayer に関する多数の投稿を調べましたが、どれも機能しませんでした。

アプリケーションが起動すると、MPMoviePlayerController から始まるムービーがあり、次のようなサウンドで AVAudioPlayer が開始されます。

    -(void)createAndPlayMovieFromURL:(NSURL *)movieURL sourceType:(MPMovieSourceType)sourceType{

        /* Create a new movie player object. */
       player = [[MPMoviePlayerController alloc] initWithContentURL:movieURL];
       player.controlStyle = MPMovieControlModeDefault;

        if (player) 
        {
            /* Save the movie object. */
            [self setMoviePlayerController:player];

            /* Specify the URL that points to the movie file. */
            [player setContentURL:movieURL];        

            /* If you specify the movie type before playing the movie it can result 
             in faster load times. */
            [player setMovieSourceType:sourceType];

            CGRect frame = CGRectMake(0, 0, 480, 320);

            /* Inset the movie frame in the parent view frame. */
            [[player view] setFrame:frame];

            [player view].backgroundColor = [UIColor blackColor];

            /* To present a movie in your application, incorporate the view contained 
             in a movie player’s view property into your application’s view hierarchy. 
             Be sure to size the frame correctly. */
            [self.view addSubview: [player view]];        
        }
    [[self moviePlayerController] play];
} 

そして音のために:

- (void)setupAudioPlayBack:(NSString *) path : (NSString *) extension{

    NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
                                         pathForResource:path
                                         ofType:extension]];
    NSError *error;
    audioPlayer = [[AVAudioPlayer alloc]
                   initWithContentsOfURL:url
                   error:&error];
    if (error)
    {
        NSLog(@"Error in audioPlayer: %@",
              [error localizedDescription]);
    } else {
        audioPlayer.delegate = self;
        [audioPlayer prepareToPlay];
    }
}

それでは、魔法の話をしましょう。最初の映画が再生されてサウンドが鳴るとき、サウンドは電話機の音量コントロールにもサイレント モード オン スイッチにも反応しません。

しかし、すぐに 2 番目の映画が独自のサウンドで再生され、すべて正常に動作します。サイレント モードがオンの場合はサウンドがありません。サイレント モードがオフの場合、ボリューム コントロールに応答します。3 番目の映画 - 再生も完璧です。

MPMoviePlayerControllerを使用しplayer.useApplicationAudioSession = NOてみました - 最初のサウンドがサイレント モードまたはボリューム コントロールに応答しないという問題を修正しましたが、2 番目のムービーの再生が開始されるとすぐにフリーズし、再生されるサウンドが元のサイズから約 2 にカットされます。秒。

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategorySoloAmbient error:nil];どこに設定しても役に立ちませんでした。

私の質問は、MPMoviePlayerController を AVAudioPlayer と問題なくやり取りさせる方法です...

4

1 に答える 1

2

わかりました、私は実際に解決策を見つけました (もう一度言いますが、魔法です)。

ViewController を起動したら、次のように設定します。

 - (void)viewDidLoad
{
    [self setupAudioPlayBack:@"sound1" :@"caf"];
    [self playMovieFile:[self localMovieURL:@"mov1" :@"mov"]];
    audioTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(playAudio) userInfo:nil repeats:NO];

    [super viewDidLoad];
}

playAudio メソッドは単純です:

 - (void)playAudio{

    [audioPlayer play];
}

わずか0.1ミリ秒のタイマーですべてが機能し(0.0は機能しません)、オーディオが終了する前に新しいビデオが開始されないようにするか、設定が破棄されるため、タイマーを無効にしてタイマーを再度やり直す必要があります.

于 2013-01-02T21:45:34.440 に答える