Сделайте объекты доступными для использования в любое время для лучшей производительности - PullRequest
0 голосов
/ 15 марта 2012

Я работаю над музыкальным секвенсором для iPad, и код, который я использую для фактического воспроизведения звука, основан на этом примере . По сути, CoreAudio вызывает метод RenderTone из этого примера каждый раз, когда ему нужноновые сэмплы для воспроизведения.

У меня есть модель ОО для моего проекта, и я хочу сделать что-то вроде: создать объект Song, добавить Tracks в песню.Каждый Track имеет несколько Bars (мер), которые состоят из нескольких Notes.На основе текущего 'play' position будут генерироваться правильные сэмплы для каждой ноты, которую необходимо воспроизвести в указанное время.

Все эти объекты будут основаны на пользовательском вводе в графическом интерфейсе приложения.Но значит ли это, что мне придется читать пользовательский интерфейс каждый раз, когда вызывается метод RenderTone, и инициировать все мои объекты (начиная с Song, как я описал выше), чтобы я мог вычислять свои кадры?

Итак, что я хочу знать: как я могу сделать мой объект Song доступным в любое время, чтобы я мог вызывать что-то вроде Song.getSamples(int numberOfSamples, int playPosition);, когда вызывается метод RenderTone?

Я надеюсь, что этоПонятно, это нелегко объяснить, поэтому если я что-то забыл упомянуть, дайте мне знать.

1 Ответ

1 голос
/ 15 марта 2012

Все эти объекты будут основаны на пользовательском вводе в графическом интерфейсе приложения.Но значит ли это, что мне придется читать пользовательский интерфейс каждый раз, когда вызывается метод RenderTone, и запускать все мои объекты (начиная с Song, как я описал выше), чтобы я мог вычислять свои кадры?1004 * Нет.Графический интерфейс должен обновить модель (Song), а метод RenderTone также должен ссылаться на Song.Модель должна храниться отдельно от классов View (GUI).Он может быть создан некоторым центральным объектом (например, контроллером приложения в начале программы) и передан в графический интерфейс и проигрывателю.Или вы можете использовать Singleton для хранения Song или всех Song объектов (например, Singleton SongManager, который может иметь свойство currentSong).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...