2012-03-14 17 views
5

Yeterince basit ... Oyunumda çaldığım bir arka plan şarkım var ve zor bir yol yerine bir parkuru çaprazlamak istiyorum.Cocos2d'de müzik dosyalarını nasıl değiştiririm?

//Prep Background Music 
     if (![[SimpleAudioEngine sharedEngine]isBackgroundMusicPlaying]) { 
      [[SimpleAudioEngine sharedEngine] preloadBackgroundMusic:@"song.mp3"]; 
     } 
     [[SimpleAudioEngine sharedEngine] setBackgroundMusicVolume:1.0]; 

     //Play Background Music 
     if (![[SimpleAudioEngine sharedEngine]isBackgroundMusicPlaying]) { 
      [[SimpleAudioEngine sharedEngine] playBackgroundMusic:@"song.mp3" loop:YES]; 
     } 

cevap

4

Bunu SimpleAudioEngine kullanarak yapamazsınız. İşte ben yaptım nasıl:

  1. yeni fon müziği çalmaya başlamak için çağrı yöntemde CDAudioManager

  2. genişleten bir sınıf oluşturma ivar backgroundMusic (CDAudioManager miras) ise ilk onay sıfır değil ve oynuyor. Öyleyse, o zaman CDLongAudioSourceFader kullanarak silin.

  3. Yeni arka plan müziğini backgroundMusic'a yükleyin (bu, CDLongAudioSource örneğidir). CDLongAudioSourceFader'u kullanarak silin. İşte

2. adımda yöntemin bir parçacık İşte ben akımını değiştirmek için bu basit yöntemi kullanmak

- (void)audioBackgroundPlay:(NSString *)bgmfile crossfade:(float)fade { 
    CDLongAudioSource *audioSource = [self audioBackgroundLoad:bgmfile]; 
    if (audioSource != backgroundMusic) { 
     if (backgroundMusic) { 
      [self audioBackgroundControl:AUDIOCTRL_STOP fade:fade]; 
      backgroundMusic.audioSourcePlayer.meteringEnabled = NO; 
      [backgroundMusic release]; 
     } 
     backgroundMusic = [audioSource retain]; 
     if (meteringEnabled_) { 
      backgroundMusic.audioSourcePlayer.meteringEnabled = YES; 
     } 
    } 
    if (![backgroundMusic isPlaying]) { 
     [self audioBackgroundControl:AUDIOCTRL_PLAY fade:fade]; 
    } 
} 
+0

Tamam diyoruz, teşekkür ederim. –

5

(bu benim kendi özel kütüphanesinin bir parçası olduğu gibi gerisini gösteremez üzgün) arkaplan müziği:

-(void)replaceBackgroundMusic:(NSString *)filePath volume:(float)volume 
{ 
    // no music's playing right now 
    if (![[SimpleAudioEngine sharedEngine] isBackgroundMusicPlaying]) 
     return [self playBackgroundMusic:filePath volume:volume]; 

    // already playing requested track 
    if ([filePath isEqualToString:[[[CDAudioManager sharedManager] backgroundMusic] audioSourceFilePath]]) 
     return; 

    // replace current track with fade out effect 
    float currentVolume = [SimpleAudioEngine sharedEngine].backgroundMusicVolume; 
    id fadeOut = [CCActionTween actionWithDuration:1 key:@"backgroundMusicVolume" from:currentVolume to:0.0f]; 
    id playNew = 
    [CCCallBlock actionWithBlock:^ 
    { 
     [[SimpleAudioEngine sharedEngine] setBackgroundMusicVolume:volume]; 
     [[SimpleAudioEngine sharedEngine] playBackgroundMusic:filePath]; 
    }]; 

    [[[CCDirector sharedDirector] actionManager] addAction:[CCSequence actions:fadeOut, playNew, nil] target:[SimpleAudioEngine sharedEngine] paused:NO]; 
} 

Yardım edin!

0

@ adam.artajew'un cevabı için teşekkürler! Ben Cocos2D v3 ile kullanmak için modifiye ve oyunun herhangi bir yerinden kullanmak için ses motoru Crossfade bir kategori yaptı. Şimdi gerçekleştirir aşağıdaki eylemler:

  • Fade
  • değiştir parça
  • Fade out OALSimpleAudio+Crossfade.m yılında

bu ithalat şunlardır:

#import "CCDirector_Private.h" 
#import "CCActionManager.h" 

Ve yöntemini uygulamak:

- (void)playBg:(NSString *)name crossfade:(BOOL)crossfade { 

    // Skip if already playing requested track 
    if (self.bgPlaying && 
     [self.backgroundTrack.currentlyLoadedUrl.lastPathComponent isEqualToString:name]) { 
     return; 
    } 

    // Play right now if no crossfade needed 
    if (!crossfade) { 
     [self playBg:name loop:true]; 
    } 

    // Fade out just if music's playing right now 
    NSMutableArray *actions = [NSMutableArray array]; 
    if (self.bgPlaying) { 
     id fadeOut = [CCActionTween actionWithDuration:0.5 key:@"bgVolume" from:self.bgVolume to:0.0f]; 
     [actions addObject:fadeOut]; 
    } 
    // Replace current track with fade in effect 
    id playNew = [CCActionCallBlock actionWithBlock:^{ 
     [self playBg:name loop:true]; 
    }]; 
    id fadeIn = [CCActionTween actionWithDuration:0.5 key:@"bgVolume" from:0.0f to:1.0f]; 
    // Combime final action 
    [actions addObjectsFromArray:@[playNew, fadeIn]]; 
    id sequence = [CCActionSequence actionWithArray:actions.copy]; 

    // Run action 
    [[[CCDirector sharedDirector] actionManager] addAction:sequence target:self paused:NO]; 
} 

Kullanımı:OALSimpleAudio+Crossfade.h Dahil ve

[[OALSimpleAudio sharedInstance] playBg:@"MainBgMusic.mp3" crossfade:YES]; 
İlgili konular