- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我目前正在使用 FDWaveFormView非常成功地显示代表我从 AKMicrophone
或 AKAudioFile
录制的音频的波形。
我成功地突出显示了波形中的特定区域,FDwaveForm
返回了音频文件中的一系列样本。
我现在的问题是我无法在 AKPlayer
中找到合适的方法来让我从开始样本播放到结束样本。
我注意到 AKSamplePlayer
现在已被弃用,但它确实有一个方法:play(from: Sample, to: Sample)
我的猜测是我可以做一些数学运算来将样本位置转换为时间(作为 AKPlayer
中规定的 Double
),但是我还没有找到执行此操作的适当数学或函数,有什么提示吗?
为了清楚地说明我正在尝试做什么,请引用下图:
请注意 对于任何可能看到此问题的 AudioKit 核心成员,我知道有多种 AudioKitUI 组件可以使这更容易,但是只有 FDWaveFormView
给出了我需要这个特定应用程序的功能,我很乐意进一步离线讨论,再次非常感谢。
编辑
我想出了一些我认为已经解决了它的代码:
let startingSampleIndex = self.waveformPlot.highlightedSamples!.min()
let endingSampleIndex = self.waveformPlot.highlightedSamples!.max()
let millisecondsPerSample : Double = 1000 / 44100
let startingDuration : Double = (startingSampleIndex! * millisecondsPerSample) / 1000
let endingDuration : Double = (endingSampleIndex! * millisecondsPerSample) / 1000
print("StartSample:\(startingSampleIndex!) | EndSample:\(endingSampleIndex!) | milliPerSample:\(millisecondsPerSample) | StartDuration:\(startingDuration) | EndDuration:\(endingDuration)")
player.play(from: startingDuration, to: endingDuration)
主要等式是 numberOfSamples * millisecondsPerSample = timeInMilliseconds
除以 1000 我可以将所有内容标准化为秒,这正是 AKPlayer
想要的。如果有人在这里看到有问题,我会喜欢这个建议,但我认为这已经解决了!抱歉,我对 DSP 还是个新手,非常感谢 AudioKit 成为这个世界的不可思议的牧羊人!
最佳答案
要将帧数转换为秒数,您应该除以音频文件的采样率,而不是硬编码的 44100 值:
guard let frameRange = self.waveformPlot.highlightedSamples else { return }
let startTime = frameRange.min() / audioFile.fileFormat.sampleRate
let endTime = frameRange.max() / audioFile.fileFormat.sampleRate
player.play(from: startTime, to: endTime)
关于ios - AudioKit,AKPlayer : How to play from Samples, 不是时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52249967/
我已经为此苦苦挣扎了一段时间。我有一系列 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 使这变得微不足道。现在,因为音频帧非常小,一遍又一遍地听到这个循环是非常强烈
我是一名优秀的程序员,十分优秀!