1

曲のプレイリストにフェードイン/アウト機能を追加する必要があります (プレイリストの曲は iPod ライブラリから取得されます)。1 つの曲の終わりにエフェクトをフェードアウトし、次の曲の開始時にエフェクトをフェードインする必要があり、システムまたはメディアの VOLUME を変更しないでください。

曲の再生に MPMusicPlayerController を使用しています。

4

2 に答える 2

1

これが私が書いた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、ファイルのコンパイルフラグに追加するだけです。

于 2012-12-14T05:02:37.973 に答える
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];
} 
}

また、反対のアプローチを使用してボリュームをフェードアウトすることもできます。お役に立てれば。

于 2012-12-14T04:40:40.543 に答える