готовое приложение для iPhone:добавьте новую функцию.запишите системный звук, а затем сможете воспроизводить

StackOverflow https://stackoverflow.com/questions/962252

Вопрос

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

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

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

Спасибо

Паван

Это было полезно?

Решение

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

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

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

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

- (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]];
}

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

Барни

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top