acabado aplicativo para iPhone: adicionar um novo recurso. som sistema de registro e, em seguida, ser capaz de reproduzir

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

Pergunta

i acabou de criar um aplicativo de tambor. As torneiras de usuários nos botões individuais que desencadeia um som curto para jogar usando o SystemSound de AudioToolbox. Agora eu gostaria de adicionar um UIButton que diz "record", e após o clique, irá gravar todos os SystemSounds sendo jogado, e depois, quando o uso pressiona o botão de parada; o programa deve então ser capaz de reproduzir o som.

Como faço para ir sobre como fazer isso ?! Todo o processo do programa ser capaz de gravar os sons curtos que o usuário gatilhos tocando nas áreas de vida individual?!

Por favor me avise

Graças

Pavan

Foi útil?

Solução

Eu não estou familiarizado com o hardware de áudio dentro do próprio iPhone, mas desde que não expõe nenhum rotinas synthesization internos Eu não ficaria surpreso se não for possível capturar o áudio de saída para reprocessamento.

Eu suspeito que você vai achar que é muito mais fácil, especialmente se você não estiver familiarizado com a programação hardware de áudio diretamente, em vez disso, gravar as ações de bateria e intervalos de tempo e reproduzir os arquivos de áudio da mesma maneira como originalmente jogado. Isto também tem a vantagem de que você pode editar, abrandar, acelerar, e outros truques, sem alterar o áudio diretamente.

Como os tambores são atingidos, você precisa anexar a um NSMutableArray. O exemplo que se segue baseia-se numa drumType (tag para o botão tambor ser atingido, por exemplo), e uma drumNextDelay que é o atraso (NSTimeInterval) para a próxima batida do tambor. Há, obviamente, mais maneiras de lidar com isso, mas é apenas um exemplo.

A versão rudimentar do playback poderia ser implementada chamando performSelector repetidamente com o seguinte intervalo de tempo, algo como o seguinte:

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

Isto pode ser propenso a problemas de tempo com o OS, mas eu buscar algo assim por um primeiro corte e ver se funciona.

Barney

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top