Domanda iPhone: come rendere il suono dei clic chiave per la tastiera personalizzata?


C'è un modo per richiamare a livello di programmazione il suono "click" della tastiera? La mia app ha una tastiera personalizzata (costruita da UIButtons) e vorrei fornire un feedback audio quando l'utente tocca i tasti. Ho provato a creare i miei suoni in Garageband, ma non ero contento di nessuna delle mie creazioni. Se non c'è un modo standard per invocare il clic del tasto, qualcuno può indicarmi una libreria di suoni che potrebbe avere un tale gioiello?


19
2018-05-04 01:38


origine


risposte:


Il modo più semplice che ho trovato è quello di estrarre Tock.aiff (il suono della tastiera) da iPhone Simulator e comprimerlo con la tua app, quindi riprodurlo usando AudioServicesPlaySystemSound() al momento opportuno. Sulla mia macchina, semplicemente digitando Tock.aiff in Spotlight si trasforma il file, ma se devi andare a cercarlo, è nella versione simulatore di UIKit.framework.


8
2018-05-04 10:54



C'è una soluzione davvero veloce per suonare il suono della tastiera di default:

  1. Aggiungi AudioToolbox.framework
  2. Aggiungi la seguente riga dove vuoi che suoni il suono:

    AudioServicesPlaySystemSound(0x450);


29
2018-02-02 23:55



A partire da iOS 4.2, adottare il protocollo UIInputViewAudioFeedback su una sottoclasse personalizzata di UIView. Rendi questa vista il tuo "inputView" e quindi chiama "playInputClick" al momento opportuno.

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

Solo per salvare un po 'di tempo. Metti questo nella tua visualizzazione personalizzata:

- (BOOL) enableInputClicksWhenVisible {
    return YES;
}

Per fare il clic fai questo:

[[UIDevice currentDevice] playInputClick];

23
2018-01-24 22:42



Non c'è bisogno di copiare il file nella tua app - dovresti essere in grado di ottenerlo direttamente dal framework UIKit:

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

13
2017-08-01 18:41



Questo è ciò che ne ho ricavato dal commento di aSquared:

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

9
2017-09-20 15:34



Usando 0x450 come SystemSoundID funziona per me (e al volume corretto - solo suonare il Tock.aiff incorporato era troppo alto). Non ho idea di quanto sia portatile - questo è su un iPod Touch 3rd gen.

Ancora non rispetta la preferenza per tick on / off.


8
2017-10-08 09:16



Ecco cosa ho fatto:

Cerca "Tock.aiff" in: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk/System/Library/Frameworks/UIKit.framework

Trascinalo nella tua cartella Risorse in xCode, spuntando 'Copia gli elementi nella cartella del gruppo di destinazione'

Importa file .file AVFoundation nella cartella Frameworks in xCode

Importa AVFoundation nella parte superiore della tua classe:

#import <AVFoundation/AVAudioPlayer.h>

Utilizzare la seguente funzione:

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

Questo è tutto!


4
2018-05-23 15:10



Da quello che posso dire, il suono del clic non è disponibile per le app. Non ho visto nulla nei servizi di audio session che sia rilevante. AudioServicesPlaySystemSound() sembra promettente, ma non sembra che vi sia alcun ID audio di sistema per il suono del clic (uno sguardo più ravvicinato alle intestazioni potrebbe rivelarsi qualcosa). È sempre possibile eseguire il loop su una chiamata a AudioServicesPlaySystemSound(i) e vedere se qualcosa suona. Il software iPhone ripristina le immagini probabilmente ha il suono, ma probabilmente non è concesso in licenza per uso generale. Non è necessario menzionare il jailbreak di un iPhone per ottenere il gustoso suono del clic.

Per i suoni (creative commons), controlla il Progetto Freesound.

Per il futuro, forse chiedi a Apple di esporre suoni di sistema diversi dal suono di avviso per l'uso AudioServicesPlaySystemSound().


2
2018-05-04 11:37



Forse un po 'tardi ... Ma nell'ultimo post MrMage, se lo fai AudioServicesDisposeSystemSoundID(soundID); subito dopo AudioServicesPlaySystemSound(soundID); quindi non sentirai nulla mentre stai scartando il suono del sistema subito dopo averlo creato.

Devi lasciare che finisca di suonare per primo .. Chiama solo AudioServicesDisposeSystemSoundID per cancellare il suono prima che finisca


1
2018-03-22 01:07



Non è necessario disporre dell'oggetto sonoro immediatamente. Mantieni un puntatore su quell'oggetto sonoro in una proprietà e disponilo solo quando stai per riprodurre un altro suono prima di ricrearlo.

E, naturalmente, eliminare definitivamente l'oggetto SystemSoundID in dealloc.


1
2017-09-17 09:11