iphone - UISlider 控制 AVAudioPlayer

标签 iphone objective-c avaudioplayer uislider

我正在尝试在我的应用程序中实现一个小功能。我目前正在以 AVAudioPlayers 的身份播放声音,效果很好。我想添加的是使用 UISlider 控制声音的位置 (currentTime):有没有一种简单的方法可以做到这一点?

我看了一个 Apple 项目,但它很乱......你有 sample 或建议吗?

提前感谢大家

最佳答案

应该不是问题 - 只需将 slider 设置为连续并将最大值设置为加载声音文件后播放器的持续时间。

编辑

我刚刚做了这个,它对我有用......

- (IBAction)slide {
    player.currentTime = slider.value;
}

- (void)updateTime:(NSTimer *)timer {
    slider.value = player.currentTime;
}

- (IBAction)play:(id)sender {
    NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"sound.caf" ofType:nil]];
    NSError *error;
    player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
    if (!player) NSLog(@"Error: %@", error);
    [player prepareToPlay];
    slider.maximumValue = [player duration];
    slider.value = 0.0;
    
    [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateTime:) userInfo:nil repeats:YES];  
    [player play];
}

slider 在 IB 中配置,开始播放的按钮也是如此。

Swift 3.0 更新:

var player: AVAudioPlayer!
var sliderr: UISlider!

@IBAction func play(_ sender: Any) {
    var url = URL(fileURLWithPath: Bundle.main.path(forResource: "sound.caf", ofType: nil)!)
    var error: Error?
    do {
        player = try AVAudioPlayer(contentsOf: url)
    }
    catch let error {
    }
    if player == nil {
        print("Error: \(error)")
    }
    player.prepareToPlay()
    sliderr.maximumValue = Float(player.duration)
    sliderr.value = 0.0
    Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(self.updateTime), userInfo: nil, repeats: true)
    player.play()
}

func updateTime(_ timer: Timer) {
    sliderr.value = Float(player.currentTime)
}

@IBAction func slide(_ slider: UISlider) {
    player.currentTime = TimeInterval(slider.value)
}

关于iphone - UISlider 控制 AVAudioPlayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2654849/

相关文章:

ios - 我如何在 Quickblox iOS 代码中实现贴纸

ios - 在后台捕获有关 ipad 的信息并发送

objective-c - 导航器 Controller 和标签栏 Controller 同时存在?

ios - NSFetchedResultsController 由 NSManagedObject 的 refreshObject 触发。为什么?

swift - AudioPlayer (Swift) - 播放声音两次 - 有间隙

iphone - 我如何找出我的应用程序在 UIPasteboard 中被 SIGKILLed 的原因?

iphone - iPhone 中的 OpenCV 和 iOS

ios - SpriteKit 中的无限滚动背景

objective-c - 使用类似于Apple的avTouch项目的AVAudioPlayer

macos - 无法使用 AVAudioPlayer 播放专辑