- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我运行了几个具有不同文件和相同长度的 AKPlayer - 第一个从头开始,其他的从相对于第一个时间的按钮开始。文件是无缝的,值得缓冲 type = .always, loop = true。如果 AKPlayer 没有从头开始播放,那么只会播放从该轨道开始播放到结束的那部分轨道,并且当循环发生时,starts StartTime 不是零值。有必要在循环播放时从头开始播放所有轨道。使用 AKWaveTable,一切正常,但播放器中没有声像和音高设置。
这是一个示例代码。在原版中,我使用了一系列播放器,并在一个循环中将所有文件上传到我的播放器。我正在做类似 drummachine 的事情——几个音频文件正在播放,我可以根据播放器首次启动的时间并行打开/关闭其他文件。每个文件的持续时间相同。当我在 AKWaveTable 中做同样的事情时,一切正常,但将来它不适合我。在此示例中,我首先运行 playPlayer1 方法,稍后运行 playPlayer2。当Player1从头开始循环,然后Player2从前一个currentTime开始循环(比如从文件中间开始),它的长度永远变得相等(endTime - currentTime)
var player1: AKPlayer!
var player2: AKPlayer!
var playersMixer: AKMixer!
init() {
do {
let file1 = try AKAudioFile(readFileName: "Audio/file1.m4a")
let file2 = try AKAudioFile(readFileName: "Audio/file2.m4a")
player1.load(audioFile: file1)
player2.load(audioFile: file2)
} catch {
print(error.localizedDescription)
}
player1.buffering = .always
player1.isLooping = true
player2.buffering = .always
player2.isLooping = true
playersMixer = AKMixer (player1,player2)
AudioKit.output = playersMixer
do {
try AudioKit.start()
} catch {
print(error.localizedDescription)
}
}
func playPlayer1() {
player1.play()
}
func playPlayer2() {
player2.play(from: currentTime)
}
var currentTime: Double {
get {
if player1.isPlaying {
return player1.currentTime
}
return 0
}
}
最佳答案
我认为这是 AudioKit 中缺少的功能或错误。同时,正如我们在源代码 (https://github.com/AudioKit/AudioKit/blob/master/AudioKit/Common/Nodes/Playback/Players/Player/AKPlayer.swift) 中看到的那样,当前版本确实使用 startTime
作为循环点
同时,我找到了一个解决方案,希望它对其他读者有用:
player.isLooping = false
player.buffering = .dynamic
player.completionHandler = {
player.isLooping = true
player.buffering = .always
player.play(from: 0, to: player.duration)
}
player.play(from: masterPlayer.currentTime)
我正在做的是创建一个播放器并错误地设置 .isLooping
和 .buffering
并调用 .play
运行它一次性或单次射击游戏! .completionHandler
回调在完成时被调用,我在这里设置了 .isLooping
和 .buffering
。最后,调用 .play
使用属性 from
和 to
from self
设置所需的循环点。 masterPlayer
指的是一个单独的player
,用作获取当前播放位置的引用,我知道这很容易理解,但只是为了避免假设。
编辑:
在进行 throw 测试后,我发现了一个我之前报告并删除的问题 (Is synchronised looping supported for AKPlayers that are multiples in their duration?) 并且不得不重新打开,所以希望我能得到答案并帮助理解它是否应该工作。
还强制 player
detach
并创建一个新的:
player.completionHandler = {
player.detach()
let player = self.createPlayer(audioFile: audioFile)
self.connectPlayerToMixer(player)
player.isLooping = true
player.buffering = .always
player.startTime = 0
player.endTime = audioFile.duration
player.play(at: AVAudioTime.now())
}
我现在已经测试了 AKWaveTable
,希望我做的是正确的,但它在两倍于预览记录大小的记录之后也失败了,例如:
我将不得不返回并测试原始的 AKNodeRecorder
以查看行为是否相似,但目前我将尝试使用 AKWaveTable
进行另一次测试。
这是描述上述问题的录音:
https://drive.google.com/open?id=1zxIJgFFvTwGsve11RFpc-_Z94gEEzql7
在研究问题一段时间后,我发现了似乎是解决方案的所有研究。通过转移使用的程序!与其将播放器设置为沿当前时间开始,不如将其安排为从开始时间开始。这是因为开始时间用于循环开始和终点!要了解更多信息,请点击我之前发布的另一篇 StackOverflow 帖子的链接(此处提供了解决方案 ( Is synchronised looping supported for AKPlayers that are multiples in their duration? ),谢谢!
关于swift - 如果轨道不是从头开始的,如何使用循环(缓冲类型 = .always in AKPlayer ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57764856/
我正在使用 MediaPlayer 在我的应用程序中播放在线 mp3 文件中的一些声音。 但是,即使在播放完成后,我也会在控制台中收到一行又一行的回调和缓冲。 10-24 08:08:48.467
我有一个简单的多边形。 dfr p = st_polygon(list(as.matrix(dfr))) > pbuf = st_buffer(p, .4) > plot(pbuf) > plot(
这可能又是一些愚蠢的问题,也许这确实是我所缺少的东西,但我很难让 glMultiDrawArrays 在 OpenGL4 中工作。 我发现了很多这样的解释: for (int i = 0; i #i
这仅仅是根据网络速度调整预缓冲内容量的问题吗?你是否在一开始就为此调整一次,每秒......? 或者它更复杂 - 对您的网络速度记录历史进行采样并取平均值/中值并对其进行调整? 最佳答案 您的第二段总
嗨,我正在使用 FFmpeg Autogen C#。当我使用 mkv 输出作为文件并使用 h264 rtsp 流作为输入时,一切正常。编解码器是 libx264 ffmpeg.avio_open(
我需要多次遍历几个文本文件的行。目前这是通过多个 with open("file.txt") as f: for line in f: # do something 虽然性能还
昨天给同学们写了一个xinetd小练习:做一个反向回显程序。 为了学习新东西,我尝试实现一个 Haskell 解决方案。琐碎的main = forever $ interact reverse不起作用
我正在阅读《实时渲染第三版》中的遮挡剔除部分,但我无法理解它是如何工作的。一些问题: “Z 金字塔”有何贡献?为什么我们需要多种分辨率的 Z 缓冲区?在书中,它的显示如下(左侧): 八叉树结构与用于一
我通过串行端口与设备通信。 我已成功获取 InputStream 并读取设备发送的内容。 但问题是,我根本不知道何时停止阅读并继续执行另一项任务。 这是简化的代码: inputStream = ser
我有以下代码: func (q *Queue) GetStreams(qi *QueueInfo) { channel := make(chan error, len(qi.AudioChun
在我调用 -play 之前,有没有办法让 MPMusicPlayerController 缓冲内容?还是在您设置队列时默认执行此操作? AVAudioPlayer 有 -prepareToPlay 方
我正在编写一个数据库 备份函数,从System.Diagnostics.Process 对象 读取StandardOutput (StreamReader) 属性。我已成功写入普通文件。 //This
我有一个 wpf 应用程序,其中所有 viewModel 都继承自实现 INotifyPropertyChanged 的类 NotifyPropertyChangeClass(见下文)。 我想限制
我需要类似于 withLatestFrom 的东西,对应于下图: ---------A-----------------B-- -1-2-3------4------5-6-7-8---- -----
有没有办法缓冲 OutputStream,在返回之前修改它?这是我的代码片段: public ServletOutputStream getOutputStream() throws IOExcept
目前我们有实现服务器通信协议(protocol)缓冲的需求。如果有人对此有任何意见,他们可以向我提供任何意见吗。 最佳答案 请查看以下 Protocol Buffer 链接。 http://code.
所以我目前正在开发一个 Java 应用程序,该应用程序应该将特定事件记录到数据库中。我希望每分钟最多有 15 到 20 次插入,基本上我想知道我是否应该为每个插入语句建立一个新连接,或者只要应用程序正
请考虑以下代码,包括两个线程 buffering_thread(用一条消息填充缓冲区指针)和 sending_thread(清空缓冲区): #include "msg.cpp" msg * buffe
是否可以在线播放由两个或多个视频文件组成的视频? 由于我原来的帖子不够清楚,这里有扩展的解释和问题。 我的站点托管在 Linux/Apache/PHP 服务器上。我有 FLV/F4V 格式的视频文件。
这是我用于缓冲和转换传入事件的代码: public Publisher> logs(String eventId) { ConnectableObservable connectableObs
我是一名优秀的程序员,十分优秀!