айфон:как сделать звук нажатия клавиш на пользовательской клавиатуре?

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

  •  03-07-2019
  •  | 
  •  

Вопрос

Есть ли способ программно вызвать звук щелчка клавиатуры?В моем приложении есть специальная клавиатура (построенная на основе UIButtons), и я хотел бы обеспечить звуковую обратную связь, когда пользователь нажимает на клавиши.Я пробовал создавать свои собственные звуки в Garageband, но ни одно из моих творений мне не понравилось.Если не существует стандартного способа вызвать нажатие клавиши, может ли кто-нибудь указать мне на библиотеку звуков, в которой может быть такой драгоценный камень?

Это было полезно?

Решение

Самый простой способ, который я нашел, - это извлечь Tock.aiff (звук клавиатуры) из симулятора iPhone и упаковать его в свое приложение, а затем воспроизвести его с помощью AudioServicesPlaySystemSound () в соответствующее время , На моей машине простой ввод Tock.aiff в Spotlight приводит к включению файла, но если вам нужно его искать, он находится в симуляционной версии UIKit.framework.

Другие советы

Существует очень быстрое решение для воспроизведения звука клавиатуры по умолчанию:

  1. Добавить AudioToolbox.framework
  2. Добавьте следующую строку туда, где вы хотите, чтобы звук воспроизводился:

    AudioServicesPlaySystemSound(0x450);

Начиная с iOS 4.2, используйте протокол UIInputViewAudioFeedback в пользовательском подклассе UIView. Сделайте этот просмотр вашим " inputView " и затем вызовите «playInputClick» в соответствующее время.

http://developer.apple.com/library/ ИОС / # документация / UIKit / ссылка / UIInputViewAudioFeedback_ProtocolReference / справка / reference.html

Просто чтобы сэкономить время. Поместите это в свой пользовательский вид:

- (BOOL) enableInputClicksWhenVisible {
    return YES;
}

Чтобы сделать клик, сделайте это:

[[UIDevice currentDevice] playInputClick];

Нет необходимости копировать файл в ваше собственное приложение - вы сможете получить его непосредственно из инфраструктуры UIKit:

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

Вот что я сделал из комментария aSquared:

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

Использование 0x450 в качестве SystemSoundID работает для меня (и на правильной громкости - просто играть на встроенном Tock.aiff было слишком громко). Понятия не имею, насколько это портативно - это на iPod Touch 3-го поколения.

Тем не менее не учитывает предпочтения включения / выключения галочки.

Вот что я сделал:

Найдите «Tock.aiff» в: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk/System/Library/Frameworks/UIKit.framework

Перетащите его в папку «Ресурсы» в xCode, отметив «Копировать элементы в папку целевой группы»

Импортируйте AVFoundation.framework в папку Frameworks в xCode

Импортируйте AV-основание наверху вашего класса:

#import <AVFoundation/AVAudioPlayer.h>

Используйте следующую функцию:

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

Вот и все!

Насколько я могу судить, звук щелчка недоступен для приложений. Я не видел ничего в аудиосессионных сервисах, что бы относилось AudioServicesPlaySystemSound () выглядит многообещающе, но, похоже, не существует идентификатора системного звука для звука щелчка (более внимательный взгляд на заголовки может что-то вызвать). Вы всегда можете зациклить вызов AudioServicesPlaySystemSound (i) и посмотреть, что-нибудь играет. Изображения восстановления программного обеспечения iPhone, вероятно, имеют звук, но, вероятно, не лицензированы для общего использования. Не нужно упоминать джейлбрейк iPhone, чтобы получить приятный звук щелчка.

Что касается звуков (Creative Commons), ознакомьтесь с Freesound Project .

В будущем, возможно, попросите Apple предоставить системные звуки, отличные от звука оповещения, для использования с AudioServicesPlaySystemSound () .

Может быть немного поздно ... Но в последнем посте MrMage, если вы делаете AudioServicesDisposeSystemSoundID (soundID); сразу после AudioServicesPlaySystemSound (soundID); тогда вы не услышите ничего, поскольку отбрасываете системный звук сразу после его создания.

Вы должны дать ему сначала закончить воспроизведение. Вызовите только AudioServicesDisposeSystemSoundID, чтобы отменить звук до его завершения

Вам не нужно сразу избавляться от звукового объекта. Держите указатель на этот звуковой объект в свойстве и утилизируйте его только тогда, когда вы собираетесь воспроизвести другой звук, прежде чем создавать его заново.

И, наконец, наконец, избавьтесь от объекта SystemSoundID в dealloc.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top