Запись патчей процессора

Пользовательский патч процессора является истиной к своему имени. Это обрабатывает данные в ответ на изменения в значениях его входных параметров. Эта глава показывает, как записать пользовательский патч, обрабатывающий строки и другого, который обрабатывает числовые значения. Вы будете использовать свойства Objective-C 2.0 для определения параметров ввода и вывода. Тогда Вы будете видеть, как изменить процессор числового значения так, чтобы он использовал внутренние настройки. При помощи шаблона, предоставленного в XCode, Вы упакуете каждый пользовательский патч как плагин, который может распознать Кварцевое средство разработки Композитора. Любой пользовательский патч, включенный в плагин, обнаруживается в Кварцевом Создателе Патча Композитора.

интернет-компания: Создание Доменных имен

Интернет-компания пользовательский патч берет любую строку в качестве ввода и добавляет .com к нему. Например, если входная строка patch тогда выводимая строка patch.com. Когда упаковано как плагин это загружается в Кварцевое средство разработки Композитора, получающийся пользовательский патч похож на то, что показано на рисунке 2-1. Путем создания этого простого патча сначала, Вы изучите критические части пользовательского патча и как связать их вместе.

Рисунок 2-1  интернет-компания пользовательский патч
The dotCom custom patch

Выполните эти шаги для создания интернет-компании пользовательский патч:

  1. Откройте Xcode и выберите File> New Project.

  2. В окне New Project выберите Standard Apple Plug-ins> Quartz Composer Plug-in и нажмите Далее.

  3. Войти dotCom в текстовом поле Project Name и нажимают Finish.

    Проект открывается этими файлами.

    graphicgraphic
  4. Откройтесь dotComPlugin.h файл.

    Сменный шаблон автоматически разделяет на подклассы QCPlugIn. Объявите, что два свойства строки используют в качестве параметров ввода и вывода. Вспомните, что входные ключи параметра должны запуститься с input и выходные ключи параметра должны запуститься с output. Ваш код должен посмотреть следующим образом:

    #import <Quartz/Quartz.h>
     
    @interface dotComPlugIn : QCPlugIn
    {
    }
    @property(assign) NSString* inputString;
    @property(assign) NSString* outputString;
    @end
  5. Закройтесь dotComPlugIn.h файл.

  6. Откройтесь dotComPlugIn.m файл.

  7. Сразу после @implementation оператор, добавляют следующие директивы так, чтобы Кварцевый Композитор обработал реализацию параметров.

    @dynamic inputString, outputString;
  8. Предоставьте описание для пользовательского патча.

    Это описание - то, что пользователь будет видеть в Кварцевом Композиторе. Измените описание для взгляда следующим образом:

    #define    kQCPlugIn_Description  @"Appends \".com\" to any string."

    Обратите внимание на то, что XCode автоматически определяет пользовательское имя патча на основе названия проекта, которое Вы предоставили. В этом случае имя dotCom.

    #define    kQCPlugIn_Name  @"dotCom"

    Если Вы хотели бы, можно изменить имя. Это имя обнаруживается в Создателе Патча как имя патча. Несмотря на то, что имя не должно быть уникальным, лучше для пользователя, если имя патча является и дескриптивным и уникальным.

  9. Затем Вы запишете, что методы должны были реализовать dotComPlugIn подкласс. Вы не должны изменять значение по умолчанию attributes метод предоставил в шаблоне, который должен посмотреть следующим образом:

    + (NSDictionary*) attributes
    {
        return [NSDictionary dictionaryWithObjectsAndKeys:
                    kQCPlugIn_Name,QCPlugInAttributeNameKey,
                    kQCPlugIn_Description,QCPlugInAttributeDescriptionKey,
                    nil];
    }
  10. Измените attributesForPropertyPortWithKey: так, чтобы это возвратило словарь для каждого параметра ввода и вывода. Каждый словарь должен содержать значение, сопровождаемое его ключом имени атрибута порта. Если порт имеет значение по умолчанию, словарь должен содержать значение, сопровождаемое ключом значения по умолчанию.

    Ключевое имя атрибута порта - то, что появляется как метка для пользовательского порта патча в Кварцевом Композиторе. По существу то, что Вы делаете, отображается QCPlugIn ключи параметра подкласса к пользовательским именам порта патча. Вы также захотите определить разумное значение по умолчанию.

    Для плагина интернет-компании измените метод, таким образом, это смотрит следующим образом:

    + (NSDictionary*) attributesForPropertyPortWithKey:(NSString*)key
    {
        if([key isEqualToString:@"inputString"])
            return [NSDictionary dictionaryWithObjectsAndKeys:
                @"Name", QCPortAttributeNameKey,
                @"mydomain",  QCPortAttributeDefaultValueKey,
                nil];
        if([key isEqualToString:@"outputString"])
            return [NSDictionary dictionaryWithObjectsAndKeys:
                @"Name.com", QCPortAttributeNameKey,
                nil];
        return nil;
    }
  11. Удостоверьтесь executionMode возвраты метода kQCPlugInExecutionModeProcessor.

    Это - патч процессора — он берет входные значения, обрабатывает их и выводит значение.

    + (QCPlugInExecutionMode) executionMode
    {
        return kQCPlugInExecutionModeProcessor;
    }
  12. Удостоверьтесь timeMode возвраты метода kQCPlugInTimeModeNone.

    Плагин интернет-компании должен выполниться только, когда изменяется входная строка.

    + (QCPlugInTimeMode) timeMode
    {
        return kQCPlugInTimeModeNone;
    }
  13. Метод выполнения - то, где обработка имеет место. Для интернет-компании пользовательский патч это довольно прямо. Метод должен добавить строку .com к любой строке это передало патчу. Код должен посмотреть следующим образом:

    - (BOOL) execute:(id<QCPlugInContext>)context
                atTime:(NSTimeInterval)time
                withArguments:(NSDictionary*)arguments
    {
        self.outputString = [self.inputString stringByAppendingString:@".com"];
     
        return YES;
    }

    Обратите внимание на то, что Вы используете self.<propertyname> к значениям свойств доступа. Вспомните, что можно только считать значения входных параметров, но можно считать и записать значения выходных параметров.

  14. Сохраните и закройтесь dotComPlugIn.m файл.

  15. Откройтесь Info.plist файл.

    Заметьте, что XCode автоматически добавляет следующую запись, требующуюся в словаре.

    <key>QCPlugInClasses</key>
    <array>
        <string>dotComPlugIn</string>
    </array>

    Если Вы добавляете другой пользовательский патч к проекту, необходимо добавить имя QCPlugIn разделите на подклассы как запись здесь. Однако Вы ничего не должны добавлять для интернет-компании пользовательский патч.

    Если Вы хотите, можно настроить идентификатор пакета прежде, чем сохранить и закрыть файл.

  16. Под Целями выберите Build и Copy. Затем нажмите Build “Сборка и Копия” и Запуститесь со всплывающего меню Действия.

    При создании использования этой опции XCode копирует успешно созданный плагин в ~/Library/Graphics/Quartz Composer Plug-Ins и запускает Кварцевое средство разработки Композитора.

  17. После того, как Кварцевый Композитор запускается, создайте пустой состав. Нажмите Patch Creator и тип dot в Поле поиска.

    graphic
  18. Дважды щелкните по имени интернет-компании для создания экземпляра в окне Editor. Тогда добавьте экземпляры Изображения Со Строкой, Ясной, и патчи Billboard к окну редактора. Соедините их как показано и удостоверьтесь, что интернет-компания, пользовательский патч работает, как это должно.

    graphic

    Вывод в Средстве просмотра должен быть похожим на это:

    graphic

MIDI2Color: отображение MIDI оценивает цветам

MIDI (Цифровой интерфейс музыкальных инструментов) является стандартом связи, позволяющим электронным музыкальным инструментам отправлять сигналы друг другу в целях управления, контроля и редактирования звуковых событий (примечание по, отметьте прочь, объем, речь синтезатора, и т.д.). Пользовательский патч MIDI2Color, который Вы создадите в этом разделе, отображает численное значение, в диапазоне от 0 до 127, к цвету. Много MIDI оценивают падение от 0 до 127 диапазонов, таких как число примечания MIDI и объем.

Идея позади пользовательского патча MIDI2Color состоит в том, чтобы отобразить определенную подачу (C, C#/Db, D, D#/Eb, E, F, и т.д.) к цвету и отобразить октаву, что подача находится в к альфа-значению. Низкие передачи производят большинство непрозрачных цветов, и высокие передачи производят наиболее прозрачные цвета. Таким образом можно создать состав, использующий информацию о MIDI для управления цветами, используемыми для вывода графических данных. Рисунок 2-2 показывает спектр цветов, что пользовательский патч MIDI2Color производит. Самые низкие октавы слева, самое высокое справа. Передачи колеблются от C до B, запускающегося в нижней части и увеличивающегося к вершине.

Рисунок 2-2  спектр цветов RGBA производится пользовательским патчем MIDI2Color
The spectrum of RGBA colors produced by the MIDI2Color custom patch

Вы будете видеть, что многие шаги должны были создать пользовательский патч MIDI2Color, совпадают с используемыми для создания интернет-компании пользовательский патч.

Для создания пользовательского патча MIDI2Color выполните эти шаги:

  1. Откройте Xcode и выберите File> New Project.

  2. В окне New Project выберите Standard Apple Plug-ins> Quartz Composer Plug-in и нажмите Далее.

  3. Войти MIDI2Color в текстовом поле Project Name и нажимают Finish.

  4. Откройтесь MIDI2ColorPlugin.h файл.

    Шаблон Xcode автоматически разделяет на подклассы QCPlugIn. Необходимо добавить объявления свойства для входного параметра, который является численным значением и выходным параметром, который является цветом. Вспомните из Таблицы 1-1, что порты, принимающие численное значение, объявляются как свойства, тип данных которых double. Порты, которые являются для цветов, требуют свойства, тип данных которого является a CGColorRef.

    Необходимо также добавить внутреннюю переменную для цветового пространства. Позже, Вы создадите цветовое пространство и сохраните его в этой переменной, чтобы избежать создавать и освобождать цветовое пространство каждый раз, когда необходимо вывести различный цвет. Несмотря на то, что вывод цвета Вашим пользовательским патчем может измениться, цветовое пространство остается тем же для каждого экземпляра патча.

    Когда Вы сделаны, изменив интерфейсный файл, это должно посмотреть следующим образом:

    #import <Quartz/Quartz.h>
     
    @interface MIDI2ColorPlugIn : QCPlugIn
    {
        CGColorSpaceRef myColorSpace;
    }
    // Declare a property input port of type Index and with the key inputValue
    @property NSUInteger inputValue;
    // Declare a property input port of type "Color" and with the key outputColor
    @property(assign) CGColorRef outputColor;
    @end
  5. Сохраните и закройтесь MIDI2ColorPlugIn.h файл.

  6. Откройтесь MIDI2ColorPlugin.m файл.

  7. Сразу после @implementation оператор, добавляют следующие директивы. Кварцевый Композитор обработает их реализацию.

    @dynamic inputValue, outputColor;
  8. Определите имя и описание для пользовательского патча.

    Имя уже предоставлено для Вас. Вы не должны изменять его. Измените описание как показано:

    #define    kQCPlugIn_Name @"MIDI2Color"
    #define    kQCPlugIn_Description  @"Converts a MIDI value to a color with transparency."
  9. Затем Вы запишете, что методы должны были реализовать MIDI2ColorPlugIn подкласс, начиная с attributes метод. Реализация, предоставленная шаблоном, должна посмотреть следующим образом и не нужна ни в какой модификации:

    + (NSDictionary*) attributes
    {
        return [NSDictionary dictionaryWithObjectsAndKeys:
                    kQCPlugIn_Name,QCPlugInAttributeNameKey,
                    kQCPlugIn_Description,QCPlugInAttributeDescriptionKey,
                    nil];
    }
  10. Измените attributesForPropertyPortWithKey: так, чтобы это возвратило словарь для каждого параметра ввода и вывода. Каждый словарь должен содержать значение, сопровождаемое его ключом имени атрибута порта. Если порт имеет значение по умолчанию, словарь должен содержать значение, сопровождаемое ключом значения по умолчанию.

    Если входные значения должны быть в определенном диапазоне, необходимо обеспечить максимальные и минимальные значения. Значения MIDI должны колебаться от 0 до 127, включительно, таким образом, этот пример предоставляет возможность для Вас для добавления этих значений.

    Для плагина MIDI2Color измените метод, таким образом, это смотрит следующим образом.

    + (NSDictionary*) attributesForPropertyPortWithKey:(NSString*)key
    {
        if([key isEqualToString:@"inputValue"])
            return [NSDictionary dictionaryWithObjectsAndKeys:
                @"Input Value", QCPortAttributeNameKey,
                [NSNumber numberWithUnsignedInteger:64],  QCPortAttributeDefaultValueKey,
                [NSNumber numberWithUnsignedInteger:127],  QCPortAttributeMaximumValueKey,
                [NSNumber numberWithUnsignedInteger:0],  QCPortAttributeMinimumValueKey,
                nil];
        if([key isEqualToString:@"outputColor"])
            return [NSDictionary dictionaryWithObjectsAndKeys:
                @"Output Color", QCPortAttributeNameKey,
                nil];
        return nil;
    }
  11. Удостоверьтесь executionMode возвраты метода kQCPlugInExecutionModeProcessor

    + (QCPlugInExecutionMode) executionMode
    {
        return kQCPlugInExecutionModeProcessor;
    }
  12. Удостоверьтесь timeMode возвраты метода kQCPlugInTimeModeNone.

    Пользовательский патч MIDI2Color должен выполниться только, когда изменяется входное значение; это не зависит вовремя.

    + (QCPlugInTimeMode) timeMode
    {
        return kQCPlugInTimeModeNone;
    }
  13. Измените startExecution: метод для создания объекта цветового пространства.

    Для этого примера можно использовать startExecution: метод, чтобы создать и инициализировать Кварцевое цветовое пространство. Цветовое пространство должно остаться тем же в течение жизни пользовательского экземпляра патча. Вы создадите цветовое пространство, когда патч начнет выполняться, сохраните его в colorSpace переменная экземпляра, которую Вы создали ранее, и затем выпускаете его, когда больше не выполняется пользовательский экземпляр патча.

    - (BOOL) startExecution:(id<QCPlugInContext>)context
    {
       myColorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
       return YES;
    }
  14. Измените stopExecution: метод для выпуска объекта цветового пространства.

    - (void) stopExecution:(id<QCPlugInContext>)context
    {
        CGColorSpaceRelease(myColorSpace);
    }
  15. Запишите метод выполнения для пользовательского патча MIDI2Color.

    Метод преобразовывает значение, это находится в диапазоне от 0 до 127 к цвету RGBA (красно, зелено, сине, альфа). Во-первых, кодовые группы, в которых находится октава входное значение. Тогда это узнает, который класс подачи представляет значение. В то время как альфа-значение определяется октавой, значения цвета RGB определяются классом подачи. Чем ниже октава, тем более непрозрачный цвет.

    Измените execute:atTime:withArguments: метод для взгляда следующим образом:

    - (BOOL) execute:(id<QCPlugInContext>)context
                atTime:(NSTimeInterval)time
                withArguments:(NSDictionary*)arguments
    {
        static float color[4];
     
        // Use a Quartz color
        CGColorRef myColor;
        int pitch, octave;
        float alpha;
        octave = floor(self.inputValue/12);
        pitch = (int) (self.inputValue - (octave * 12));
     
        // Set the RGB values according to pitch: C, C#/Db, D, E, and so on
        switch (pitch) {
            case 0: color[0] = 1.0; color[1] = 0.0; color[2] = 0.0; break; // C
            case 1: color[0] = 1.0; color[1] = 0.5; color[2] = 0.0; break; // C#/Db
            case 2: color[0] = 1.0; color[1] = 0.75; color[2] = 0.0; break; // D
            case 3: color[0] = 1.0; color[1] = 1.0; color[2] = 0.0; break; //D#/Eb
            case 4: color[0] = 0.5; color[1] = 1.0; color[2] = 0.0; break; //E
            case 5: color[0] = 0.0; color[1] = 1.0; color[2] = 0.0; break; //F
            case 6: color[0] = 0.0; color[1] = 0.5; color[2] = 0.5; break; //F#/Gb
            case 7: color[0] = 0.0; color[1] = 0.0; color[2] = 1.0; break; //G
            case 8: color[0] = 0.25; color[1] = 0.0; color[2] = 0.75; break; //G#/Ab
            case 9: color[0] = 0.3; color[1] = 0.0; color[2] = 0.5; break; // A
            case 10: color[0] = 0.4; color[1] = 0.0; color[2] = 0.75; break; //A#/Bb
            case 11: color[0] = 0.5; color[1] = 0.0; color[2] = 1.0; break;// B
            default: color[0] = 0.5; color[1] = 0.5; color[2] = 0.5;
        }
        // Set the alpha value, based on octave
        alpha = 1.0 - ((float)octave/11.0);
        color[3] = alpha;
        // Create a Quartz color object using the previously created color space
        myColor = CGColorCreate(myColorSpace, color);
        // Set the color on the output (this also retains the color)
        self.outputColor = myColor;
        // Release the color object since it is now stored in the output parameter
        CGColorRelease(myColor);
        return YES;
    }

    Сохраните и закройтесь MIDI2ColorPlugIn.m файл.

  16. Откройтесь Info.plist файл и удостоверяется, что следующий ключ является записью в словаре:

    <key>QCPlugInClasses</key>
    <array>
        <string>MIDI2ColorPlugIn</string>
    </array>

    Если Вы хотите, настраиваете идентификатор пакета, то сохраняете и закрываете файл.

  17. Под Целями выберите Build и Copy. Затем нажмите Build Build и Copy от всплывающего меню Действия.

    При создании использования этой опции XCode копирует успешно созданный плагин в ~/Library/Graphics/Quartz Composer Plug-Ins.

  18. Откройте Кварцевую среду разработки Композитора и ищите пользовательский патч MIDI2Color в Создателе Патча.

  19. Удостоверьтесь работы патча MIDI2Color путем создания состава, использующего его.

    Можно использовать патч интерполяции для обеспечения значений, включающих от 0 до 127 диапазонов. Лучше расширять диапазон, чтобы удостовериться, что граничные случаи обрабатываются правильно. Установите запуск и значение конца патча интерполяции к-20 и 150, соответственно. Тогда установите повторный режим в Зеркальный Цикл и продолжительность к 25 или выше. Соедините выходной порт патча интерполяции к входному порту патча MIDI2Color. После установки Ясного патча перетащите патч Системы частиц к редактору и соедините вывод патча MIDI2Color к порту Color патча Системы частиц.

    Перетащите изображение непосредственно к висячей строке редактора. Тогда подключите выходной порт изображения к входному порту Изображения патча Системы частиц. (Если у Вас нет изображений легко доступными, Вы могли бы выбрать одно из изображений, расположенных в ~Pictures/iChat Icons/Flowers.) Ваше тестовое приложение должно выглядеть подобным этому:

    graphic

    Вы могли бы хотеть внести несколько корректировок во входные параметры патча Системы частиц для получения результата, который эстетически приятен Вам, но Вы не должны. Поскольку изображения, произведенные Системой частиц, имеют время жизни, Вы будете в состоянии более легко видеть цвета и наблюдать не только, как оттенки изменяются, но и как изменяется непрозрачность.

    graphicgraphic

Number2Color: расширение MIDI2Color

Пользовательский патч MIDI2Color имеет главный недостаток; это обрабатывает входные значения, которые находятся в диапазоне от 0 до 127. Несмотря на то, что электронные приборы MIDI используют те значения для обозначения подачи и других аспектов музыки, многих из встроенного Кварцевого Композитора MIDI, пользовательские патчи обеспечивают нормализованные выходные значения (0.0 к 1.0) вместо необработанных значений MIDI. Кроме того, патч MIDI2Color может воздействовать на любые численные значения, не только предоставленных MIDI, как Вы видели с тестовым составом, использовавшим патч Интерполяции. Его использование не должно быть ограничено вводом MIDI, таким образом, смена имени в порядке.

В этом разделе Вы будете видеть, как улучшить патч MIDI2Color путем записи подобного пользовательского патча, принимающего любой диапазон значений. Вы добавите два параметра, которые будут доступны на области Settings инспектора для патча так, чтобы пользователь мог установить диапазон. Вы запишете метод выполнения, отображающий любой диапазон значений к более чем десяти «октавам» значений "подачи”. Вы назовете патч Number2Color, чтобы указать, что патч может использоваться для любого числового значения.

Выполните эти шаги для создания патча Number2Color:

  1. Откройте Xcode и выберите File> New Project.

  2. В окне New Project выберите Standard Apple Plug-ins> Quartz Composer Plug-in for Objective C With Internal Settings And User Interface. Тогда щелчок нажимает Далее.

    Этот шаблон обеспечивает файл пера, который Вы измените для пользовательского интерфейса области Settings.

  3. Войти Number2Color в текстовом поле Project Name и нажимают Finish.

  4. Откройтесь Number2ColorPlugin.h файл.

    Измените интерфейсный файл так, чтобы он имел два динамических свойства Objective-C и два свойства переменной экземпляра. Динамические свойства Objective-C —inputValue и outputColor— параметры ввода и вывода для портов ввода и вывода патча. Свойства переменной экземпляра —minValue и maxValue— внутренние параметры, которые будут доступны на области Settings в инспекторе для патча. Также необходимо добавить переменную для отслеживания цветовое пространство, как Вы сделали для пользовательского патча MIDI2Color.

    #import <Quartz/Quartz.h>
     
    @interface Number2ColorPlugIn : QCPlugIn
    {
       CGColorSpaceRef myColorSpace;
     
    }
    // Declare a property input port of type Number and with the key inputValue
    @property double inputValue;
    // Declare a property input port of type Color and with the key outputColor
    @property CGColorRef outputColor;
     
    // Declare internal settings as properties of type double
    @property double minValue;
    @property double maxValue;
    @end
  5. Сохраните и закройтесь Number2ColorPlugIn.h файл.

  6. Откройтесь Number2ColorPlugin.m файл.

  7. Сразу после @implementation оператор, добавляют следующие директивы. Кварцевый Композитор обработает их реализацию.

    @dynamic inputValue, outputColor;
    @synthesize minValue, maxValue;
  8. Добавьте описание для пользовательского патча путем изменения надлежащего #define оператор.

    #define    kQCPlugIn_Name @"Number2Color"
    #define    kQCPlugIn_Description  @"Converts a value to a color with transparency. You can define a range of values to use for the color mapping."
  9. Затем Вы запишете, что методы должны были реализовать Number2ColorPlugIn подкласс. attributes метод должен уже посмотреть следующим образом:

    + (NSDictionary*) attributes
    {
        return [NSDictionary dictionaryWithObjectsAndKeys:
                    kQCPlugIn_Name,QCPlugInAttributeNameKey,
                    kQCPlugIn_Description,QCPlugInAttributeDescriptionKey,
                    nil];
    }
  10. Измените attributesForPropertyPortWithKey: так, чтобы это возвратило словарь для каждого параметра ввода и вывода. Не включайте maxValue и minValue свойства здесь. Они требуют различной работы установки, потому что те - настройки патча, не входные параметры.

    Метод должен посмотреть следующим образом:

    + (NSDictionary*) attributesForPropertyPortWithKey:(NSString*)key
    {
        if([key isEqualToString:@"inputValue"])
            return [NSDictionary dictionaryWithObjectsAndKeys:
                @"Value", QCPortAttributeNameKey,
                [NSNumber numberWithUnsignedInteger:64],  QCPortAttributeDefaultValueKey,
                nil];
        if([key isEqualToString:@"outputColor"])
            return [NSDictionary dictionaryWithObjectsAndKeys:
                @"Color", QCPortAttributeNameKey,
                nil];
        return nil;
    }
  11. Удостоверьтесь executionMode возвраты метода kQCPlugInExecutionModeProcessor.

    + (QCPlugInExecutionMode) executionMode
    {
        return kQCPlugInExecutionModeProcessor;
    }
  12. Удостоверьтесь timeMode возвраты метода kQCPlugInTimeModeNone.

    Подобный MIDI2Color, плагин Number2Color выполняется только, когда изменяется входное значение; это не зависит вовремя.

    + (QCPlugInTimeMode) timeMode
    {
        return kQCPlugInTimeModeNone;
    }
  13. Затем Вы реализуете методы, требующиеся, когда Вы используете внутренние параметры. Сначала необходимо записать init метод для установки начальных значений minValue и maxValue параметры к значению по умолчанию.

     (id) init
    {
        self = [super init];
        if (self) {
            self.minValue = 0.0;
            self.maxValue = 127.0;
        }
     
        return self;
    }
  14. Запишите a dealloc метод. Если бы какой-либо из внутренних параметров является объектами, такими как цвет, Вы выпустили бы объект в этом методе (например, self.foo = nil;). Но потому что ни один из внутренних параметров не объекты, dealloc метод, предоставленный шаблоном, хорошо, как.

    - (void) dealloc
    {
        [super dealloc];
    }
  15. Реализуйте plugInKeys метод так, чтобы это возвратило ключи, представляющие внутренние параметры для плагина. Этот список используется для сериализации настроек автоматически. Это также используется QCPlugInViewController объект позволить редактировать значения для этих ключей в пользовательском интерфейсе. Удостоверьтесь, что Вы завершаете список с nil.

    + (NSArray*) plugInKeys
    {
        return [NSArray arrayWithObjects:@"minValue", @"maxValue", nil];
    }
  16. Обеспечьте a createViewController метод так, чтобы можно было предоставить поддержку в пользовательском интерфейсе для просмотра и установки внутренних параметров. viewNibName строка должна соответствовать имя файла пера.

    Этот метод, уже включен как часть шаблона. Это должно быть похожим на это:

    - (QCPlugInViewController*) createViewController
    {
        return [[QCPlugInViewController alloc]
                initWithPlugIn:self
                viewNibName:@"Number2ColorSettings"];
    }
  17. Измените startExecution: метод для создания объекта цветового пространства.

    Для этого примера можно использовать startExecution: метод, чтобы создать и инициализировать Кварцевое цветовое пространство. Цветовое пространство должно остаться тем же в течение жизни пользовательского экземпляра патча. Вы создадите цветовое пространство, когда патч начнет выполняться, для хранения его в переменной экземпляра Вы создали ранее, и затем освободите цветовое пространство, когда больше не выполняется пользовательский экземпляр патча.

    - (BOOL) startExecution:(id<QCPlugInContext>)context
    {
       myColorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
       return YES;
    }
  18. Измените stopExecution: метод для выпуска объекта цветового пространства.

    - (void) stopExecution:(id<QCPlugInContext>)context
    {
       CGColorSpaceRelease(myColorSpace);
    }
  19. Реализуйте метод выполнения. Подобный плагину MIDI2Color, это - то, где обработка имеет место. Вы заметите, что метод выполнения Number2Color подобен методу выполнения MIDI2Color за исключением того, что Number2Color использует минимальные и максимальные значения для отображения входного значения на указанный диапазон.

    - (BOOL) execute:(id<QCPlugInContext>)context
                atTime:(NSTimeInterval)time
                withArguments:(NSDictionary*)arguments
    {
        static float color[4];
     
        CGColorRef myColor;
        int pitch, octave;
        double convertedInputValue;
        float alpha;
     
        // Make sure there is a range of values
        if (self.maxValue == self.minValue)
            // If not, execution fails.
            return NO;
        // Use the internal settings to scale the input value
        convertedInputValue = (self.inputValue - self.minValue)/(self.maxValue - self.minValue) * 127.0);
        // The remaining code is the same as that used for MIDI2Color
        octave = floor(convertedInputValue/12);
        pitch = (int) (convertedInputValue - (octave * 12));
     
        switch (pitch) {
            case 0: color[0] = 1.0; color[1] = 0.0; color[2] = 0.0; break;
            case 1: color[0] = 1.0; color[1] = 0.5; color[2] = 0.0; break;
            case 2: color[0] = 1.0; color[1] = 0.75; color[2] = 0.0; break;
            case 3: color[0] = 1.0; color[1] = 1.0; color[2] = 0.0; break;
            case 4: color[0] = 0.5; color[1] = 1.0; color[2] = 0.0; break;
            case 5: color[0] = 0.0; color[1] = 1.0; color[2] = 0.0; break;
            case 6: color[0] = 0.0; color[1] = 0.5; color[2] = 0.5; break;
            case 7: color[0] = 0.0; color[1] = 0.0; color[2] = 1.0; break;
            case 8: color[0] = 0.25; color[1] = 0.0; color[2] = 0.75; break;
            case 9: color[0] = 0.3; color[1] = 0.0; color[2] = 0.5; break;
            case 10: color[0] = 0.4; color[1] = 0.0; color[2] = 0.75; break;
            case 11: color[0] = 0.5; color[1] = 0.0; color[2] = 1.0; break;
            default: color[0] = 0.5; color[1] = 0.5; color[2] = 0.5;
        }
        alpha = 1.0 - ((float)octave/11.0);
        color[3] = alpha;
        myColor = CGColorCreate(myColorSpace, color);
        self.outputColor = myColor;
        CGColorRelease(myColor);
        return YES;
    }
  20. Откройтесь Info.plist файл и удостоверяется, что следующий ключ является записью в словаре:

    <key>QCPlugInClasses</key>
    <array>
        <string>Number2ColorPlugIn</string>
    </array>

    Если Вы хотите, настраиваете идентификатор пакета, то сохраняете и закрываете файл.

  21. Затем Вы будете использовать Интерфейсного Разработчика для создания пользовательского интерфейса для области Settings.

  22. Дважды щелкнуть Number2ColorSettings.nib.

    Соедините интерфейсом с запусками Разработчика с целью окно.

  23. Перетащите текстовое поле (NSTextField) от Библиотеки до окна View.

  24. Перетащите Метку из Библиотеки, поместите ее рядом с текстовым полем и маркируйте ее Minimum value:.

  25. С выбранным текстовым полем откройте инспектора Привязки.

  26. Щелкните по треугольнику раскрытия, следующему за Значением, нажмите «Bind to» и выберите File's Owner.

  27. Войти plugIn.minValue в текстовом поле Model Key Path.

    Вспомните, что ключевой путь модели plugIn.XXX, где XXX соответствующий ключ для внутренней установки.

  28. Перетащите текстовое поле к представлению.

  29. Перетащите метку рядом с текстовым полем и маркируйте его Maximum value:.

    Пользовательский интерфейс должен теперь быть похожим на это:

    The settings view user interface in Interface Builder.
  30. С выбором текстового поля откройте инспектора Привязки.

  31. Свяжите текстовое поле с владельцем Файла и войдите plugIn.maxValue как ключевой путь модели.

  32. Перетащите управление от значка Owner Файла в окне документа Ниба к представлению. Тогда щелкните view в появляющемся настороженном дисплее.

  33. Сохраните файл и выйдите из Интерфейсного Разработчика.

  34. Под Целями выберите Build и Copy. Затем нажмите Build “Сборка и Копия” со всплывающего меню Действия.

    При создании использования этой опции XCode копирует успешно созданный плагин в ~/Library/Graphics/Quartz Composer Plug-Ins.

  35. Откройте Кварцевую разработку Композитора и ищите пользовательский патч Number2Color в Создателе Патча.

  36. Перетащите патч к редактору. Тогда откройте инспектора для области Settings. Область должна выглядеть подобной следующему.

    graphic
  37. Протестируйте состав со множеством диапазонов входных значений.

Упаковка двух пользовательских патчей в плагине

Несмотря на то, что для тестирования Вы могли бы хотеть разработать каждый пользовательский патч отдельно, можно объединить несколько патчей в один плагин, когда Вы готовы распределить патчи. Этот раздел показывает Вам, как упаковать MIDI2Color и пользовательские патчи Number2Color вместе. Сначала Вы добавите файлы для пользовательского патча MIDI2Color к проекту Number2Color. Тогда Вы измените файл списка свойств для включения MIDI2ColorPlugIn класс.

  1. Откройте проект Number2Color Xcode.

  2. Выберите Project> Add to Project.

  3. Перейдите к MIDI2ColorPlugin.h и файлам MIDI2ColorPlugin.m, выберите их и нажмите Add.

  4. В листе, появляющемся, нажмите Add.

    Удостоверьтесь, что выбрана цель Number2Color.

  5. Откройтесь Info.plist файл.

  6. Войдите MIDI2ColorPlugIn класс так, чтобы QCPlugInClasses запись похожа на это:

    <key>QCPlugInClasses</key>
    <array>
      <string>Number2ColorPlugIn</string>
      <string>MIDI2ColorPlugIn</string>
    </array>
  7. Сохраните проект.

  8. Под Целями выберите Build и Copy. Затем нажмите Build Build и Copy от всплывающего меню Действия.

После следования этим инструкциям имя плагина остается Number2Color. Вы могли бы хотеть переименовать его к MyColorGenerators или некоторому другому имени, указывающему, что плагин содержит больше чем один пользовательский патч. Если Вы хотите, можно добавить дополнительные пользовательские патчи к плагину.