首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AVAudioEngine AudioFile时间管理

AVAudioEngine AudioFile时间管理
EN

Stack Overflow用户
提问于 2015-03-20 02:47:44
回答 1查看 914关注 0票数 0

我最近正在尝试更改正在使用滑块播放的歌曲的播放时间。

我的问题是如何根据滑块获得准确的AVAudioTime来安排回放

代码(swift)如下所示:

代码语言:javascript
运行
复制
@IBAction func ChangeAudioTime(sender: AnyObject) {

 //get current sampleRate of song already playing


 var nodetime: AVAudioTime  = self.playerNode.lastRenderTime


 var playerTime: AVAudioTime = self.playerNode.playerTimeForNodeTime(nodetime)


 playerNode.stop()

 var time: NSTimeInterval = NSTimeInterval(Slider.value)

 var hostTime = AVAudioTime.hostTimeForSeconds(time)

 var sampleTime = AVAudioFramePosition(hosttime/UInt64(playerTime.sampleRate))

 var ExampleTime: AVAudioTime = AVAudioTime(hostTime:hostTime, sampleTime: sampleTime, atRate: playerTime.sampleRate)


 playerNode.scheduleFile(audioFile, atTime:ExampleTime, completionHandler:nil)

      playerNode.play()
}

滑块的最大值被指定为歌曲的长度,因此这不是问题所在。

这首歌从一开始就开始播放了

控制台中ExampleTime的输出为:

代码语言:javascript
运行
复制
<AVAudioTime 0x1702b4160: 147.874222 s 80475 fr (/44100 Hz)>

我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2015-07-24 15:21:48

我想这就是你需要的:

代码语言:javascript
运行
复制
-(void)playAtTime:(AVAudioTime*)aTime {

startingFrame = _currentTime * self.file.processingFormat.sampleRate;
AVAudioFrameCount frameCount = (AVAudioFrameCount)(self.file.length - startingFrame);

    [_player scheduleSegment:self.file
               startingFrame:startingFrame
                  frameCount:frameCount
                      atTime:aTime
           completionHandler:^{
                NSLog(@"done playing");//actually done scheduling.
            }];
    [_player play];


}

scheduleFile:atTime实际播放整个文件,atTime是它启动时播放的文件。我自己还在弄明白它是如何工作的。它应该是在未来的某个时间,

在本例中,_currentTime (以秒为单位)是歌曲中您想要开始的位置。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29152659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档