2012-03-15 1 views
0

Я работаю над музыкальным секвенсером для iPad, а код, который я использую для фактического воспроизведения звука, - based on this example. В основном CoreAudio вызывает метод RenderTone из этого примера каждый раз, когда ему это нужно новые образцы для воспроизведения.Сделать объекты доступными для использования в любое время для повышения производительности.

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

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

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

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

ответ

1

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^