AVMutableAudioMixInputParameters setVolume atTime不仅适用于kCMTimeZero

时间:2013-04-25 14:38:02

标签: ios objective-c avplayer

我正在开发Xcode的iOS应用程序。我还是编程新手。 我正在尝试使用AVPlayer播放录音带的音量。如果将时间设置为kCMTimeZero,它的工作效果很好,但是我希望它在按下按钮后设置音量一秒。

正在运作

- (IBAction)maxVolButtonPressed:(id)sender {
    [audioInputParams1 setVolume:1 atTime:time1];
    [self applyAudioMix];
}

工作

- (IBAction)minVolButtonPressed:(id)sender {
    [audioInputParams1 setVolume:0 atTime:kCMTimeZero];
    [self applyAudioMix];
}

如果我想延迟一秒钟,我应该在atTime后写什么?

解答: 好的,我明白了。您必须添加当前项目的时间。我使用setVolumeRampFromStartVolume的时间间隔非常短,而不是setVolume。由于某种原因,setVolume逐渐消失到给定的音量我还没弄清楚原因。 它对我有用:

CMTime time1 = CMTimeMake(1000, 1000); //2s
CMTime time2 = CMTimeMake(1001, 1000); //3s
CMTime timeCurrent = [player currentTime];
CMTime time1Added = CMTimeAdd(timeCurrent, time1);
CMTime time2Added = CMTimeAdd(timeCurrent, time2);
CMTimeRange fadeInTimeRange = CMTimeRangeFromTimeToTime(time1Added, time2Added);
[audioInputParams1 setVolumeRampFromStartVolume:0 toEndVolume:1 timeRange:fadeInTimeRange];
[self applyAudioMix];

1 个答案:

答案 0 :(得分:1)

你应该这样做:

- (IBAction)maxVolButtonPressed:(id)sender {
    [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(setVolume:) userInfo:nil repeats:NO];
}

- (void)setVolume:(id)sender{
    [audioInputParams1 setVolume:1 atTime:kCMTimeZero];
    [self applyAudioMix];
}

在第一种方法中,您要说:等待1秒,然后调用方法setVolume:。