2016-04-10 4 views
1

さて、私はできるだけこのように説明しようとします。私のアプリには2つのオーディオプレーヤーがあり、私は自分の音楽ライブラリから各プレイヤーの曲を再生できるようにしたいと考えています。私が最初の曲を選んで作品を選んだとき、別の曲を選んだときに最初の曲がオフになり、両方のオーディオプレイヤーだけが選んだ曲を再生できるという問題があります。オーディオプレーヤーに2種類の曲を再生させるにはどうすればよいですか?ここに私が現在持っているコードは:2人のオーディオプレーヤーが2つの異なる曲を同時に再生するにはどうすればよいですか?

//EDITED CODE: 
class GameScene: SKScene, MPMediaPickerControllerDelegate, AVAudioPlayerDelegate { 

var mediaPicker: MPMediaPickerController? 
var mediaPicker2: MPMediaPickerController? 

var music2 = MPMediaItem() 
var music = MPMediaItem() 

var musicPlayer2 = AVAudioPlayer() 
var musicPlayer = AVAudioPlayer() 


func mediaPicker(mediaPicker: MPMediaPickerController, didPickMediaItems mediaItemCollection: MPMediaItemCollection) { 
mediaPicker.dismissViewControllerAnimated(true, completion: nil) 

let aMediaItem = mediaItemCollection.items[0] as MPMediaItem 
music = aMediaItem 
NSLog("\(aMediaItem.title)selected") 


let url: NSURL = (music.valueForProperty(MPMediaItemPropertyAssetURL) as? NSURL)! 

    do { 
     musicPlayer = try AVAudioPlayer(contentsOfURL: url) 

    } catch { 
     return 
    } 
     musicPlayer.pause() 
     leftPlayButton.hidden = false 




if mediaItemCollection.items.count > 1 { 
    let aMediaItem2 = mediaItemCollection.items[1] as MPMediaItem 
    music2 = aMediaItem2 

    let url2: NSURL = (music2.valueForProperty(MPMediaItemPropertyAssetURL) as? NSURL)! 

    do { 
     musicPlayer2 = try AVAudioPlayer(contentsOfURL: url2) 

    } catch { 
     return 
    } 
    musicPlayer2.pause() 
    rightPlayButton.hidden = false 

} 
} 
      if node.name == "addmusictoleft" { 
      mediaPicker = MPMediaPickerController(mediaTypes: .Music) 

      if let picker2 = mediaPicker{ 


       print("Successfully open media picker Left") 
       picker2.delegate = self 
       picker2.allowsPickingMultipleItems = true 
       picker2.showsCloudItems = false 
       picker2.prompt = "Pick a song for left player" 
       self.view?.window?.rootViewController!.presentViewController(picker2, animated: true, completion: nil) 

      } else { 
       print("PICKER WONT OPEN") 
      } 
     } 


      if node.name == "addmusictoright" { 
      mediaPicker2 = MPMediaPickerController(mediaTypes: .Music) 
      if let picker = mediaPicker2{ 


       print("Successfully open media picker Right") 
       picker.delegate = self 
       picker.allowsPickingMultipleItems = false 
       picker.showsCloudItems = false 
       picker.prompt = "Pick a song for right player" 
       self.view?.window?.rootViewController!.presentViewController(picker, animated: true, completion: nil) 

      } else { 
       print("PICKER WONT OPEN") 
      } 



     } 

答えて

1

私はデモプロジェクトを作って、それは私のiPadでうまく動作します。 ここに私のコードです。

ViewController.h

#import <UIKit/UIKit.h> 
#import <MediaPlayer/MediaPlayer.h> 
#import <AVFoundation/AVFoundation.h> 

@interface ViewController : UIViewController<MPMediaPickerControllerDelegate,AVAudioPlayerDelegate> 


@end 

ViewController.m

#import "ViewController.h" 


@interface ViewController(){ 

int counter; 

} 

@property AVAudioPlayer *avAudioPlayer; 
@property AVAudioPlayer *avAudioPlayer2; 

@end 

@implementation ViewController 

- (void)viewDidLoad { 

[super viewDidLoad]; 


counter = 0; 
self.avAudioPlayer.delegate = self; 
self.avAudioPlayer2.delegate = self; 

UIButton *button1 = [[UIButton alloc]initWithFrame:CGRectMake(120, 50, 80, 30)]; 
[button1 addTarget:self action:@selector(button1Click:) forControlEvents:UIControlEventTouchUpInside]; 
button1.backgroundColor = [UIColor yellowColor]; 
[button1 setTitle:@"play" forState:UIControlStateNormal]; 
[self.view addSubview:button1]; 


UIButton *button2 = [[UIButton alloc]initWithFrame:CGRectMake(120, 120, 80, 30)]; 
[button2 addTarget:self action:@selector(button2Click:) forControlEvents:UIControlEventTouchUpInside]; 
button2.backgroundColor = [UIColor yellowColor]; 
[button2 setTitle:@"Stop" forState:UIControlStateNormal]; 
[self.view addSubview:button2]; 

// Do any additional setup after loading the view, typically from a nib. 
} 

- (void)didReceiveMemoryWarning { 
[super didReceiveMemoryWarning]; 
// Dispose of any resources that can be recreated. 
} 

-(void)button2Click : (id)sender { 

if (counter == 0) { 

    [self.avAudioPlayer stop]; 
} 
if (counter == 1) { 

    [self.avAudioPlayer2 stop]; 
} 


counter ++; 

} 

-(void)button1Click : (id)sender { 

MPMediaPickerController *mediaPicker = [[MPMediaPickerController alloc] initWithMediaTypes: MPMediaTypeMusic]; 

mediaPicker.delegate = self; 
mediaPicker.allowsPickingMultipleItems = YES; 
mediaPicker.prompt = @"Select songs to play"; 
mediaPicker.showsCloudItems = NO; 

[self presentViewController:mediaPicker animated:YES completion:nil]; 

} 

-(void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection { 

    [self dismissViewControllerAnimated:YES completion:nil]; 


MPMediaItem *item = [[mediaItemCollection items]objectAtIndex:0]; 
NSURL *myURL = [item valueForProperty:MPMediaItemPropertyAssetURL]; 


NSError *err1; 


self.avAudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:myURL error:&err1]; 


if (err1) { 

    NSLog(@"@err1 : %@",[err1 localizedDescription]); 

} 


[self.avAudioPlayer play]; 


if ([mediaItemCollection items].count >1) { 

    MPMediaItem *item2 = [[mediaItemCollection items]objectAtIndex:1]; 
    NSURL *myURL2 = [item2 valueForProperty:MPMediaItemPropertyAssetURL]; 
    NSError *err2; 
    self.avAudioPlayer2 = [[AVAudioPlayer alloc]initWithContentsOfURL:myURL2 error:&err2]; 
    if (err2) { 
     NSLog(@"err2 : %@",[err2 localizedDescription]); 
    } 
    [self.avAudioPlayer2 play]; 

} 

// NSLog(@"mediaitemCollection : %@",[mediaItemCollection items]); 


} 

-(void)mediaPickerDidCancel:(MPMediaPickerController *)mediaPicker { 

[self dismissViewControllerAnimated:YES completion:nil ]; 

} 

@end 

クリックして再生ボタンと、我々はYESallowsPickingMultipleItemsを設定するので、2つの音楽ファイルを選びます。

私のipadでうまく動作します。必要に応じて迅速に変換してください。それは難しい仕事ではないと思います。

これがあなたの問題を解決することを願っています。 :)

+0

リンクをありがとうございますが、私は見ることができる迅速なものは何ですか? – coding22

+0

私は自分の答えを更新しました。それはあなたを助けるかもしれない場合それを迅速にチェックするための1つのリンクを持っています。 – Lion

+0

私はこれらの2行のコードをそれぞれのif文に追加しようとしましたが、うまくいきません。私はこれをどのように働かせることができるか知っていますか? AVAudioSession.sharedInstance()。setActive(true) AVAudioSession.sharedInstance()を試してください。setCategory(AVAudioSessionCategoryPlayAndRecord、withOptions:AVAudioSessionCategoryOptions.MixWithOthers) – coding22

関連する問題