2012-02-18 3 views
0

Я пытаюсь сделать простое приложение на основе AVAudioPlayer для воспроизведения 2 разных музыкальных файлов при нажатии кнопки, есть 2 вида, первый - домашний вид содержит 2 кнопки, каждая кнопка устанавливает песню, которая называется целым (1.mp3, 2.mp3 ..... и т.д.) и here'e кодиграет второй звук

#import "podHome.h" 
#import "podMusic.h" 
#import "ArabAppDelegate.h" 


@implementation podHome 

@synthesize song1; 
@synthesize tabi; 
int CurrentPlay; 
NSString *Currenttxt; 


-(IBAction)uae{ 
    CurrentPlay=1; 
    [email protected]"uae"; 
    podMusic *newContro=[[podMusic alloc] init]; 
    [newContro setCurrentPlay1:CurrentPlay setCurrentText:Currenttxt]; 

    ArabAppDelegate *theDelegate = (ArabAppDelegate*)[[UIApplication sharedApplication] delegate]; 
    tabi = theDelegate.tabcontrolPod; 
    tabi.selectedIndex = 1; 
    [newContro release]; 
} 

-(IBAction)libya{ 
    CurrentPlay=2; 
    [email protected]"uae"; 
    podMusic *newContro=[[podMusic alloc] init]; 
    [newContro setCurrentPlay1:CurrentPlay setCurrentText:Currenttxt]; 

    ArabAppDelegate *theDelegate = (ArabAppDelegate*)[[UIApplication sharedApplication] delegate]; 
    tabi = theDelegate.tabcontrolPod; 
    tabi.selectedIndex = 1; 
    [newContro release]; 
} 

эти буксировочные (IBActions) связаны с двумя кнопками при нажатии на одну из них изменится на другой и начните воспроизведение песни

- (void)viewWillAppear:(BOOL)animated { 

    if((played == 1)&&(isBacked==FALSE)){ 

    NSString *filePath = [[NSBundle mainBundle] pathForResource:texting 
                 ofType:@"txt"]; 

    NSString *filenameString = [NSString stringWithContentsOfFile:filePath usedEncoding:nil error:nil]; 
    CurrentTex.text = filenameString; 
    AudioSessionInitialize(NULL, NULL, NULL, NULL); 
     UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback; 
     AudioSessionSetProperty(kAudioSessionProperty_AudioCategory,sizeof(sessionCategory), &sessionCategory); 
     AudioSessionSetActive(YES); 

     playBtnBG = [[UIImage imageNamed:@"play-pod.png"] retain]; 
     pauseBtnBG = [[UIImage imageNamed:@"pause-pod.png"] retain]; 
     [playButton setBackgroundImage:pauseBtnBG forState:UIControlStateNormal]; 

     [self registerForBackgroundNotifications]; 

     updateTimer = nil; 

     duration.adjustsFontSizeToFitWidth = YES; 
     currentTime.adjustsFontSizeToFitWidth = YES; 
     progressBar.minimumValue = 0.0; 
     NSString *path=[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%d",CurrentPlay] ofType:@"mp3"]; 
     self.player=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL]; 
     [player stop]; 
     //self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:nil];  
     if (self.player) 
     { 
      [self updateViewForPlayerInfo:player]; 
      [self updateViewForPlayerState:player]; 
      player.numberOfLoops = 0; 
      player.delegate = self; 
     } 
     [self startPlaybackForPlayer:player]; 
     fileName.text= [[NSString alloc]initWithFormat:@"%@", songName]; 
     // [fileURL release]; 
//  CurrentPlay = 0; 
       isBacked = TRUE; 
    } 

     [super viewWillAppear:animated]; 
} 

- (void)setCurrentPlay1:(int)varP setCurrentText:(NSString *)varT{ 

    CurrentPlay = varP; 
    texting = varT; 
    played = 1; 
    isBacked = FALSE; 
} 

но проблема в том, и нажатие на кнопку другой песни, оно начинает играть с первым в одно и то же время, я думаю, что первое должно прекратиться, чтобы начать другой, что я должен отпустить, чтобы сделать это ???

+0

Интересные имена функций там .... :) – esqew

ответ

0

Я предполагаю, что у вас есть два экземпляра AVAudioPlayer, и когда вы устанавливаете их для игры, они оба делают!

Одним из решений было бы сообщить другим игрокам прекратить действие, когда вы активируете новый, но это быстро станет хлопотным, так как количество игроков увеличивается.

Вместо этого вам лучше всего настроить одного игрока и изменить его песню в соответствии с тем, какая кнопка была нажата. Таким образом, нет никаких шансов, что одновременно будут воспроизводиться две музыкальные треки.

0

В вашем первом действии кнопки напишите вот так.

if(player2.isPlaying) 
{ 
[player2 stop]; 
} 

таким же образом сделать то же самое во второй кнопке действие вроде этого.

if(player1.isPlaying) 
{ 
[player1 stop]; 
} 
Смежные вопросы