finito iPhone app: aggiungere una nuova funzionalità. suono sistema di registrazione e quindi in grado di riprodurre

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

Domanda

Ho appena creato un'applicazione tamburo. L'utente tocca i singoli pulsanti che innesca un breve suono di giocare utilizzando lo systemsound da AudioToolbox. Ora vorrei aggiungere un UIButton che dice "record", e su click, registrerà tutte le Systemsounds riprodotto, e quindi quando l'uso preme il pulsante di arresto; il programma dovrebbe quindi essere in grado di riprodurre il suono.

Come faccio a fare questo ?! L'intero processo del programma di essere in grado di registrare il breve segnale che l'utente attiva toccando le singole aree colpite?!

Per favore fatemi sapere

Grazie

Pavan

È stato utile?

Soluzione

Non ho dimestichezza con l'hardware audio entro l'iPhone in sé, ma dal momento che non espone alcuna routine synthesization interne non sarei sorpreso se la sua non è possibile catturare l'audio in uscita per il ritrattamento.

Ho il sospetto che si trova molto più facile, soprattutto se non hai familiarità con la programmazione hardware audio direttamente, invece di registrare le azioni del tamburo e gli intervalli di tempo e riprodurre i file audio nello stesso modo come originariamente interpretato. Ciò avrebbe anche il vantaggio che è possibile modificare, rallentare, accelerare, e altri trucchi senza alterare direttamente l'audio.

Mentre i tamburi sono colpiti, avresti bisogno di aggiungere a una NSMutableArray. L'esempio che segue si basa su un drumType (tag per il pulsante tamburo essere stato colpito per esempio), e un drumNextDelay che è il ritardo (NSTimeInterval) per il colpo successivo tamburo. Ci sono, ovviamente, più modi di gestione di questo, ma il suo solo un esempio.

Una versione ruvida della riproduzione potrebbe essere implementata chiamando performSelector ripetutamente con il successivo intervallo di tempo, qualcosa di simile al seguente:

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

Questo può essere soggetto a problemi di temporizzazione con il sistema operativo, ma mi piacerebbe portare avanti qualcosa di simile per un primo taglio e vedere se funziona.

Barney

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top