Программное обеспечение для Теории Классической музыки / Состав / Гармония и [закрытый] Контрапункт

То, что вы видите, это запрос типа. Если вы индексируете тип объекта, вы получите тип этого свойства. Например:

type Foo = { foo: number }['foo'] // is number

Если вы индексируете, используя объединение нескольких свойств, вы получаете объединение всех типов свойств:

type FooBar = { foo: number, bar: string, baz: boolean }['foo' | 'bar']  // string | number

Если вы индексируете, используя все ключи, вы получаете объединение всех типов свойств:

type FooBarBaz = { foo: number, bar: string, baz: boolean }['foo' | 'bar' | 'baz']  // string | number | boolean

Но чтобы получить объединение всех имен свойств, вы можете использовать keyof, поэтому приведенный выше тип также можно записать как:

type O =  { foo: number, bar: string, baz: boolean }
type FooBarBaz = O[keyof O]  // string | number | boolean

Тип { [K in keyof T]: K } соответствует типу объекта, где ключи типизируются как один и тот же литеральный тип, представляющий ключ:

type O =  { foo: number, bar: string, baz: boolean }
type FooBarBaz = { [K in keyof O]: K } // { foo: "foo"; bar: "bar"; baz: "baz"; }

Условный тип делает некоторые из этих ключей не одинаковыми. как литеральный тип, представляющий ключ, но вместо этого печатает их как never:

type O =  { foo: number, bar: string, baz: () => boolean } // baz is a function now
type NonFunctionPropertyNames = { [K in keyof O]: O[K] extends Function ? never: K } //  { foo: "foo"; bar: "bar"; baz: never; }

Таким образом, новый тип по-прежнему имеет все ключи оригинала, но некоторые типизированы как литеральный тип соответствующего ключ, а некоторые набраны как never. Нам нужно объединение со всеми типами значений ключей только что созданного нами типа, и мы можем использовать keyof O, как и раньше (поскольку тип имеет те же ключи, что и O):

type O =  { foo: number, bar: string, baz: () => boolean } // baz is a function now
type NonFunctionPropertyNames = { [K in keyof O]: O[K] extends Function ? never: K }[keyof O] // "foo" | "bar" | never = "foo" | "bar" ;

never всегда удаляется из объединений, поэтому в конце мы получаем объединение только тех объектных ключей, которые никогда не были.

Сделайте O параметром типа, и у вас будет многоразовый тип для получения нефункциональных клавиш:

type NonFunctionPropertyNames<O> = { [K in keyof O]: O[K] extends Function ? never : K }[keyof O]
type Foo =  { foo: number, bar: string, baz: () => boolean } // baz is a function now
type NonFUnctionKeysOfFoo = NonFunctionPropertyNames<Foo> // "foo" | "bar"
5
задан namin 11 November 2008 в 23:00
поделиться

6 ответов

Я - компоновщик нечтения, кто только что "придерживался его" так долго, что я хорошо разобрался с ним теперь. Я сочиняю с компьютером в значительной степени.

Вы могли получить простой секвенсер midi или действительно хороший как тот в Причине Propellorhead (большой инструмент создания), эксперимент самостоятельно, или загрузить бесплатно файлы midi Bach и других классических компоновщиков, затем Вы видите, где примечания находятся на клавиатуре в секвенсере midi. Плюс, можно переместить их для наблюдения то, что происходит.

Действительно хороший веб-сайт для приобретения знаний о речевом продвижении и изменениях хорды (прогрессии),

http://www.musicnovatory.com/

Это не очень интуитивный сайт для навигации. Но, много может быть изучено их для помощи с внесением хороших звучащих изменений через речевое продвижение и выбор хорды. Будьте терпеливы и быть очень любопытными, то есть, введите по абсолютному адресу вокруг много на сайте, и Вы найдете драгоценные камни.

После того как Вы имеете часть этого под Вашим поясом, получаете достойную книгу по контрапункту, и Вы будете лететь' перед знанием этого.

1
ответ дан 14 December 2019 в 13:50
поделиться

Вы могли бы хотеть проверить Навигатора Гармонии от Cognitone. Я, кажется, extactly, что Ваш ищет...

1
ответ дан 14 December 2019 в 13:50
поделиться

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

Я предлагаю, чтобы Вы купили книгу вместо этого. Хорошие включают

Я не прочитал английских книг по барокко, винеровскому или романтичному стилю.

0
ответ дан 14 December 2019 в 13:50
поделиться

Я думаю лучший способ узнать, что те вещи отчасти похожи на лучший способ программировать. На самом деле играя музыку и слушая его. Я не уверен, как программное обеспечение помогло бы с этим. Хороший выбор CD, возможно, некоторые с лекциями также были бы Вашим лучшим выбором.

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

0
ответ дан 14 December 2019 в 13:50
поделиться

Стиль холостяка 4 гармонии части на самом деле следуют некоторым довольно твердым правилам (никакие параллельные 4 тыс, 5-е или октавы, например), и после того как Вы получаете голову вокруг правил, это - довольно тривиальный вопрос для согласования мелодии в четырех частях. Это было способом, которым мне преподавали на A-уровне в Великобритании, и мы, как предполагалось, не отклонялись от тех правил - на самом деле, отклонение было в значительной степени мгновенной скидкой с цены.

Однако как gnud сказал, очень хороший материал прибывает из знания, которое постановляет, что можно повредиться где, и применение того знания разумно. Я предполагаю, что можно было записать некоторое программное обеспечение, которое могло взять мелодию и придумать что-то, что следует правилам, а также некоторым предопределенным способам повредить или изогнуть правила. Я не знаю ни о ком, все же.Прошу прощения.:)

3
ответ дан 14 December 2019 в 13:50
поделиться

Вы также можете проверить "CounterPointer" от Ars-Nova .

Это программа, которая обучит вас голосовым подсказкам и контрапункту в соответствии с правилами вокального стиля Баха.

1
ответ дан 14 December 2019 в 13:50
поделиться
Другие вопросы по тегам:

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