8

BASSに関連するもう1つの質問があります。私はすでにこの質問を投稿しました。iPhoneで音楽の低音を制御するにはどうすればよいですか。しかし今、私はもう少し検索を行い、CoreAUDIOを読みました。ここで皆さんと共有したいサンプルコードを1つ入手しました。これは、iPhoneMixerEqGraphTestをダウンロードするためのリンクです。私が見たのは、開発者がAppleのiPodによって提供されたプリセットイコライザーを使用していたことです。いくつかのコードスニペットも見てみましょう:----

// iPodEQ unit
CAComponentDescription eq_desc(kAudioUnitType_Effect, kAudioUnitSubType_AUiPodEQ, kAudioUnitManufacturer_Apple);

kAudioUnitSubType_AUiPodEQは、iPodのイコライザーからプリセット値を取得し、PickerView / TableViewで使用できる配列のXcodeで返し、ベース、ロック、ダンスなどのカテゴリを設定できます。名前しか返さないため、私には無力です。ベースのみを実装し、UISLiderに実装したいので、ベース、ロック、ダンスなどのイコライザータイプの

スライダーに低音を実装するには、移動するスライダーの低音を変更できるように最小値と最大値を設定できる値が必要です。

これをすべて取得した後、CoreAudioのAudioUnitフレームワークのクラスを読み始め、iPodの説明画像 その後、低音コントロールの検索を開始して、これを取得しました。

ここに画像の説明を入力してください

したがって、このkAudioUnitSubType_LowShelfFilterを実装する必要があります。しかし、今では、この列挙型をコードに実装して、書かれたドキュメントとして低音を制御できるようにする方法がわかりません。Appleでさえ、どうやってそれを使うことができるかについては書いていませんでした。kAudioUnitSubType_AUiPodEQこのカテゴリは配列を返していましたが、kAudioUnitSubType_LowShelfFilterカテゴリは配列を返していません。kAudioUnitSubType_AUiPodEQこのカテゴリを使用している間、配列からイコライザーのタイプを使用できますが、このカテゴリkAudioUnitSubType_LowShelfFilterをどのように使用できますか。誰かがこれに関して何らかの方法で私を助けることができますか?それは非常に高く評価されるでしょう。

ありがとう。

4

1 に答える 1

4

アップデート

iOSヘッダーで宣言されていますが、LowShelfAUは実際にはiOSでは使用できません。


ローシェルフのパラメーターはiPodEQとは異なります。

パラメータは、 `AudioUnit / AudioUnitParameters.h'で宣言され、文書化されています。

// Parameters for the AULowShelfFilter unit
enum {
  // Global, Hz, 10->200, 80
  kAULowShelfParam_CutoffFrequency = 0,

  // Global, dB, -40->40, 0
  kAULowShelfParam_Gain = 1
};

したがって、ローシェルフAUが作成されたら、を使用してそのパラメーターを構成しますAudioUnitSetParameter

試すことができるいくつかの初期パラメーター値は、120 Hz(kAULowShelfParam_CutoffFrequency)および+6 dB(kAULowShelfParam_Gain)です。システムが低音を適切に再生すると仮定すると、低周波数コンテンツは2倍の音量になります。


このkAULowShelfParam_CutoffFrequencyを使用して周波数を変更する方法を教えてください。

すべてが正しく構成されている場合、必要なのはこれだけです。

assert(lowShelfAU);
const float frequencyInHz = 120.0f;
OSStatus result = AudioUnitSetParameter(lowShelfAU,
                                        kAULowShelfParam_CutoffFrequency,
                                        kAudioUnitScope_Global,
                                        0,
                                        frequencyInHz,
                                        0);
if (noErr != result) {
  assert(0 && "error!");
  return ...;
}
于 2012-08-19T09:24:44.007 に答える