coding22
coding22

Reputation: 689

How do I get my two audioplayers to play two different songs simultaneously?

Okay so i will try to explain this as best as I can. My app has two audio players and I would like to be able to play a song from each of the players from my music library. The problem Im having is when I pick the first song to play it works and then when I pick another song it turns off the first song and both audio players only can play the song that was picked. How do I get the audio players to play two different songs? Here is the code I have currently:

 //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")
            }



        }

Upvotes: 1

Views: 240

Answers (1)

Ketan Parmar
Ketan Parmar

Reputation: 27448

I have made demo project and it works fine in my iPad. Here is my code.

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

Click play button and pick two music files because we set allowsPickingMultipleItems to YES.

It works fine in my ipad. convert it in swift if you require. it is not difficult task i think.

Hope this solve your issue. :)

Upvotes: 1

Related Questions