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