Я работаю над музыкальным секвенсором для iPad, и код, который я использую для фактического воспроизведения звука, основан на этом примере . По сути, CoreAudio вызывает метод RenderTone
из этого примера каждый раз, когда ему нужноновые сэмплы для воспроизведения.
У меня есть модель ОО для моего проекта, и я хочу сделать что-то вроде: создать объект Song
, добавить Tracks
в песню.Каждый Track
имеет несколько Bars
(мер), которые состоят из нескольких Notes
.На основе текущего 'play' position
будут генерироваться правильные сэмплы для каждой ноты, которую необходимо воспроизвести в указанное время.
Все эти объекты будут основаны на пользовательском вводе в графическом интерфейсе приложения.Но значит ли это, что мне придется читать пользовательский интерфейс каждый раз, когда вызывается метод RenderTone
, и инициировать все мои объекты (начиная с Song, как я описал выше), чтобы я мог вычислять свои кадры?
Итак, что я хочу знать: как я могу сделать мой объект Song
доступным в любое время, чтобы я мог вызывать что-то вроде Song.getSamples(int numberOfSamples, int playPosition);
, когда вызывается метод RenderTone
?
Я надеюсь, что этоПонятно, это нелегко объяснить, поэтому если я что-то забыл упомянуть, дайте мне знать.