Pull to refresh
58
0
Alexander Kalinin @alec_kalinin

User

Send message
почему при написании «7» подразумевается не седьмая ступень гаммы, а пониженная на полтона (в случае мажорной шкалы)?

Для цифры 7 есть два разных аккорда: С7 и Cmaj7. Cmaj7 строится как (1-3-5-7), а С7 строится (1-3-5-7b). А понижаются/повышаются ступени потому, что есть два вида терций — большая и малая, и соответственно чередуя местами разные терции мы получаем разные виды аккордов.

И как понимать всякие 9, 11, 13?

А это как раз добавление новых ступеней гаммы. Т.е. гамму C мажор можно продолжить и дальше 7 ступени: C(1)-D(2)-E(3)-F(4)-G(5)-A(6)-B(7)-C(8)-D(9).

Аккорд C9 это аккорд C7+9 ступень, получаем (1-3-5-7b-9) или C-E-G-Bb-D.
Тут нужно понимать какой смысл несет обозначение аккорда.

Обозначение C7 означает не то, что мы добавляем 7 ступень, а обозначает малый мажорный (доминантсепт) аккорд, который строится по формуле 1-3-5-7b. Соответственно, если его строить от ноты C, до как раз и получим C-E-G-Bb.

А вот обозначение Сmaj7 где тоже есть 7 ступень как раз обозначает большой мажорный септаккорд, который строится по формуле 1-3-5-7, и если его строить от ноты С как раз и получим C-E-G-B.

Обозначение C5 означает, аккорд без терции. Вот так решили обозначить. Т.е. нужно понимать, что цифра в аккорде может быть в разных контекстах.
Аккорд это — сочетание нескольких звуков взятых вместе и обычно расположенных по терциям. Аккорды бывают: трезвучия — аккорд из трех звуков и септаккорды — аккорды из четырех звуков.

Так как аккорды расположены по терциям их удобно привязать к ступеням лада. Возьмем, например, C мажорный лад: C, D, E, F, G, A, B. Его ступени можно пронумеровать C(1), D(2), E(3), ..., B(7). Терция это интервал через один, т. е. аккорды можно привязать к ступеням лада и обозначать по цифрам 1-3-5-7.

Трезвучия. Терций бывает два вида: большая и малая. Соответственно для трезвучий мы получаем два базовых аккорда: мажорный, который можно обозначить как 1-3-5 (большая терция + малая терция) и минорный, который можно обозначить как 1-3b-5, т. е. (малая терция + большая терция, тут мы понизили 3 ступень и это понижение обозначили как 3b).

Септаккорды. Тут варианты следующие: 1-3-5-7 (большой мажорный ), 1-3-5-7b (малый мажорный доминантовый), 1-3b-5-7 (большой минорный), 1-3b-5-7b (малый минорный).

Это базовые варианты. А дальше существует большое количество вариантов, связанных с модификацией этих ступеней. Например, аккорд Cm7-5 означает, что мы берем малый минорный Cm7 и дополнительно понижаем еще 5 ступень, т. е. формула аккорда будет (1-3b-5b-7b).

Обозначение sus означает аккорды с задержанием, в которых терция заменяется либо на секунду (sus2), либо на кварту sus4. Например, аккорд С это стандартный 1-3-5, аккорд Csus2 это 1-2-5 (3 заменили на 2), аккорд Csus4 это аккорд 1-4-5 (3 заменили на 4).

Ну и, например, C7sus4 означает, что мы берем малый мажорный аккорд С7 (1-3-5-7b) и терцию заменяем на кварту, т.е. получаем формулу 1-4-5-7b.
Ну может быть. Хотя мне изложение в книге показалось очень четким и стройным, основанным всего на нескольких базовых принципах и действительно отталикивающимся от физической природы звука.

А можете привести какой-нибудь самый яркий пример «так сложилось» в музыке? Мне это нужно не «для поспорить ради», а для улучшения своего понимания теории музыки. Для меня сейчас картина теории музыки внутренне логична без каких-либо исторических натяжек.
В дополнение к списку источников я очень рекомендую книгу Олейникова Р. В.
Построение музыкальных систем
. Автор книги закончил кафедру прикладной математики МИФИ, поэтому все объяснения очень понятны для технарей.
Есть разные подходы: multiprocessing, cython + openmp, numba jit, theano и т.п.
Добавил уточнение в статью.
Я абсолютно согласен. Но если вы внимательно прочитали начало моей заметки, то я там объясняю, что хочу дать некоторое введение к очень неплохой статье «Магия тензоров». Там как раз все начинается с математики, и мне показалось, что предварительно дать некоторое интуитивное понимание будет неплохо.
Меня, как давнего любителя шахмат, соревнования людей с компьютерными движками перестали интересовать уже давно. У человека шансов выиграть у компьютера нет. Но удивительно, что соревнования людей с людьми и движков с движками превратились в два разных, но по своему интересных вида спорта.

Если раньше соревнования людей в шахматы носили характер поиска абсолютной истины, то с появлением движков этот мотив ушел. Многие считавшиеся ранее эталоном партий после анализа с компьютером были серьезно пересмотрены. Поэтому игра людей с людьми стала носить более спортивный характер с элементами случайности, в некотором смысле шахматы стали в чем-то более близки к киберспорту (что-то типа StarCraft). Посмотрите, например, партии в шахматы Б. Джобавы (хотя бы вот эту www.chessgames.com/perl/chessgame?gid=1708295). Этот отход от строгих канонов с целью удивить противника, вывести его на необычные позиции.

А вот движки, в свою очередь, могут находить удивительно красивые вещи. Например, неизбежный мат в 517 ходов [ timkr.home.xs4all.nl/chess2/diary_16.htm, позиция 316 ], пока самый длинный из известных матов. Человеку найти такое не под силу. И очень интересно смотреть соревнования движков, например вот эти [ tcec.chessdom.com/live.php ]. Тут нет случайностей, а есть поединок стратегий. Это отдельное удовольствие.

Так что я думаю, шахматы будут еще очень долго жить, но движки и люди это будут отдельные ветви шахмат.
Да и вообще, а какой есть выход? На C++ экспериментировать с математикой слишком долго и непроизводительно. На MATLAB мне очень не хвататет возможностей языка и окружения, слишком все завязано на базовую линейную алгебру, шаг в сторону слишком тяжелый. SciPy идеальный вариант, но есть GIL. Но все-таки всегда можно так построить архитектуру своего приложения, что выделить небольшой низкоуровненый кусок кода и оптимизировать его при помощи Cython. И это работающий вариант.
Да, согласен. Более-менее работающая идея преодоления GIL заключается в отказе от Python объектов и в переходе на уровень С. Да, при этом действительно нельзя использовать Python методы. Но я не согласен, что это такая уж сильная проблема. Вот ведь в чем дело.

Сами по себе NumPy и SciPy работают достаточно быстро и вполне параллельно, особенно в части линейной алгебры. Проблемы возникают тогда, когда нам приходится делать что-то нестандартное, написанное нами самостоятельно. И почти всегда в нашем самостоятельном коде можно выделить небольшую часть кода — узкое место, оптимизировав которое мы добьемся значительного прироста в производительности. Например, в моем коде это специальная процедура вычисления сингулярных интегралов.

Очень многие качественные Python пакеты работают именно по такому принципу. Хороший пример — это пакет конечноэлементных расчетов SfePy (http://sfepy.org/) на Python. Там лишь маленькая часть всего кода оптимизирована при помощи Cython, но и этого хватает для очень даже неплохой производительности.
Вы случайно не Python 3 используете? Насколько я знаю, в Python 3 были изменения в синтаксисе относительных импортов. Я пока еще использую Python 2.7.6. На Python 3 перейти пока не могу из-за библиотеки трехмерной визуализации Mayavi2, она пока сидит на Python 2.

Тестовые данные генерируются при запуске теста на c++. Ниже краткая инструкция по запуску тестов.

Окружение:
Windows 8.1 x64
Python 2.7.6
MinGW x64-4.8.1-posix-seh-rev5

Настройка рабочей среды:
1. Scientific Python. Скачать и установить Anaconda 2.1.0 для Windows x64 с сайта continuum.io/downloads.
2. MinGW compiler. Скачать MinGW x64-4.8.1-posix-seh-rev5 и установить с сайта sourceforge.net/projects/mingwbuilds/. При установке важно точно указать архитектуру x86_64 и posix threads.
3. Добавить путь к компилятору в переменные среды. Дать команду gcc -v и убедиться, что используется именно установленный компилятор.

Запуск на C++:
1. Скачать ветку open-nuance с github.com/alec-kalinin/open-nuance
2. Перейти в каталог src-cpp и в файле SConstruct в переменной CXX указать путь к установленному компилятору.
3. Дать команду scons для сборки тестов. Если пакет scons не установлен в системе, дать команду conda install scons.
4. Запустить benchmark-omp.exe. При этом выполнится тест на C++ и сгенерируются данные для python тестов.

Запуск тестов:
1. Перейти в каталог src-py и дать команду build.bat
2. Перейти в каталог test и дать команды python test_mp_python.py, python test_mp_python_ext.py.
Я сам очень сильно люблю C++. Но вот в чем дело. Надо разделять две задачи.

Первая задача — это промышленная реализация известного алгоритма в рамках системы с уже выработанным дизайном. И тут я бы тоже выбрал C++.

Вторая задача — это активный поиск нужного алгоритма, его прототипирование, анализ и доработка до рабочего состояния. И здесь системы научных расчетов типа MATLAB или Scientific Python просто незаменимы. Часто за день нужно по нескольким научных статьям попробовать алгоритмы, использующие совсем разную математику. И системы расчетов предоставляют тебе готовую интерактивную среду с очень удобными абстракциями, позволяющие мговенно визуализировать результаты.
Для cuda, кстати, я приглядываюсь к NumbaPro (http://docs.continuum.io/numbapro/), это расширенный вариант Numba. Синтаксис там такой же простой, одной лишь аннотацией задача комплируется под CUDA:

from numbapro import cuda

@cuda.jit('void(float32[:], float32[:], float32[:])')
def sum(a, b, result):
    i = cuda.grid(1)   # equals to threadIdx.x + blockIdx.x * blockDim.x
    result[i] = a[i] + b[i]

Но тестов пока не делал.
Спасибо за комментарии! Numexpr действительно еще один способ параллельных вычислений на Python. Насколько я помню, numexpr использует собственную виртуальную машину, написанную на C, и собственный JIT компилятор. Как-то получилось, что я numexp редко использую. Часто было, что сложные выражение он не смог распарсить. И часто часть кода, которую хотелось распараллелить, было проще выделять в крупные блоки. Но действительно, numexpr для простых выражений очень удобный способ.

По поводу cdist да, все верно. Но для поста я такую функцию выбрал для примера, чтобы было не слишком сложно, но вместе с тем и полезно.

Добавлю в PS к посту эти моменты. Спасибо!

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity