Как использовать kAudioUnitSubType_LowShelfFilter из kAudioUnitType_Effect, который управляет басами в основном аудио?

Я вернулся с еще одним вопросом, связанным с BASS. Я уже публиковал этот вопрос Как мы можем управлять басами музыки в iPhone, но не привлекать столько внимания людей, сколько должно. Но теперь я провел еще несколько поисков и прочитал Core AUDIO. У меня есть один пример кода, которым я хочу поделиться с вами, вот ссылка для его загрузки iPhoneMixerEqGraphTest. Взгляните на это в этом коде, и я увидел, что разработчик использовал предустановленный эквалайзер, предоставленный iPod в Apple. Давайте также посмотрим фрагмент кода: ----

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

Что делает kAudioUnitSubType_AUiPodEQ, так это то, что он получает предустановленные значения из эквалайзера iPod и возвращает нас в Xcode в виде массива, который мы можем использовать в PickerView/TableView, и можем установить любую категорию, например, бас, рок, танец и т. д. Для меня это беспомощно, поскольку возвращает только имена типов эквалайзера, таких как бас, рок, танец и т. д., поскольку я хочу реализовать только бас и хочу реализовать его на UISLider.

Чтобы реализовать Bass на ползунке, мне нужны значения, чтобы я мог установить минимальное и максимальное значение, чтобы при перемещении ползунка можно было изменить бас.

Получив все это, я начал читать классы фреймворка Core Audio Audio Unit и получил этот Ipod Desc Imageпосле этого я начал искать для контроля баса и получил это

введите здесь описание изображения

Итак, теперь мне нужно реализовать этот kAudioUnitSubType_LowShelfFilter. Но теперь я не знаю, как реализовать это перечисление в моем коде, чтобы я мог управлять басом в письменной документации. Даже Apple не написала, как мы можем его использовать. kAudioUnitSubType_AUiPodEQ эта категория возвращала нам массив, но категория kAudioUnitSubType_LowShelfFilter не возвращала никакого массива. При использовании kAudioUnitSubType_AUiPodEQ этой категории мы можем использовать типы эквалайзера из массива, но как мы можем использовать эту категорию kAudioUnitSubType_LowShelfFilter. Может ли кто-нибудь помочь мне в этом каким-либо образом? Это было бы очень ценно.

Спасибо.


person Nikhil Bansal    schedule 09.08.2012    source источник


Ответы (1)


Обновить

Хотя это заявлено в заголовках iOS, Low Shelf AU на самом деле не доступен на iOS.


Параметры Low Shelf отличаются от параметров iPod EQ.

Параметры объявлены и задокументированы в `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
};

Итак, после того, как ваша АС низкой полки создана, настройте ее параметры с помощью AudioUnitSetParameter.

Некоторые начальные значения параметров, которые вы можете попробовать, это 120 Гц (kAULowShelfParam_CutoffFrequency) и +6 дБ (kAULowShelfParam_Gain) — при условии, что ваша система хорошо воспроизводит басы, ваш низкочастотный контент должен быть в два раза громче.


Можете ли вы сказать мне, как я могу использовать этот 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 ...;
}
person justin    schedule 19.08.2012
comment
спасибо за ответ Джастин. Можете ли вы сказать мне, как я могу использовать этот kAULowShelfParam_CutoffFrequency для изменения частоты. я пытаюсь изменить его, но когда я меняю значение, он падает. Пожалуйста помоги!!! - person Nikhil Bansal; 20.08.2012
comment
хорошо, спасибо за ответ, позвольте мне проверить, работает ли это для меня или нет - person Nikhil Bansal; 20.08.2012
comment
нам нужно изменить частотуInHz сейчас, чтобы изменить бас от минимальной точки до максимальной точки? - person Nikhil Bansal; 20.08.2012
comment
я пробовал это, даже моя музыка перестала играть сейчас. что делать? пожалуйста сделайте что-нибудь. - person Nikhil Bansal; 20.08.2012
comment
@NikhilBansal да. вы можете установить frequencyInHz на любое значение в диапазоне [10...200], а затем снова вызвать AudioUnitSetParameter. - person justin; 20.08.2012
comment
я использовал этот код, который вы пишете в ответ, но он дает слишком много плохого, и моя музыка тоже перестает играть. музыка перестала работать. изменение, которое я сделал, заключается в том, что частотаInHz изменена мной на значение ползунка, где диапазон ползунка составляет от 80 до 120 - person Nikhil Bansal; 20.08.2012
comment
@NikhilBansal, я предлагаю вам опубликовать новый вопрос с минимальной программой, которая воспроизводит проблему для других. попробуйте подробно описать ошибку и то, что вы ожидаете. или вы можете попробовать запустить GuardMalloc и посмотреть, поможет ли это изолировать любую проблему, связанную с памятью. крайне маловероятно, что установка параметра, как указано выше, является фактическим источником проблемы, которую вы видите. - person justin; 20.08.2012
comment
это мой новый вопрос, пожалуйста, взгляните на него использовать параметр частоты среза kaulowshelfparam для kaudionitsubtype lowsh"> stackoverflow.com/questions/12033705/ - person Nikhil Bansal; 20.08.2012
comment
давайте продолжим это обсуждение в чате - person Nikhil Bansal; 20.08.2012