- 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/
我已经为此苦苦挣扎了一段时间。我有一系列 AKPlayer。 var players = [AKPlayer]() 我在网上搜索了很多关于同一问题的其他问题,他们都建议使用:AKPlayer.play
我正在尝试使用 AudioKit 的 AKPlayer 同步播放 4 个 mp3 文件,并且非常成功。不过,作为我学习 Swift 的一部分,我想使用数组(或我还没有学过的东西)来简化我的代码,因为我
我正在尝试对来自 AKPlayer 的信号执行频率调制,该信号反过来播放 mp3 文件。 我尝试使用 AKOperationEffect,但它没有按预期工作: let modulatedPlayer
这是我目前正在处理的一个多音频文件播放项目,其中多个 AKPlayer 通过 AKSequencer 以随机顺序播放。 首先,我有一个文件名数组: Let filenames = [“1.mp3”,
我一直在尝试用 AKPlayer 替换我的代码中的 AKAudioPlayer,这是由于一个单独的问题,即 AKAudioPlayer 的播放头在暂停后给出负数并且不更新。然而,在这个切换之后,我遇到
一直在为这个问题挠头,但无济于事。 我只是想了解如何在使用 AudioKit 提供的 AKAudioPlayer 时立即更改当前播放位置。 player.playhead 是只读的,因此无法更改。 在
我运行了几个具有不同文件和相同长度的 AKPlayer - 第一个从头开始,其他的从相对于第一个时间的按钮开始。文件是无缝的,值得缓冲 type = .always, loop = true。如果 A
在 v4 中,如果您使用 AKPlayer带循环和使用 setPosition API,播放器在 setPosition 设置的位置之间循环和球员的总持续时间。我需要的是从setPosition设置的
我正在尝试在我的(某种)多音频文件播放项目中使用 AKSamplerMetronome 作为主时钟。我希望 AKPlayers 与 Metronome 的悲观节奏同步启动。将 AKPlayer 和 A
到目前为止,我一直在使用 AKPlayers 进行多音频播放项目,由 AKSequencer 触发以获得完美的同步、循环和高级信号处理。一切进展顺利,但现在我需要一些洞察力才能进入下一个阶段。 我正在
我目前正在使用 FDWaveFormView非常成功地显示代表我从 AKMicrophone 或 AKAudioFile 录制的音频的波形。 我成功地突出显示了波形中的特定区域,FDwaveForm
我最近完成了从 AudioKit 3.7 到 4.2 的迁移(使用 Cocoapods),这是 XCode 9.3 所需要的。我按照迁移指南将 AKAudioPlayer 更改为 AKPlayer。
我努力使以下场景按预期工作(代码将在下面提供)。 记录我的麦克风输入并在内存中存储一个 AVAudioPCMBuffer,这是通过 AVAudioPCMBuffer 扩展方法 copy(from
这是我遇到的问题。我有一个应用程序可以从网络加载声音然后播放。同时,该应用程序具有录制和播放语音的功能。我为这两个功能使用了两个不同的 View Controller 。对于这些任务,我创建了一个单例
我正在尝试在播放多个 AKPlayer 时实现开关。首先,我调用了两个 AKPlayer,由 AKSequencer 中的 AKCallbackInstruments 触发。 当我打开开关时,1) 两
在我的应用程序中,我为用户提供了播放一小段音频(来自较大的音频文件)的选项,以便反复聆听以进行手动转录。 AKPlayer 使这变得微不足道。现在,因为音频帧非常小,一遍又一遍地听到这个循环是非常强烈
我是一名优秀的程序员,十分优秀!