iPhone: как заставить щелчок клавиши звучать для пользовательской клавиатуры?

Поэтому я попытался создать набор данных и использовать dplyr для создания решения. Рекомендуется включать метод создания выборочного набора данных, поэтому, пожалуйста, сделайте это в будущих вопросах.

# load required library
library(dplyr)

# generate data set of all site, well, and month combinations
## define valid values
sites = letters[1:3]
wells = 1:5
months = month.name

## perform a series of merges 
full_sites_wells_months_set <- 
    merge(sites, wells) %>%
    dplyr::rename(sites = x, wells = y) %>% # this line and the prior could be replaced on your system with initial_tibble %>% dplyr::select(sites, wells) %>% unique() 
    merge(months) %>% 
    dplyr::rename(months = y) %>% 
    dplyr::arrange(sites, wells)

# create sample initial_tibble
## define fraction of records to simulate missing months
data_availability <- 0.8

initial_tibble <- 
    full_sites_wells_months_set %>% 
    dplyr::sample_frac(data_availability) %>% 
    dplyr::mutate(values = runif(nrow(full_sites_wells_months_set)*data_availability)) # generate random groundwater values

# generate final result by joining full expected set of sites, wells, and months to actual data, then group by sites and wells and perform lag subtraction
final_tibble <- 
    full_sites_wells_months_set %>% 
    dplyr::left_join(initial_tibble) %>% 
    dplyr::group_by(sites, wells) %>% 
    dplyr::mutate(trailing_difference_6_months = values - dplyr::lag(values, 6L))
19
задан Brad Gilbert 6 July 2009 в 16:55
поделиться

6 ответов

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

8
ответ дан 30 November 2019 в 01:46
поделиться

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

Для звуков (креативного достояния) ознакомьтесь с Freesound Project .

На будущее

2
ответ дан 30 November 2019 в 01:46
поделиться

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

CFURLRef soundFileURLRef = CFBundleCopyResourceURL(
    CFBundleGetBundleWithIdentifier(CFSTR("com.apple.UIKit")),
    CFSTR ("Tock"),CFSTR ("aiff"),NULL);
13
ответ дан 30 November 2019 в 01:46
поделиться

Это то, что я сделал из этого комментарий 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
ответ дан 30 November 2019 в 01:46
поделиться

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

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

8
ответ дан 30 November 2019 в 01:46
поделиться

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

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

1
ответ дан 30 November 2019 в 01:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: