見出し画像

AudioKitの使い方

AudioKitというiOS/macOSの有名なオーディオライブラリがある。存在自体はずっと前から知ってはいたものの、使用したことはなかった。

とある用途でコンプレッサーを使いたくて、試してみた。

ちなみにCookbookという公式の全部入りサンプルがあるのだけど、

これはAudioKitを初めて使う場合、またごく一部の機能だけ使いたい場合には何が最小要件なのかがわかりづらい。

たとえばAudioKitUIというUIライブラリは使いたくないときにどこが省けるのかとか、このコードや設定ってマイク録音を使用しない場合にも必要なのかなとか、そういうのが「全部入り」のためにわかりづらくなっている。

本記事では「最小実装」を示す。

プロジェクトに導入する

現時点での最新、4.11.2をSPMで入れようとすると以下のようなエラーになる。

Package Resolution Failed
"AudioKit.git" could not be resolved:
https://github.com/AudioKit/AudioKit.git has no Package.swift manifest for version 4.11.2

ワークアラウンドとして、バージョン指定ではなく、v5-mainブランチを指定すると解決した。

最小実装でオーディオファイルを再生する

Cookbookにはオーディオファイルを再生するだけの最小実装のサンプルがなく(AudioKitを使う意味がないのでそりゃそうともいえるが)、DryWetMixerなどが必ず入っていて何が必要要件なのかがわかりづらい。

スタート地点として、再生だけの最小実装を探ったところ、以下のようになった。

・プロパティの定義

let engine = AudioEngine()
let player = AudioPlayer()
var sourceBuffer: AVAudioPCMBuffer {
   let url = Bundle.main.url(forResource: "beat", withExtension: "aiff")!
   let file = try! AVAudioFile(forReading: url)
   return try! AVAudioPCMBuffer(file: file)!
}

・初期化処理

player.isLooping = true
player.buffer = sourceBuffer

engine.output = player
try! engine.start()

・再生開始

player.play()

AudioEngineは内部でAVAudioEngineを持っていて、ほぼ似たような実装。

AudioKitのエフェクター

AudioKitには次のようなエフェクターが定義されている。Nodeクラスを継承しており、実際のエフェクターのように複数つなげて使用することが可能。

### ディレイ

・Delay
・StereoDelay
・VariableDelay

### ディストーション系

・BitCrusher
・Clipper
・Decimator
・DiodeClipper
・Distortion
・RingModulator
・TanhDistortion

### ダイナミクス系

Compressor
DynamicRangeCompressor
DynamicsProcessor
Expander
PeakLimiter
TransientShaper

### エンベロープ系

・AmplitudeEnvelope
・Tremolo

### フィルター/イコライザー系

LowShelfFilter
BandPassButterworthFilter
BandPassFilter
BandRejectButterworthFilter
DCBlock
EqualizerFilter
FormantFilter
HighPassButterworthFilter
HighPassFilter
HighShelfFilter
HighShelfParametricEqualizerFilter
KorgLowPassFilter
LowPassButterworthFilter
LowPassFilter
LowShelfParametricEqualizerFilter
ModalResonanceFilter
MoogLadder
ParametricEQ
PeakingParametricEqualizerFilter
ResonantFilter
RolandTB303Filter
StringResonator
ThreePoleLowpassFilter
ToneComplementFilter
ToneFilter

### モジュレーション系

Chorus
Flanger
Phaser

### その他

めんどくさくなったので省略。リバーブ系、オートワウとかピッチシフターもある。

AudioKitエフェクターの最小実装

ここから先は

172字
文章やサンプルコードは多少荒削りかもしれませんが、ブログや書籍にはまだ書いていないことを日々大量に載せています。たったの400円で、すぐに購読解除してもその月は過去記事もさかのぼって読めるので、少しでも気になる内容がある方にはオトクかと思います。

技術的なメモやサンプルコード、思いついたアイデア、考えたこと、お金の話等々、頭をよぎった諸々を気軽に垂れ流しています。

最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/