fertig iPhone App: eine neue Funktion hinzuzufügen. Aufzeichnungssystem Sound und dann in der Lage sein, um die Wiedergabe

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

Frage

ich habe gerade eine Trommel App erstellt. Der Benutzer tippt auf den einzelnen Tasten, die einen kurzen Ton löst mit dem Systemsound von AudioToolbox zu spielen. Ich möchte nun einen UIButton hinzufügen, die sagt „Record“, und auf klicken, wird aufzeichnen alle Systemsounds gespielt wird, und dann, wenn die Verwendung der Stopptaste drückt; sollte das Programm dann in der Lage sein, den Ton wiedergeben zu können.

Wie gehe ich über dieses tun ?! Der gesamte Prozess des Programms in der Lage, die kurz aufzeichnen klingt, dass der Benutzer auslöst, indem Sie auf den einzelnen betroffenen Gebiete gewinnen?!

Bitte lassen Sie mich wissen,

Danke

Pavan

War es hilfreich?

Lösung

Ich bin mit der Audio-Hardware im iPhone nicht vertraut mich, aber da es keine interne Synthetisierung Routinen nicht aussetzen nicht würde ich nicht überrascht, wenn es nicht möglich, das Outbound-Audio für die Wiederaufbereitung zu erfassen.

Ich vermute, Sie finden es viel einfacher, vor allem, wenn Sie mit der Programmierung Audio-Hardware nicht vertraut sind, direkt anstatt die Trommel Aktionen und Zeitintervalle aufzuzeichnen und die Audio-Dateien in der gleichen Art und Weise wiedergeben, wie sie ursprünglich gespielt. Dies würde auch den Vorteil, dass Sie bearbeiten können, verlangsamen, beschleunigen, und andere Tricks, ohne die Audiodaten direkt zu verändern.

Wie die Trommeln geschlagen werden, müssen Sie zu einem NSMutableArray anzuzuhängen. Die Probe wird unten auf der Grundlage eines vom Trommeltyp (TAG für die Trommel Taste beispielsweise getroffen wird) und einem drumNextDelay die die Verzögerung (NSTimeInterval) zur nächsten Trommel Hit ist. Es gibt natürlich mehr Möglichkeiten, dies zu handhaben, aber es ist nur ein Beispiel.

Eine grobe Version der Wiedergabe durch den Aufruf perform wiederholt mit dem nächsten Zeitintervall, in etwa wie folgt umgesetzt werden:

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

Dies kann zu einer Zeit Probleme mit dem Betriebssystem anfällig sein, aber ich würde so etwas wie dies für einen ersten Schnitt verfolgen und sehen, ob es funktioniert.

Barney

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top