LoginSignup
25
22

More than 5 years have passed since last update.

Audio Unitのパラメータ詳細(Effect編)

Last updated at Posted at 2016-02-28

前回の投稿では、AUGraphを用いたリアルタイム・タイムストレッチについて説明しました。これはkAudioUnitType_FormatConverterの分類にあるkAudioUnitSubType_AUiPodTimeOtherを用いて実現しました。

Audio Unitは他にも様々な機能を有しています。今回はkAudioUnitType_Effectに対して、パラメータの詳細について説明します。

概要

Audio Unitのパラメータの種類はAudioUnit/AUComponent.hで定義されています。

Audio Unit Typeは以下の種類があります。

kAudioUnitType_Output
kAudioUnitType_MusicDevice
kAudioUnitType_MusicEffect
kAudioUnitType_FormatConverter
kAudioUnitType_Effect
kAudioUnitType_Mixer
kAudioUnitType_Panner
kAudioUnitType_Generator
kAudioUnitType_OfflineEffect
kAudioUnitType_MIDIProcessor

Audio Unit Type の各Typeをさらに分類したAudio Unit SubTypeのうち、Effectについて、iOSで(現時点で)利用できる機能は以下のものがあります。

kAudioUnitSubType_PeakLimiter
kAudioUnitSubType_DynamicsProcessor
kAudioUnitSubType_LowPassFilter
kAudioUnitSubType_HighPassFilter
kAudioUnitSubType_BandPassFilter
kAudioUnitSubType_HighShelfFilter
kAudioUnitSubType_LowShelfFilter
kAudioUnitSubType_ParametricEQ
kAudioUnitSubType_Distortion
kAudioUnitSubType_Delay
kAudioUnitSubType_SampleDelay
kAudioUnitSubType_NBandEQ
kAudioUnitSubType_Reverb2
kAudioUnitSubType_AUiPodEQ

今回は上記SubTypeのパラメータについて説明します。一部を除き、大部分はAudioUnit/AudioUnitParameters.hで定義されています。

前回の投稿と同様、サンプルプログラムでのNSLogにて取得した結果をそのまま載せています。

kAudioUnitSubType_PeakLimiter

ピーク・リミッター。コンプレッサーとほぼ同じ概念のエフェクトです。
attack timeでリミッターがかかるまでの時間を、release timeでリミッターが終了するまでの時間を調整します。pre-gainでリミッターのゲインを調整します。

numOfParams = 3
paramList[0] = 0
paramInfo.name = attack time
paramInfo.minValue = 0.000500
paramInfo.maxValue = 0.030000
paramInfo.defaultValue = 0.002000
paramList[1] = 1
paramInfo.name = release time
paramInfo.minValue = 0.001000
paramInfo.maxValue = 0.040000
paramInfo.defaultValue = 0.005000
paramList[2] = 2
paramInfo.name = pre-gain
paramInfo.minValue = -40.000000
paramInfo.maxValue = 40.000000
paramInfo.defaultValue = 0.000000

kAudioUnitSubType_DynamicsProcessor

ダイナミクス・プロセッサー。ダイナミクス系のエフェクト(コンプレッサー/リミッター、エキスパンダー/ノイズ・ゲート)が得られます。エキスパンダーとは、しきい値のレベルに対して、それ以上のレベルをより大きく、それ以下のレベルをより小さくして、ダイナミックレンジを広げる機能です。
compression thresholdはコンプレッサーのしきい値を設定します。
headroomは基準音量レベルと最大許容レベルの比を設定します。
expansion ratioexpansion thresholdはエキスパンダーの増幅率としきい値を設定します。
attack timerelease timeはダイナミクスのかかる前後の時間を調整します。

numOfParams = 7
paramList[0] = 0
paramInfo.name = compression threshold
paramInfo.minValue = -100.000000
paramInfo.maxValue = 20.000000
paramInfo.defaultValue = -15.000000
paramList[1] = 1
paramInfo.name = headroom
paramInfo.minValue = 0.100000
paramInfo.maxValue = 40.000000
paramInfo.defaultValue = 5.600000
paramList[2] = 2
paramInfo.name = expansion ratio
paramInfo.minValue = 1.000000
paramInfo.maxValue = 50.000000
paramInfo.defaultValue = 1.000000
paramList[3] = 3
paramInfo.name = expansion threshold
paramInfo.minValue = -120.000000
paramInfo.maxValue = 0.000000
paramInfo.defaultValue = -100.000000
paramList[4] = 4
paramInfo.name = attack time
paramInfo.minValue = 0.001000
paramInfo.maxValue = 0.300000
paramInfo.defaultValue = 0.050000
paramList[5] = 5
paramInfo.name = release time
paramInfo.minValue = 0.010000
paramInfo.maxValue = 3.000000
paramInfo.defaultValue = 0.030000
paramList[6] = 6
paramInfo.name = master gain
paramInfo.minValue = -40.000000
paramInfo.maxValue = 40.000000
paramInfo.defaultValue = 0.000000

kAudioUnitSubType_LowPassFilter

ローパスフィルター。cutoff frequency以下の周波数領域の音を通します。
resonanceはcutoff frequency付近の周波数の音量を調整する機能で、音にクセが付きます。

numOfParams = 2
paramList[0] = 0
paramInfo.name = cutoff frequency
paramInfo.minValue = 10.000000
paramInfo.maxValue = 21829.500000
paramInfo.defaultValue = 6900.000000
paramList[1] = 1
paramInfo.name = resonance
paramInfo.minValue = -20.000000
paramInfo.maxValue = 40.000000
paramInfo.defaultValue = 0.000000

kAudioUnitSubType_HighPassFilter

ハイパスフィルター。cutoff frequency以上の周波数領域の音を通します。

numOfParams = 2
paramList[0] = 0
paramInfo.name = cutoff frequency
paramInfo.minValue = 10.000000
paramInfo.maxValue = 22050.000000
paramInfo.defaultValue = 6900.000000
paramList[1] = 1
paramInfo.name = resonance
paramInfo.minValue = -20.000000
paramInfo.maxValue = 40.000000
paramInfo.defaultValue = 0.000000

kAudioUnitSubType_BandPassFilter

バンドパスフィルター。cutoff frequencyを中心に、bandwidthの幅の周波数領域の音を通します。ローパスフィルターとハイパスフィルターを組み合わせたフィルターです。

numOfParams = 2
paramList[0] = 0
paramInfo.name = center frequency
paramInfo.minValue = 20.000000
paramInfo.maxValue = 22050.000000
paramInfo.defaultValue = 5000.000000
paramList[1] = 1
paramInfo.name = bandwidth
paramInfo.minValue = 100.000000
paramInfo.maxValue = 12000.000000
paramInfo.defaultValue = 600.000000

kAudioUnitSubType_HighShelfFilter

ハイシェルフフィルター。cutoff frequency以上の周波数領域の音をgain分だけ増幅します。

numOfParams = 2
paramList[0] = 0
paramInfo.name = cutoff frequency
paramInfo.minValue = 10000.000000
paramInfo.maxValue = 22050.000000
paramInfo.defaultValue = 10000.000000
paramList[1] = 1
paramInfo.name = gain
paramInfo.minValue = -40.000000
paramInfo.maxValue = 40.000000
paramInfo.defaultValue = 0.000000

kAudioUnitSubType_LowShelfFilter

ローシェルフフィルター。cutoff frequency以下の周波数領域の音をgain分だけ増幅します。

numOfParams = 2
paramList[0] = 0
paramInfo.name = cutoff frequency
paramInfo.minValue = 10.000000
paramInfo.maxValue = 200.000000
paramInfo.defaultValue = 80.000000
paramList[1] = 1
paramInfo.name = gain
paramInfo.minValue = -40.000000
paramInfo.maxValue = 40.000000
paramInfo.defaultValue = 0.000000

kAudioUnitSubType_ParametricEQ

パラメトリックイコライザー。cutoff frequencyを中心に、Q(変動させる帯域幅)の値の帯域幅に対する周波数領域の音をgain分だけ増幅します。

numOfParams = 3
paramList[0] = 0
paramInfo.name = center frequency
paramInfo.minValue = 20.000000
paramInfo.maxValue = 21829.500000
paramInfo.defaultValue = 2000.000000
paramList[1] = 1
paramInfo.name = Q
paramInfo.minValue = 1.000000
paramInfo.maxValue = 20.000000
paramInfo.defaultValue = 10.000000
paramList[2] = 2
paramInfo.name = gain
paramInfo.minValue = -20.000000
paramInfo.maxValue = 20.000000
paramInfo.defaultValue = 0.000000

kAudioUnitSubType_Distortion

ディストーション。歪み系のエフェクトとして有名です。
こちらはまだ詳細は追えていないです。パラメータ数が16個もあり、例えばdecimationはデータの間引き、ring modはリング・モジュレーターに関するパラメータと思われます。わかりしだい、おいおい追記したいと思います。

numOfParams = 16
paramList[0] = 0
paramInfo.name = delay
paramInfo.minValue = 0.100000
paramInfo.maxValue = 500.000000
paramInfo.defaultValue = 0.100000
paramList[1] = 1
paramInfo.name = decay
paramInfo.minValue = 0.100000
paramInfo.maxValue = 50.000000
paramInfo.defaultValue = 1.000000
paramList[2] = 2
paramInfo.name = delay mix
paramInfo.minValue = 0.000000
paramInfo.maxValue = 100.000000
paramInfo.defaultValue = 50.000000
paramList[3] = 3
paramInfo.name = decimation
paramInfo.minValue = 0.000000
paramInfo.maxValue = 100.000000
paramInfo.defaultValue = 50.000000
paramList[4] = 4
paramInfo.name = rounding
paramInfo.minValue = 0.000000
paramInfo.maxValue = 100.000000
paramInfo.defaultValue = 0.000000
paramList[5] = 5
paramInfo.name = decimation mix
paramInfo.minValue = 0.000000
paramInfo.maxValue = 100.000000
paramInfo.defaultValue = 50.000000
paramList[6] = 6
paramInfo.name = linear term
paramInfo.minValue = 0.000000
paramInfo.maxValue = 1.000000
paramInfo.defaultValue = 1.000000
paramList[7] = 7
paramInfo.name = squared term
paramInfo.minValue = 0.000000
paramInfo.maxValue = 20.000000
paramInfo.defaultValue = 0.000000
paramList[8] = 8
paramInfo.name = cubic term
paramInfo.minValue = 0.000000
paramInfo.maxValue = 20.000000
paramInfo.defaultValue = 0.000000
paramList[9] = 9
paramInfo.name = polynomial mix
paramInfo.minValue = 0.000000
paramInfo.maxValue = 100.000000
paramInfo.defaultValue = 50.000000
paramList[10] = 10
paramInfo.name = ring mod freq 1
paramInfo.minValue = 0.500000
paramInfo.maxValue = 8000.000000
paramInfo.defaultValue = 100.000000
paramList[11] = 11
paramInfo.name = ring mod freq 2
paramInfo.minValue = 0.500000
paramInfo.maxValue = 8000.000000
paramInfo.defaultValue = 100.000000
paramList[12] = 12
paramInfo.name = ring mod balance
paramInfo.minValue = 0.000000
paramInfo.maxValue = 100.000000
paramInfo.defaultValue = 50.000000
paramList[13] = 13
paramInfo.name = ring mod mix
paramInfo.minValue = 0.000000
paramInfo.maxValue = 100.000000
paramInfo.defaultValue = 0.000000
paramList[14] = 14
paramInfo.name = soft clip gain
paramInfo.minValue = -80.000000
paramInfo.maxValue = 20.000000
paramInfo.defaultValue = -6.020600
paramList[15] = 15
paramInfo.name = wet/dry mix
paramInfo.minValue = 0.000000
paramInfo.maxValue = 100.000000
paramInfo.defaultValue = 50.000000

kAudioUnitSubType_Delay

ディレイ。エコーの効果が得られます。dry/wet mixでディレイ部分の音量を調整します。delay timeはディレイの時間、feedbackはディレイの回数を設定します。

numOfParams = 4
paramList[0] = 0
paramInfo.name = dry/wet mix
paramInfo.minValue = 0.000000
paramInfo.maxValue = 100.000000
paramInfo.defaultValue = 50.000000
paramList[1] = 1
paramInfo.name = delay time
paramInfo.minValue = 0.000100
paramInfo.maxValue = 2.000000
paramInfo.defaultValue = 1.000000
paramList[2] = 2
paramInfo.name = feedback
paramInfo.minValue = -99.900002
paramInfo.maxValue = 99.900002
paramInfo.defaultValue = 50.000000
paramList[3] = 3
paramInfo.name = lowpass cutoff frequency
paramInfo.minValue = 10.000000
paramInfo.maxValue = 22050.000000
paramInfo.defaultValue = 15000.000000

kAudioUnitSubType_SampleDelay

サンプルディレイ。サンプル単位でディレイをかけることができます。

numOfParams = 1
paramList[0] = 0
paramInfo.name = in to out delay
paramInfo.minValue = 0.000000
paramInfo.maxValue = 4410.000000
paramInfo.defaultValue = 0.000000

kAudioUnitSubType_NBandEQ

Nバンドイコライザー。gainだけを可変にして、他のパラメータは固定で用いるのが一般的かと思います。

numOfParams = 41
paramList[0] = 0
paramInfo.name = global gain
paramInfo.minValue = -96.000000
paramInfo.maxValue = 24.000000
paramInfo.defaultValue = 0.000000

paramList[1] = 1000
paramInfo.name = bypass
paramInfo.minValue = 0.000000
paramInfo.maxValue = 1.000000
paramInfo.defaultValue = 1.000000
paramList[2] = 2000
paramInfo.name = type
paramInfo.minValue = 0.000000
paramInfo.maxValue = 10.000000
paramInfo.defaultValue = 0.000000
paramList[3] = 3000
paramInfo.name = frequency
paramInfo.minValue = 10.000000
paramInfo.maxValue = 21609.000000
paramInfo.defaultValue = 1000.000000
paramList[4] = 4000
paramInfo.name = gain
paramInfo.minValue = -96.000000
paramInfo.maxValue = 24.000000
paramInfo.defaultValue = 0.000000
paramList[5] = 5000
paramInfo.name = bandwidth
paramInfo.minValue = 0.050000
paramInfo.maxValue = 5.000000
paramInfo.defaultValue = 0.500000

paramList[6] = 1001
paramInfo.name = bypass
paramInfo.minValue = 0.000000
paramInfo.maxValue = 1.000000
paramInfo.defaultValue = 1.000000
paramList[7] = 2001
paramInfo.name = type
paramInfo.minValue = 0.000000
paramInfo.maxValue = 10.000000
paramInfo.defaultValue = 0.000000
paramList[8] = 3001
paramInfo.name = frequency
paramInfo.minValue = 10.000000
paramInfo.maxValue = 21609.000000
paramInfo.defaultValue = 1000.000000
paramList[9] = 4001
paramInfo.name = gain
paramInfo.minValue = -96.000000
paramInfo.maxValue = 24.000000
paramInfo.defaultValue = 0.000000
paramList[10] = 5001
paramInfo.name = bandwidth
paramInfo.minValue = 0.050000
paramInfo.maxValue = 5.000000
paramInfo.defaultValue = 0.500000

 [11]~[35] 長いので省略

paramList[36] = 1007
paramInfo.name = bypass
paramInfo.minValue = 0.000000
paramInfo.maxValue = 1.000000
paramInfo.defaultValue = 1.000000
paramList[37] = 2007
paramInfo.name = type
paramInfo.minValue = 0.000000
paramInfo.maxValue = 10.000000
paramInfo.defaultValue = 0.000000
paramList[38] = 3007
paramInfo.name = frequency
paramInfo.minValue = 10.000000
paramInfo.maxValue = 21609.000000
paramInfo.defaultValue = 1000.000000
paramList[39] = 4007
paramInfo.name = gain
paramInfo.minValue = -96.000000
paramInfo.maxValue = 24.000000
paramInfo.defaultValue = 0.000000
paramList[40] = 5007
paramInfo.name = bandwidth
paramInfo.minValue = 0.050000
paramInfo.maxValue = 5.000000
paramInfo.defaultValue = 0.500000

typeについては以下のようになっています。いわゆるNバンドイコライザーを実現したい場合は type = 0 にします。

kAUNBandEQFilterType_Parametric = 0,
kAUNBandEQFilterType_2ndOrderButterworthLowPass = 1,
kAUNBandEQFilterType_2ndOrderButterworthHighPass = 2,
kAUNBandEQFilterType_ResonantLowPass = 3,
kAUNBandEQFilterType_ResonantHighPass = 4,
kAUNBandEQFilterType_BandPass = 5,
kAUNBandEQFilterType_BandStop = 6,
kAUNBandEQFilterType_LowShelf = 7,
kAUNBandEQFilterType_HighShelf = 8,
kAUNBandEQFilterType_ResonantLowShelf = 9,
kAUNBandEQFilterType_ResonantHighShelf = 10,

特に設定をしなければ上の例のように8バンド分のパラメータが用意されますが、kAUNBandEQProperty_NumberOfBandsプロパティを設定することでバンド数を変更することができます。

kAudioUnitSubType_Reverb2

リバーブ。ディレイを複雑にしたもの、という感じです。Reverb2 となっていますが、想定されるように Reverb1 にあたるものがあったようで、改善版のようです。
delay timeは min/max で調整でき、decay timeも low/high freq で調整できます。randomize reflectionsで反射のランダム性を調整します。これらを含む、すべてのパラメータをスライダーでUIに割り当てて試してみるとわかりやすいと思います。

numOfParams = 7
paramList[0] = 0
paramInfo.name = dry/wet mix
paramInfo.minValue = 0.000000
paramInfo.maxValue = 100.000000
paramInfo.defaultValue = 50.000000
paramList[1] = 1
paramInfo.name = gain
paramInfo.minValue = -20.000000
paramInfo.maxValue = 20.000000
paramInfo.defaultValue = 0.000000
paramList[2] = 2
paramInfo.name = min delay time
paramInfo.minValue = 0.000100
paramInfo.maxValue = 1.000000
paramInfo.defaultValue = 0.008000
paramList[3] = 3
paramInfo.name = max delay time
paramInfo.minValue = 0.000100
paramInfo.maxValue = 1.000000
paramInfo.defaultValue = 0.050000
paramList[4] = 4
paramInfo.name = low freq decay time
paramInfo.minValue = 0.001000
paramInfo.maxValue = 20.000000
paramInfo.defaultValue = 1.000000
paramList[5] = 5
paramInfo.name = high freq decay time
paramInfo.minValue = 0.001000
paramInfo.maxValue = 20.000000
paramInfo.defaultValue = 1.000000
paramList[6] = 6
paramInfo.name = randomize reflections
paramInfo.minValue = 1.000000
paramInfo.maxValue = 1000.000000
paramInfo.defaultValue = 1.000000

kAudioUnitSubType_AUiPodEQ

iPodイコライザー。デフォルトの「ミュージック」アプリの設定に含まれるイコライザーですので、細かな調整をするような使い方はなさそうです。現在利用できるのは23種類のようですが、なぜかパラメータの設定範囲はそれより広く設けられています。

numOfParams = 3
paramList[0] = 0
paramInfo.name = Filter1 Index
paramInfo.minValue = -1.000000
paramInfo.maxValue = 58.000000
paramInfo.defaultValue = -1.000000
paramList[1] = 1
paramInfo.name = Filter2 Index
paramInfo.minValue = -1.000000
paramInfo.maxValue = 58.000000
paramInfo.defaultValue = -1.000000
paramList[2] = 2
paramInfo.name = Filter3 Index
paramInfo.minValue = -1.000000
paramInfo.maxValue = 58.000000
paramInfo.defaultValue = -1.000000

以上です。

実装方法については、以下のサンプルプログラムを参照してください。(EffectAudioIO)
https://github.com/JunichiMinamino/AudioObjCSample

サンプルではローパスフィルター(kAudioUnitSubType_LowPassFilter)の例で作成してあります。

25
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
22