标签: audiokit

如何使用 Swift 创建 MIDI 文件?

我目前正在学习如何快速使用 MIDI。我寻求如何创建 MIDI 文件,但这听起来并不那么容易。
我检查了像 AudioKit 这样的框架,但我也没有找到。
我需要学习哪些信息?(例如了解 MIDI 文件结构)。

midi audiotoolbox coremidi swift audiokit

5
推荐指数
1
解决办法
2522
查看次数

使用 AudioKit 裁剪 MIDI 文件

我正在尝试使用 裁剪和循环 MIDI 文件的特定部分AudioKit

我正在使用音序器,发现了一些接近我需要的东西,但不完全一样。

我在AKSequencer名为 的方法中找到了一个方法clearRange。通过这种方法,我可以将 MIDI 中我不想要的部分静音,但我还没有找到一种方法来修剪音序器并只保留我感兴趣的部分。现在只有我想要的部分有声音但我仍然得到了无声的部分。

有没有一种方法可以修剪音序器或创建一个新的音序器,仅包含我想从原始音序器中保留的部分?

谢谢!

midi sequencing ios audiokit

5
推荐指数
1
解决办法
294
查看次数

使用 Audiokit 在 AKsequencer 中创建额外 MIDI 轨道的问题

我一直试图解决一个神秘的正弦波问题,但收效甚微。我在这里开始一个新问题,因为我认为我已经深入研究了这个问题的细节。

当设置 AKSequencer 并向其提供 MIDI 文件时,我看到一些奇怪的结果。

对于 4 轨歌曲(具有相应的 4 轨 midi 文件,持续时间与歌曲的所有主干匹配),我发现音序器实际上是使用 5 条轨道生成的。额外的轨道是什么?

另外,我在控制台中收到错误:

[seq] 1026: Invalid beat range

我相信当赛道是空的时候就会发生这种情况。

所以这看起来像是我神秘的正弦波的罪魁祸首。

关于如何解决这个问题有什么想法吗?这让我有点疯狂......

谢谢!

audio midi ios swift audiokit

5
推荐指数
1
解决办法
635
查看次数

AudioKit (iOS) - 添加频率/幅度变化的观察者

我正在使用AudioKit框架开发一个小型应用程序,该应用程序能够监听麦克风输入频率和幅度,并且我想在每次频率和幅度获得特定值时触发一个事件(显然我想触发一个函数) ->特定音调的事件。

现在我正在为我的应用程序使用这个简单的 Swift 代码:

mic = AKMicrophone()
tracker = AKFrequencyTracker(mic)
silence = AKBooster(tracker, gain: 1)
AKSettings.audioInputEnabled = true
AudioKit.output = silence
AudioKit.start()

let t = Timer.scheduledTimer( timeInterval: 0.05, target: self, selector: #selector(self.checkFrequencyAmplitude), userInfo: nil, repeats: true)
Run Code Online (Sandbox Code Playgroud)
func checkFrequencyAmplitude() {
   let frequency = tracker.frequency,
       amplitude = tracker.amplitude
   if (frequency > 1000 && frequency < 1200 && amplitude > 0 && amplitude < 0.2) {
      // do stuff if the specific tone appeared
   }
}
Run Code Online (Sandbox Code Playgroud)

但说实话,我在使用 …

ios swift audiokit

5
推荐指数
1
解决办法
1993
查看次数

添加AKMicrophone时崩溃

我正在使用AudioKit开发一个音频应用程序,它涉及定期停止AudioKit,重新安排或替换AKNode子类链,然后重新启动AudioKit.这一直顺利进行,直到我尝试过AKMicrophone.

如果AKMicrophone在初始声音链中存在,即,当我第一次调用时AudioKit.start(,它可以正常工作.但是,如果我AKMicrophone在之前的调用之后的某个时刻进入声音链AudioKit.start(),则应用程序将在下一次AudioKit.start()调用时崩溃,从而产生以下错误消息:

...[avae] AVAudioEngine.mm:149:-[AVAudioEngine prepare]: Engine@0x1c0007170: could not initialize, error = -10875
...[mcmx] 338: input bus 0 sample rate is 0
...[avae] AVAEInternal.h:103:_AVAE_CheckNoErr: [AVAudioEngineGraph.mm:1266:Initialize: 
(err = AUGraphParser::InitializeActiveNodesInOutputChain(ThisGraph, kOutputChainOptimizedTraversal, *GetOutputNode(), isOutputChainActive)): error -10875
Run Code Online (Sandbox Code Playgroud)

为了说明,以下代码顺利运行:

    let mic = AKMicrophone()
    if let input = AudioKit.inputDevice {
        try! mic.setDevice(input)
    }
    AudioKit.output = mic
    AudioKit.start()
Run Code Online (Sandbox Code Playgroud)

但是如果它之前被调用AudioKit.start()就会崩溃:

    AudioKit.output = AKOscillator()
    AudioKit.start()
    AudioKit.stop()

    let mic = AKMicrophone()
    if let input = …
Run Code Online (Sandbox Code Playgroud)

ios avaudioengine audiokit

5
推荐指数
1
解决办法
306
查看次数

没有名为 AKNode/AKToggleable 的类型或协议

我正在尝试扩展 AKNode 和 AKToggelable,此错误出现在 Project-Swift.h 文件中

有什么方法可以做到这一点?

我的班级是

class AKCustom: AKNode, AKToggleable, AKComponent, AKInput {
public typealias AKAudioUnitType = AKBalancerDeplikeAudioUnit

public static let ComponentDescription = AudioComponentDescription(mixer: "dpba")

private var internalAU: AKAudioUnitType?


open dynamic var isStarted: Bool {
    return internalAU?.isPlaying() ?? false
}

public init( _ input: AKNode? = nil) {
    _Self.register()
    super.init()
    AVAudioUnit._instantiate(with: _Self.ComponentDescription) { [weak self] avAudioUnit in

        self?.avAudioNode = avAudioUnit
        self?.internalAU = avAudioUnit.auAudioUnit as? AKAudioUnitType

        input?.connect(to: self!)
    }
}

open func start() {
    internalAU?.start()
}

open func stop() …
Run Code Online (Sandbox Code Playgroud)

ios swift audiokit

5
推荐指数
1
解决办法
344
查看次数

更改 AKPlayer 文件时 Audiokit 崩溃

我最近完成了从 AudioKit 3.7 到 4.2 的迁移(使用 Cocoapods),这是 XCode 9.3 所需的。我按照迁移指南将 AKAudioPlayer 更改为 AKPlayer。

问题

当 AKPlayer 播放音频文件时,AudioKit 崩溃并出现以下错误:

2018-04-17 09:32:43.042658+0200hearfit[3509:2521326][avae]AVAEInternal.h:103:_AVAE_CheckNoErr:[AVAudioEngineGraph.mm:3632:UpdateGraphAfterReconfig:(AUGraphParser::InitializeActiveNodesInOutputChain(ThisGraph, kOutputChainFull)遍历,*conn .srcNode,isChainActive)):错误-10875
2018-04-17 09:32:43.049372+0200hearfit[3509:2521326]*** 由于未捕获的异常“com.apple.coreaudio.avfaudio”而终止应用程序,原因:“错误-10875”
*** 首先抛出调用堆栈:
(0x1847d6d8c 0x1839905ec 0x1847d6bf8 0x18a0ff1a0 0x18a11bf58 0x18a12aab0 0x18a128cdc 0x18a1a1738 0x18a1a160c 0x10519192c 0x10519 d2f4 0x10519d64c 0x10503afdc 0x10507c4a0 0x10507c01c 0x104f6d9cc 0x1852233d4 0x18477faa8 0x18477f76c 0x18477f010 0x18477cb60 0x18 469cda8 0x18667f020 0x18e67d78c 0x10504dfd4 0x18412dfc0)
libc++abi.dylib:以 NSException 类型的未捕获异常终止

有时它发生在第一次播放时,有时第一次播放正确,但第二次播放则不然。

迁移之前一切都运行良好。我还尝试保留 AKAudioPlayer: 声音正常播放,但 AKFrequencyTracker 不再工作。

语境

这是我的设置:

设置 快速解释:

  • AKPlayer 1播放短音频文件(1 到 5 秒之间)
  • AKFrequencyTracker用于显示绘图
  • AKPlayer 2播放背景声音(音量必须可配置)
  • AKWhiteNoise允许进行一些手动体积测量(使用 …

swift audiokit

5
推荐指数
1
解决办法
622
查看次数

在连接耳机的情况下使用带有 AudioKit 的内置麦克风

我在 Swift 中使用 AudioKit 与 ios 11 和 AudioKit。我无法让我的应用程序使用 iPhone 麦克风而不是耳机内置的麦克风。它们是标准的苹果入耳式耳机。(有线而非蓝牙)

let mic = AKMicrophone()

    if let inputs = AudioKit.inputDevices {
        try! AudioKit.setInputDevice(inputs[1])
        try! mic.setDevice(inputs[1])
    }

AudioKit.output = mic
AudioKit.start()
Run Code Online (Sandbox Code Playgroud)

我尝试过输入 [1]、[2] 和 [3],但没有任何变化。在每种情况下,它都使用耳机内置的麦克风。即使输入[1]的输入描述是前置麦克风。

ios swift audiokit

5
推荐指数
0
解决办法
387
查看次数

使用 AudioKit 测量(频率加权)声级

我正在尝试使用 AudioKit 为 iOS 实现 SLM 应用程序。因此,我需要确定不同的响度值以 a) 显示当前响度(平均超过一秒)和 b)做进一步的计算(例如计算更长的时间跨度内的“等效连续声级”)。该应用程序应该能够跟踪频率加权分贝值,如 dB(A) 和 dB(C)。

我确实理解我面临的一些问题与我在信号和音频处理领域普遍缺乏了解有关。我的问题是如何使用 AudioKit 来完成这项任务。我将描述我当前的流程并希望获得一些意见:

  1. 在此麦克风上创建AKMicrophone和 a的实例AKFrequencyTracker
  2. 创建一个Timer具有一定间隔的实例(当前1/48_000.0
  3. 在计时器内部:检索amplitudefrequency。根据振幅计算分贝值20 * log10(amplitude) + calibrationOffset(校准偏移将在专业 SLM 的帮助下确定每个设备型号)。根据频率加权(A 和 C)计算检索到的频率的偏移,并将这些应用于初始 dB 值。将 dB、dB(A) 和 dB(C) 值存储在一个数组中。
  4. 计算给定时间范围内数组的平均值(1 秒)。

我在其他地方读到使用计时器这不是最好的方法。还有什么可以用于“采样”?究竟是什么frequencyAKFrequencyTracker?这个频率是否足以确定 dB(A) 和 dB(C) 值,还是我需要一个AKFFTTap?如何从AKFrequencyTracker平均值中检索值,即 RMS 使用什么时间范围?

可能相关的问题:在 swift 中从 AudioKit 获取 dB(a) 级别AudioKit FFT 转换为 dB?

iphone audio-recording ios swift audiokit

5
推荐指数
0
解决办法
822
查看次数

使用 AudioKit 通过 iOS 内的虚拟端口发送 MIDI 音符

所以我觉得自己像个白痴,不得不在这里发帖以解决可能很简单的问题。我正在编写一个 iOS 应用程序,它将发送 MIDI 到另一个应用程序。对于我的第一个概念证明,我尝试向 iPhone 上的 GarageBand 发送一条注释。我正在尝试使用 AudioKit 来完成此任务。

我创建的代码如下:

import UIKit
import AudioKit

class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
    let midi = AudioKit.midi
    ...
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        midi.createVirtualOutputPort()
        midi.openOutput()
    }
    ...
    func SomeFunc()
    {
        midi.sendNoteOnMessage(noteNumber: UInt8(note + (octave * 12)), velocity: 90, channel: 0)
        usleep(UInt32(delay * second))
        midi.sendNoteOffMessage(noteNumber: UInt8(note + (octave * 12)), velocity: 0, channel: 0)
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我收到的错误:

AKMIDI.swift:init():63:初始化 MIDI …

xcode ios swift audiokit

5
推荐指数
1
解决办法
1037
查看次数