iPhone: ¿cómo hacer que suene un clic de tecla para un teclado personalizado?

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

  •  03-07-2019
  •  | 
  •  

Pregunta

¿Hay alguna forma de invocar mediante programación el teclado " haga clic en " ¿sonar? Mi aplicación tiene un teclado personalizado (construido a partir de UIButtons) y me gustaría proporcionar algunos comentarios de audio cuando el usuario toca las teclas. Intenté crear mis propios sonidos en Garageband, pero no estaba contento con ninguna de mis creaciones. Si no hay una forma estándar de invocar el clic de la tecla, ¿puede alguien dirigirme a una biblioteca de sonidos que pueda tener esa joya?

¿Fue útil?

Solución

La forma más sencilla que he encontrado es extraer Tock.aiff (el sonido del teclado) del iPhone Simulator y empaquetarlo con su aplicación, luego reproducirlo usando AudioServicesPlaySystemSound () en el momento adecuado . En mi máquina, simplemente escribiendo Tock.aiff en Spotlight se activa el archivo, pero si tiene que buscarlo, está en la versión de simulador de UIKit.framework.

Otros consejos

Hay una solución realmente rápida para reproducir el sonido de teclado predeterminado:

  1. Agregar AudioToolbox.framework
  2. Agrega la siguiente línea donde quieras que se reproduzca el sonido:

    AudioServicesPlaySystemSound(0x450);

A partir de iOS 4.2, adopte el protocolo UIInputViewAudioFeedback en una subclase personalizada de UIView. Haz que esta vista sea " inputView " y luego llame a " playInputClick " en el momento adecuado.

http://developer.apple.com/library/ ios / # documentation / uikit / reference / UIInputViewAudioFeedback_ProtocolReference / Reference / Reference.html

Sólo para ahorrar tiempo a algunas personas. Ponga esto en su vista personalizada:

- (BOOL) enableInputClicksWhenVisible {
    return YES;
}

Para hacer el clic haga esto:

[[UIDevice currentDevice] playInputClick];

No es necesario que copie el archivo en su propia aplicación; debería poder obtenerlo directamente desde el marco de UIKit:

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

Esto es lo que hice de él con un comentario de Cuadrado:

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

Usar 0x450 como SystemSoundID funciona para mí (y al volumen correcto, simplemente tocando el Tock.aiff incorporado era demasiado alto). No tengo idea de lo portátil que es, esto es en un iPod Touch de tercera generación.

Todavía no respeta la preferencia por la activación / desactivación de la marca.

Esto es lo que hice:

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

Arrástrelo a su carpeta de Recursos en xCode, marcando 'Copiar elementos en la carpeta del grupo de destino'

Importe AVFoundation.framework en la carpeta de Frameworks en xCode

Importe AVFoundation en la parte superior de su clase:

#import <AVFoundation/AVAudioPlayer.h>

Usa la siguiente función:

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

Eso es todo!

Por lo que puedo decir, el sonido de clic no está disponible para las aplicaciones. No he visto nada relevante en los servicios de sesión de audio. AudioServicesPlaySystemSound () parece prometedor, pero no parece haber ningún ID de sonido del sistema para el sonido de clic (un vistazo más de cerca a los encabezados puede mostrar algo). Siempre puede pasar una llamada a AudioServicesPlaySystemSound (i) y ver si se reproduce algo. Las imágenes de restauración del software del iPhone probablemente tengan el sonido, pero probablemente no tengan licencia para uso general. Hacer jailbreak a un iPhone para obtener el sabroso sonido de clic no necesita ser mencionado.

Para los sonidos (de Creative Commons), consulte el Proyecto Freesound .

Para el futuro, tal vez solicite que Apple exponga los sonidos del sistema que no sean el sonido de alerta para usar con AudioServicesPlaySystemSound () .

Tal vez un poco tarde ... Pero en la última publicación de MrMage, si haces AudioServicesDisposeSystemSoundID (soundID); justo después de AudioServicesPlaySystemSound (soundID); entonces no escuchará nada ya que está descartando el sonido del sistema justo después de crearlo.

Debe dejar que termine de reproducirse primero. Solo llame a AudioServicesDisposeSystemSoundID para cancelar el sonido antes de que termine

No tienes que desechar el objeto de sonido de inmediato. Mantenga un puntero a ese objeto de sonido en una propiedad y deséchelo solo cuando esté a punto de reproducir otro sonido antes de volver a crearlo.

Y, por supuesto, finalmente elimine el objeto SystemSoundID en dealloc.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top