Не уверен, является ли это единственной опцией, но одной из опций является использование вспомогательной функции, у которой есть универсальный параметр, который будет захватывать фактический тип передаваемой функции, но который также будет обеспечивать возвращаемый тип (c: number)=> number
.
function fn<T extends (...a: any[]) => (c: number) => number>(o: T) {
return o;
}
const createSum5 = fn(() => c => c + 5)
const createMultiplyN = fn((n: number) => c => n * c);
const createWordsSum = fn((word: string) => c => word.length + c);
Я не верю, что существует другая опция, так как машинопись не допускает частичного вывода для переменных (или, более конкретно, ограниченного вывода), это можно сделать только с помощью функции.
Работа со звуком в Mac OS X требует взаимодействия с Core Audio. Для краткого обзора, взгляните на Обзор Core Audio .
Вам потребуется интерфейс с AUHAL для выполнения ввода и вывода; существует техническое примечание , в котором подробно описаны шаги, необходимые для этого. Кажется, что этот код обычно пишется на C ++, поскольку это процедура, взятая в демонстрации SimplePlayThru .
Это не охватывает фактических шагов, необходимых для захвата этого аудиовхода. Тем не мение, эти ссылки должны предоставить вам достаточно примеров кода, чтобы начать взаимодействие с вашим устройством ввода. Я опубликую больше ссылок в этом ответе, если столкнусь с ними.
Взгляните на / Developer / Example / CoreAudio / Services / AudioFileTools
. В частности, посмотрите afrecord.cpp
. По общему признанию, это не какао как таковое ; Само какао не имеет особых возможностей для записи. Если вы хотите взаимодействовать с файлом C ++ там, вам, вероятно, потребуется написать немного Objective C ++, как в SimplePlayThru.
На веб-сайте Улли Кустерерса
есть хороший пример кода.
Кокоадев также имеет статью по этой теме. Исходный код внизу страницы использует API-интерфейс QuickTimes Sequence Grabber. Я бы выбрал Core Audio.