2012-12-14 6 views
1

노래 재생 목록에 페이드 인/아웃 기능을 추가해야합니다 (재생 목록 노래는 ipod 라이브러리에서 검색됩니다). 한 곡 끝이 효과와 다음 곡 시작을 페이드 아웃해야 할 때 나는 효과가 사라질 필요가있다. 그리고 페이딩 시스템이나 미디어 볼륨 중 하나는 생각해서는 안된다.ios에서 AVAudioPlayer 및 MPMusicPlayerController를 사용하여 노래 재생 목록에 페이딩 효과 추가

재생 노래에 MPMusicPlayerController를 사용하고 있습니다.

답변

0
-(void)doFadeInVolume { 

//play 
[audioPlayerMain play]; 

if (audioPlayerMain.volume < 1.0) { 
audioPlayerMain.volume = audioPlayerMain.volume + 0.1; 
[self performSelector:@selector(doVolumeFadeMainIn) withObject:nil afterDelay:0.2]; 
} 
} 

그리고 볼륨을 페이드 아웃하기 위해 반대되는 방법을 사용할 수 있습니다. 희망이 도움이됩니다.

+0

@PratikPatel 예, 이것은 'AVAudioPlayer'를 사용하고 있다고 가정합니다. 헤더 파일 일명 인터페이스 파일에서 위의 예제에서와 같이'AVAudioPlayer * audioPlayerMain'으로 선언 할 것입니다. – wigging

+1

어떻게 할 수있는 MPMusicPlayerController ????? –

+0

@Pratik Patel과 동일 MPMusicPlayerController를 사용하여 어떻게 할 수 있습니까 ????? –

1

다음은 내가 원하는대로 정확하게 작성한 (이전 ARC) AVAudioPlayer의 확장입니다.

헤더 AVAudioPlayer+FadeControl.h :

#import <Foundation/Foundation.h> 
#import <AVFoundation/AVFoundation.h> 


@interface AVAudioPlayer (FadeControl) 

-(void)fadeOutWithDuration:(NSTimeInterval)inFadeOutTime; 

@end 

그리고 소스 AVAudioPlayer+FadeControl.m :

#import "AVAudioPlayer+FadeControl.h" 

#define  kFadeSteps 20.0 

@implementation AVAudioPlayer (FadeControl) 

-(void)fadeOutWithDuration:(NSTimeInterval)inFadeOutTime 
{ 
    NSTimeInterval fireInterval = inFadeOutTime/kFadeSteps; 
    float volumeDecrement = 1.0/kFadeSteps; 
    float originalVolume = self.volume; 

    self.volume = originalVolume - volumeDecrement; 

    [self retain]; 
    [NSTimer scheduledTimerWithTimeInterval:fireInterval target:self selector:@selector(fadeOutTimerMethod:) userInfo:[NSNumber numberWithFloat:originalVolume] repeats:YES]; 

} 

- (void)fadeOutTimerMethod:(NSTimer*)theTimer 
{ 
    float volumeDecrement = 1.0/kFadeSteps; 

    if (self.volume > volumeDecrement) 
    { 
     self.volume = self.volume - volumeDecrement; 
    } 
    else if ([theTimer isValid]) 
    { 
     [self stop]; 

     NSNumber* originalVolume = [theTimer userInfo]; 
     self.volume = [originalVolume floatValue]; 

     [theTimer invalidate]; 
    } 
    else 
    { 
     [self stop]; 
     [self release]; 
    } 


} 

@end 

그것은이 playWithFadeInDuration: 방법 광고에 사소한해야한다. ARC 프로젝트에서 사용하려면 -fno-objc-arc을 파일의 컴파일 플래그에 추가하기 만하면됩니다.

+0

이 방법은 효과가 있지만 시스템 볼륨을 줄여서 도움이되지 않습니다. 시스템 볼륨을 변경하지 않고 볼륨을 낮추려면 어떻게해야합니까? self.volume은 무엇입니까? ????????? –

+0

어떻게하면 MPMusicPlayerController ????? –

+0

'MPMusicPlayerController'에 대해서도 동일한 일반적인 접근 방식이 가능합니다. – kamprath

관련 문제