app iPhone terminée: ajouter une nouvelle fonctionnalité. son système d'enregistrement et être en mesure de lire

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

Question

Je viens de créer une application de batterie. L'utilisateur tape sur les boutons individuels qui déclenche un son court à jouer en utilisant la SystemSound de AudioToolbox. Je voudrais maintenant ajouter un UIButton qui dit « record », et sur un clic, enregistrera tous les Systemsounds en cours de lecture, puis lorsque l'utilisation appuie sur le bouton d'arrêt; le programme devrait alors être en mesure de lire le son.

Comment puis-je aller faire à ce sujet ?! Le processus du programme étant en mesure d'enregistrer court des sons que l'utilisateur déclenche en appuyant sur les zones touchées individuelles?

S'il vous plaît laissez-moi savoir

Merci

Pavan

Était-ce utile?

La solution

Je ne suis pas familier avec le matériel audio dans l'iPhone lui-même, mais comme il ne met pas en routines internes synthétisation je ne serais pas surpris si ce ne est pas possible de capturer l'audio sortant pour le retraitement.

Je suppose que vous trouverez beaucoup plus facile, surtout si vous n'êtes pas familier avec le matériel audio de programmation directement, pour enregistrer au lieu des actions du tambour et des intervalles de temps et rejouer les fichiers audio de la même manière que l'origine joué. Cela aurait aussi l'avantage que vous pouvez modifier, ralentir, accélérer, et d'autres trucs sans altérer l'audio directement.

Comme les tambours sont frappés, vous aurez besoin d'ajouter à un NSMutableArray. L'exemple ci-dessous est basé sur une drumType (étiquette pour le bouton de tambour étant frappé par exemple), et un drumNextDelay qui est le retard (NSTimeInterval) au prochain coup de tambour. Il y a évidemment plus de moyens de manipulation, mais son juste un exemple.

Une version approximative de la lecture pourrait être mis en œuvre en appelant performSelector à plusieurs reprises avec l'intervalle de temps suivant, quelque chose comme ce qui suit:

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

Cela peut être sujette à des problèmes avec le timing OS, mais je voudrais poursuivre quelque chose comme ça pour une première coupe et voir si cela fonctionne.

Barney

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top