【问题标题】:AVAudioPlayer rateAVAudioPlayer 速率
【发布时间】:2012-06-23 07:15:26
【问题描述】:

所以我试图在 iOS 5.1.1 中以不同的速率播放声音文件,但我完全没有运气。到目前为止,我已经尝试设置 AVAudioPlayer 的速率:

player = [[AVAudioPlayer alloc] initWithContentsOfURL:referenceURL error:&error];
player.enableRate = YES;
player.rate = 1.5;
player.numberOfLoops = 0;
player.delegate = self;
[player prepareToPlay];
[player play];

完全没有运气,声音播放,但忽略了我给它的速率。我也试过 AVPlayer:

avPlayer = [[AVPlayer alloc] initWithURL:referenceURL];
avPlayer.rate = 0.5;
[avPlayer play];

再次,它会播放,但只是忽略了我设置的速率。我尝试了许多不同的音频文件,但为了这个线程,我从这个目录中选择了 Rooster-mono.wav:http://sig.sapp.org/sounds/wave/

有没有人成功改变 iOS 5.1.1 的播放速率?或者有人知道我在这里缺少什么吗?

我这样做是为了稍微改变我的一些样本的音高,我意识到我可以通过使用 RemoteIO 或类似的东西来做到这一点,但这对于我想要实现的目标(一个简单的播放速率调整)来说似乎完全是矫枉过正。

【问题讨论】:

  • 你在这里犯的这个错误是 plauer.rate = 1.5f。你必须把“f”放在它的末尾,否则它不会工作

标签: ios avfoundation avaudioplayer avplayer audio-processing


【解决方案1】:

Swift 2.0

let player = AVPlayer(URL: url)
player.play()
player.rate = 0.9

【讨论】:

    【解决方案2】:

    这就是你的做法。

    速率值介于 0.1f - 2.0f

    player = [[AVAudioPlayer alloc]
              initWithContentsOfURL:[NSURL fileURLWithPath:path]
              error:&err];
    player.volume = 0.4f;
    player.enableRate=YES;
    [player prepareToPlay];
    [player setNumberOfLoops:0];
    player.rate=2.0f;
    [player play];
    

    【讨论】:

      【解决方案3】:

      修改代码为:

      avPlayer = [[AVPlayer alloc] initWithURL:referenceURL];
      
      [avPlayer play]; //call play first
      
      avPlayer.rate = 0.5; //then set rate
      

      【讨论】:

      • 这是错误的。您需要先设置速率,然后使用播放
      • 你们都错了。设置速率以速率播放。 Play 开始以默认的 1.0 速度播放视频。
      【解决方案4】:

      这里有一些我知道有效的代码,只是在我一直在开发的应用程序中重新测试过。正如您所提到的,使用setEnableRate:setRate: 仅适用于iOS 5.0 及更高版本。所以我使用respondsToSelector:在设备上测试设备是否会接受请求:

      _noticeAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Rooster-mono" ofType:@"wav"]]
                                                            error:nil];;
      if ([_noticeAudio respondsToSelector:@selector(setEnableRate:)])
          _noticeAudio.enableRate = YES;
      if ([_noticeAudio respondsToSelector:@selector(setRate:)])
          _noticeAudio.rate = 2.0;
      

      在 iOS 5 设备上运行,它成功执行了双倍速率。在 iOS 4.3 上运行,它以正常速度播放。

      因此,获得正确费率的唯一方法是您的设备上装有 iOS 5。

      【讨论】:

      • 工作良好..Thanx
      猜你喜欢
      • 2013-08-28
      • 2015-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-17
      • 1970-01-01
      • 2011-01-21
      相关资源
      最近更新 更多