2013-09-11 1 views
2

Я хочу воспроизвести звуковой файл (который я перетащил в xcode и скопировать в проект), используя av foundation со следующим кодом, но сбой.iOS - как воспроизвести звуковой файл с использованием avfoundation

Я думаю, NSURL *url = [[NSURL alloc] initWithString:@"sound.caf"]; вот где все идет не так, но я понятия не имею, кроме этого, как я мог бы создать AVAsset с этим звуковым файлом (конечно, это было бы другое место, которое пойдет не так). В любом случае, может ли кто-нибудь предложить мне некоторые подсказки? благодаря

AVMutableComposition *composition = [AVMutableComposition composition]; 
CMPersistentTrackID trackID = kCMPersistentTrackID_Invalid; 
AVMutableCompositionTrack *compositionTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:trackID]; 

NSURL *url = [[NSURL alloc] initWithString:@"sound.caf"]; 

AVAsset *songAsset = [AVURLAsset URLAssetWithURL:url options:nil]; 
AVAssetTrack *assetTrack = [[songAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0]; 


CMTime startTime = CMTimeMakeWithSeconds(0, 1); 
CMTime endTime = songAsset.duration; 
CMTimeRange tRange = CMTimeRangeMake(startTime, endTime); 

NSError *error = nil; 

[compositionTrack insertTimeRange:tRange ofTrack:assetTrack atTime:CMTimeMake(0, 44100) error:&error]; 

AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:composition]; 
self.player = [[AVPlayer alloc] initWithPlayerItem:playerItem]; 

[self.player play]; 

ответ

2

Этот код должен помочь вам:

NSString *soundPath = [[NSBundle mainBundle] pathForResource:@"myfile" ofType:@"wav"]; 
    NSURL *soundURL = [NSURL fileURLWithPath:soundPath]; 

    NSError *error = nil; 
    AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundURL error:&error]; 

    if (error) { 
     NSLog(@"%@",[error localizedDescription]); 
    } 

    [player play]; 
+0

Этот код работает. Спасибо – Newbie

+0

Спасибо, Сергей, очень удобно это найти. Если вы пробуете это в OS X в программе CLI, вам нужно зациклиться до тех пор, пока игрок не закончит. После запуска воспроизведения я использовал следующий цикл: «do {CFRunLoopRunInMode (kCFRunLoopDefaultMode, 0.25, false);} while (player.isPlaying);" – Charlesism

1

Попробуйте

NSString *shutterplayerPath = [[NSBundle mainBundle] pathForResource:@"shutter" ofType:@"mp3"]; 
      NSString *tickplayerPath = [[NSBundle mainBundle] pathForResource:@"tick" ofType:@"wav"]; 
      shutterAudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[[NSURL alloc] initFileURLWithPath: shutterplayerPath] error:NULL]; 
      tickAudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[[NSURL alloc] initFileURLWithPath:tickplayerPath] error:NULL]; 
    [shutterAudioPlayer play]; 
    [tickAudioPlayer play];