曲のプレイリストにフェードイン/アウト機能を追加する必要があります (プレイリストの曲は iPod ライブラリから取得されます)。1 つの曲の終わりにエフェクトをフェードアウトし、次の曲の開始時にエフェクトをフェードインする必要があり、システムまたはメディアの VOLUME を変更しないでください。
曲の再生に MPMusicPlayerController を使用しています。
これが私が書いたAVAudioPlayerの拡張機能(ARC以前)で、あなたが望むことを正確に実行します。
ヘッダー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
、ファイルのコンパイルフラグに追加するだけです。
-(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];
}
}
また、反対のアプローチを使用してボリュームをフェードアウトすることもできます。お役に立てれば。