Pergunta

Existe uma maneira para programaticamente invocar o teclado "clique" som? Meu aplicativo tem um teclado personalizado (construída a partir de UIButtons) e eu gostaria de fornecer algum feedback de áudio quando o usuário toca nas teclas. Eu tentei criar meus próprios sons no Garageband, mas não estava feliz com qualquer uma das minhas criações. Se não houver uma maneira padrão para invocar o clique chave, alguém pode me aponte para uma biblioteca de sons que pode ter como uma jóia?

Foi útil?

Solução

A maneira mais simples que eu encontrei é para extrair Tock.aiff (o som do teclado) do iPhone Simulator e empacotá-lo com o seu aplicativo, em seguida, jogá-lo usando AudioServicesPlaySystemSound() no momento apropriado. Na minha máquina, simplesmente digitando Tock.aiff em Spotlight vira para cima o arquivo, mas se você tem que ir olhando para ele, é na versão do simulador de UIKit.framework.

Outras dicas

Há uma solução muito rápida para reproduzir o som do teclado padrão:

  1. Adicionar AudioToolbox.framework
  2. Adicione a seguinte linha onde quer que você deseja que o som para jogar:

    AudioServicesPlaySystemSound(0x450);

A partir do iOS 4.2, adotar o protocolo UIInputViewAudioFeedback em uma subclasse personalizada de UIView. Faça este ponto de vista o seu "inputView" e, em seguida, chamar de "playInputClick" no momento apropriado.

http://developer.apple.com/library/ ios / # documentação / UIKit / reference / UIInputViewAudioFeedback_ProtocolReference / referência / reference.html

Apenas para poupar algum tempo as pessoas. Colocar isso em sua exibição personalizada:

- (BOOL) enableInputClicksWhenVisible {
    return YES;
}

Para fazer o clique fazer isso:

[[UIDevice currentDevice] playInputClick];

Não há necessidade de copiar o arquivo para o seu próprio app - você deve ser capaz de obtê-lo diretamente a partir do framework UIKit:

CFURLRef soundFileURLRef = CFBundleCopyResourceURL(
    CFBundleGetBundleWithIdentifier(CFSTR("com.apple.UIKit")),
    CFSTR ("Tock"),CFSTR ("aiff"),NULL);

Isto é o que eu fiz fora dele o comentário de asquared:

NSString *path = [[NSBundle bundleWithIdentifier:@"com.apple.UIKit"] pathForResource:@"Tock" ofType:@"aiff"];
SystemSoundID soundID;
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path], &soundID);
AudioServicesPlaySystemSound(soundID);
AudioServicesDisposeSystemSoundID(soundID);

Usando 0x450 como o SystemSoundID funciona para mim (e no volume correto - apenas jogar o built-in Tock.aiff era muito alto). Não faço ideia como portátil que é -. Isso é em um iPod Touch 3ª gen

Ainda não respeitar a preferência por carrapato on / off.

Aqui está o que eu fiz:

Localize 'Tock.aiff' em: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk/System/Library/Frameworks/UIKit.framework

arrastá-lo para seus recursos de pasta no Xcode, assinalando 'Copiar itens no grupo de destino é a pasta'

Import AVFoundation.framework nos quadros pasta na xCode

Import AVFoundation no topo da sua classe:

#import <AVFoundation/AVAudioPlayer.h>

Use a seguinte função:

- (void)PlayClick {
    NSURL* musicFile = [NSURL fileURLWithPath:[[NSBundle mainBundle] 
                                               pathForResource:@"Tock"
                                               ofType:@"aiff"]];
    AVAudioPlayer *click = [[AVAudioPlayer alloc] initWithContentsOfURL:musicFile error:nil];
    [click setVolume:0.15f];
    [click play];
}

É isso aí!

Do que eu posso dizer, o som do clique não está disponível para aplicativos. Eu não vi nada em serviços de sessão de áudio que é relevante. olhares AudioServicesPlaySystemSound() promissor, mas há não parece ser qualquer ID som sistema de som de clique (um olhar mais atento os cabeçalhos podem transformar-se algo). Você pode sempre laço sobre uma chamada para AudioServicesPlaySystemSound(i) e ver se joga nada. O software iPhone restaurar imagens provavelmente tem o som, mas provavelmente não está licenciado para uso geral. Jailbreaking um iPhone para chegar ao som de clique saborosa não precisa ser mencionado.

Para (creative commons) sons, consulte a Freesound Projeto .

Para o futuro, talvez solicitar que a Apple expor outros que o som de alerta para uso com AudioServicesPlaySystemSound() sons do sistema.

Talvez um pouco tarde ... Mas, em MrMage último post, se você fizer AudioServicesDisposeSystemSoundID(soundID); logo após AudioServicesPlaySystemSound(soundID); então você não vai ouvir uma coisa que você está descartando o direito de som do sistema depois de criá-lo.

Você tem que deixá-lo terminar de jogar primeiro .. Só chamada AudioServicesDisposeSystemSoundID para cancelar o som antes de terminar

Você não tem que descartar o objeto de som imediatamente. Manter um ponteiro para esse objeto de som em uma propriedade, e descartá-la somente quando você está prestes a jogar um outro som antes de re criando-lo.

E, claro, finalmente, dispor do objeto SystemSoundID em dealloc.

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