我最近开始在Github上使用AudioKit框架,并对框架的来源进行了深入研究。我找不到但真正好奇的是如何集成第三方音频单元(尤其是效果器)并传递音频以及设置,存储和调用预设。
由于框架中的每个组件似乎都是一个音频单元,因此必须有一种方法可以做到这一点,但是我找不到对音频单元的内置支持。
我想我必须要使用该代码并自己编写包装程序,但是任何帮助将不胜感激。
我尝试使用AudioKit输出纯正弦波. https://github.com/AudioKit/AudioKit 我试图在那里建立一个新的项目,并在那里尝试了"Hello World"示例,包含在AudioKit下载中.
两者都构建良好,Hello World示例在屏幕上正确显示生成的正弦波,但没有声音播放,我听不到任何声音.我已经将音量设置为max并尝试使用其他应用程序,如果他们播放的音频很好,他们就可以.有什么建议吗?
我正在使用Xcode 8.3.3和iOS 10.3.1的iPad Mini 2设备
谢谢
我一直在阅读文档寻找答案.我看到AudioKit可以在录制或播放时实时绘制波形,但我想知道你是否可以加载文件并完全绘制波形,这样我就可以看到整个文件的波形而无需回放.
任何帮助将不胜感激.甚至只是指向我应该查看的对象的指针.
当我创建引用(相对的CocoaPods等)的AudioKit框架之一时,Xcode不会自动完成AudioKit声明,并明确声明一个AudioKit对象(如AKMIDISampler)导致生成错误一个新的XCode项目:"AKMIDISampler"是不可用:找不到此类的Swift声明.
通常,问题在于在XCode中正确输入框架搜索路径.但是,即使我为我的目标和项目设置了框架的相对路径,我仍然得到相同的结果.
这可能是所有第三方框架的问题,但我在这里参考AudioKit,因为我之前在Google的AudioKit支持小组中看到过这个问题.
设置新项目以使用AudioKit以便识别AudioKit并自动完成工作的最佳做法是什么?
当我AKMicrophoneTracker在物理设备上使用AudioKit时,频率和幅度始终都是0.但是在游乐场和iOS模拟器中,它完美运行.
这是一个粗略的例子:
class AppDelegate: UIResponder, UIApplicationDelegate {
let tracker = AKMicrophoneTracker()
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// start the tracker and show frequency information
tracker.start()
Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true, block: { _ in
print(tracker.frequency)
print(tracker.amplitude)
})
}
}
Run Code Online (Sandbox Code Playgroud)
我重置了物理设备的隐私权限,iOS正确地提示我允许麦克风访问.即使我允许麦克风访问,它仍然无法正常工作.
如何让AKMicrophoneTracker实际读取这些值?
我正在使用AudioKit 4.0.3.使用时,它按预期工作:
使用时不起作用:
我最初在AudioKit的GitHub问题跟踪器上发布了这个错误.但是,Aure(项目维护者)鼓励我在这里发帖.
我正在将AudioKit库与Swift一起用于开发一个简单的iOS应用程序,该应用程序应该能够监听该范围的频率3.000Hz - maybe 6000Hz。
因此,我只想跟踪该范围内的麦克风输入频率,并实现此目的,因此我尝试在输入麦克风上应用滤波效果,以避免拾取几种有害噪声的频率。
var mic: AKMicrophone
var silence: AKBooster
var filter: AKHighPassFilter
var tracker: AKFrequencyTracker
public init() {
mic = AKMicrophone()
filter = AKHighPassFilter(mic)
filter.cutoffFrequency = 3000 // just get frequencyies above 3000Hz (highpass)
filter.resonance = 0
tracker = AKFrequencyTracker(filter)
silence = AKBooster(tracker, gain: 0)
}
func start() {
AKSettings.audioInputEnabled = true
AudioKit.output = silence
AudioKit.start()
}
func print() {
print(tracker.frequency)
}
Run Code Online (Sandbox Code Playgroud)
总结一下:我知道滤波器正在改变某些东西-但是我不能真正为该范围应用频率滤波器, 3.000Hz +因为我还获得了低于3.000Hz (例如2.0000 / 500 …
自推出以来,AudioKit已经有了游乐场,我们制作了数百个,但是从Xcode 8开始,它们变得难以使用.在平均约4-5个游乐场观看之后,Xcode将停止运行任何游乐场并需要重新启动.
以下是AudioKit的游乐场代码:https: //github.com/AudioKit/AudioKit/tree/master/Playgrounds
以及它们应如何工作的屏幕录制:http: //audiokit.io/playgrounds/
我们基本上使用本博客中描述的设置来在游乐场中使用AudioKit框架:https://m.pardel.net/using-3rd-party-frameworks-in-swift-playgrounds-fd415f6dba10
如果我们在Xcodeproj上使用游乐场,就像我们使用框架文件一样,游乐场同样不稳定.
有没有人知道发生什么事情让Xcode游乐场与框架不稳定,或者对如何改变我们的设置以使游乐场再次稳定有任何建议?
AudioKit游乐场是使AudioKit易于使用的重要组成部分,失去它们给我带来了沉重的负担,所以我很乐意提供赏金(我的第一个,所以请耐心等待).
我正在尝试录制音频,然后离线保存AudioKit.renderToFile,然后AKPlayer用来播放原始录制的音频文件.
import UIKit
import AudioKit
class ViewController: UIViewController {
private var recordUrl:URL!
private var isRecording:Bool = false
public var player:AKPlayer!
private let format = AVAudioFormat(commonFormat: .pcmFormatFloat64, sampleRate: 44100, channels: 2, interleaved: true)!
private var amplitudeTracker:AKAmplitudeTracker!
private var boostedMic:AKBooster!
private var mic:AKMicrophone!
private var micMixer:AKMixer!
private var silence:AKBooster!
public var recorder: AKNodeRecorder!
@IBOutlet weak var recordButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
//self.recordUrl = Bundle.main.url(forResource: "sound", withExtension: "caf")
//self.startAudioPlayback(url: self.recordUrl!)
self.recordUrl = self.urlForDocument("record.caf")
}
override func didReceiveMemoryWarning() …Run Code Online (Sandbox Code Playgroud) 接到电话或刚打完电话后,启用了后台播放的AudioKit应用程序将永久静音,我不确定如何处理。重新启动声音输出的唯一方法是杀死并重新启动应用程序。其他中断(例如启用和使用Siri)可以毫无障碍地进行,并且在活动期间,应用的声音会回落。
通常,一个应用可以注册自己以接收通知(例如NSNotification.Name.AVAudioSessionInterruption)来检测AVAudioSession中断,但是一个人如何检索AVSession通常传递到通知中的对象?
NotificationCenter.default.addObserver(self, selector: #selector(AppDelegate.sessionInterrupted(_:)),
name: NSNotification.Name.AVAudioSessionInterruption,
object: MISSING_AK_AVAUDIOSESSION_REF)
Run Code Online (Sandbox Code Playgroud)
此外,如果能够成功实现音频中断通知,那么AudioKit会发生什么?它不被设计为“重新启动”或被搁置。任何帮助将非常感激。
更新到AudioKit的最新版本后,我将几个AKCallbackInstrument实例更改为新的AKMIDICallbackInstrument类,该类现在将前者合并为旧行为。但是,这样做时,我遇到了这个奇怪的错误。也许我想念的Swift细微差别?
let callback = AKMIDICallbackInstrument() { status, note, velocity in
if status == .noteOn { //errors out
// do something
}
}
Run Code Online (Sandbox Code Playgroud)
将状态与.noteOn错误进行比较,结果是:“表达式类型'Bool'是模棱两可的,没有更多上下文。”。这是有道理的,因为AKMIDICallbackInstrument不再返回AKMIDIStatus状态,而是直接返回MIDIByte(UInt8)。使用直接MIDI命令数字即可。
let callback = AKMIDICallbackInstrument() { status, note, velocity in
if status == 0x90 {
// do something
}
}
Run Code Online (Sandbox Code Playgroud)
因此,我们有一个问题和潜在的解决方案。我只是不确定这是否可行,AKMIDICallbackInstrument尚未发布到文档中。
audiokit ×10
swift ×8
ios ×5
xcode ×3
audio ×2
audiounit ×1
core-audio ×1
frameworks ×1
interruption ×1
iphone ×1
midi ×1
waveform ×1