Я пробую код в этом примере и в основном я хочу ограничить количество воспроизводимых семплов.
Прямо сейчас, как только вы нажмете кнопку воспроизведения, приложение воспроизводит звук с установленной частотой, но оно не останавливается, пока вы не нажмете «Стоп». Я хотел бы проигрывать звук только секунду.
Есть идеи, как это сделать? Я уже пытался изменить inNumberFrames на 44100, но все, что делает, это делает мой тон нестабильным.
// Generate the samples
for (UInt32 frame = 0; frame < inNumberFrames; frame++)
{
buffer[frame] = sin(theta) * amplitude;
theta += theta_increment;
if (theta > 2.0 * M_PI)
{
theta -= 2.0 * M_PI;
}
}
EDIT
Курт Ревис говорит, что CoreAudio неоднократно вызывает вашу функцию RenderTone (). Я не думал об этом, но думаю, это имеет смысл. Это действительно приводит меня к другому вопросу: что произойдет, если я захочу отправить как 4-минутную песню в буфер? (44100 * 60 * 4 образца)
Если метод RenderTone будет вызываться неоднократно, я предполагаю, что он будет каждый раз начинать воспроизведение сэмплов с самого начала. Как я могу сыграть длинный набор сэмплов?