готовое приложение для iPhone: добавьте новую функцию. записать системный звук и затем иметь возможность воспроизведения - PullRequest
1 голос
/ 07 июня 2009

Я только что создал приложение для ударных. Пользователь нажимает на отдельные кнопки, которые запускают короткий звук для воспроизведения с помощью системного звука из AudioToolbox. Теперь я хотел бы добавить UIButton с надписью «запись» и после щелчка будет записывать все воспроизводимые системные звуки, а затем, когда пользователь нажимает кнопку «Стоп»; программа должна воспроизводить звук.

Как мне это сделать ?! Весь процесс программы, позволяющий записывать короткие звуки, которые пользователь запускает, нажимая на отдельные области попадания?!

Пожалуйста, дайте мне знать

Спасибо

Паван

1 Ответ

0 голосов
/ 03 июля 2009

Я не знаком с аудиооборудованием самого iPhone, но, поскольку он не предоставляет никаких процедур внутреннего синтеза, я не удивлюсь, если не удастся захватить исходящий звук для повторной обработки.

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

При ударе по барабанам вам нужно будет добавить массив NSMutableArray. Приведенный ниже пример основан на drumType (например, тег для нажатия кнопки ударных) и drumNextDelay, который представляет собой задержку (NSTimeInterval) до следующего удара ударных. Очевидно, есть больше способов справиться с этим, но это всего лишь пример.

Грубая версия воспроизведения может быть реализована путем многократного вызова executeSelector со следующим интервалом времени, что-то вроде следующего:

- (void) startPerformance {
self.drumIndex = -1;
[self performSelector:@selector(playDrumBeat) withObject:nil afterDelay:0];
}

- (void) playDrumBeat {
self.drumIndex++;
[self playDrum:[[drumBeats objectAtIndex:self.drumIndex] drumType]];
[self performSelector:@selector(playDrumBeat) withObject:nil afterDelay:[[drumBeats objectAtIndex:self.drumIndex] drumNextDelay]];
}

Это может привести к проблемам с синхронизацией с ОС, но я бы попробовал что-то подобное для первого среза и посмотрю, работает ли он.

Barney

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