Наука аккордов
Я пытался понять, как работают звуки и синусоиды, особенно с аккордами. Пока что мое понимание таково:
b(t) = sin(Api(t))
является базовой нотой аккорда на частоте А.T(t) = sin(5/4piA(t))
является основной третью базы b(t).D(t) = sin(3/2piA(t))
является доминирующей (пятой) базы b(t).A(t) = sin(2Api(t))
это октава.
Каждый из них - это отдельная частота, которая легко звучит для компьютерного генератора. Однако основной аккорд ноты с частотой А выглядит следующим образом:
Major Chord = b+T+D+A
Мне было интересно, есть ли у кого-нибудь способ заставить компьютерный синтезатор воспроизводить эту функцию, чтобы я мог услышать результат; большинство программ, которые я нашел, принимают только Гц в качестве входных данных, хотя эта функция имеет длину волны, она отличается от простой синусоидальной волны с той же длиной волны.
Примечание: опубликую это также в разделах физики и компьютеров - просто интересно, знаете ли вы, музыканты, что-нибудь об этом.
3 ответа
Мне немного неясно, что вы пытаетесь сделать, поэтому я объясняю несколько вещей и даю вам несколько вариантов для дальнейшего изучения, в зависимости от вашей цели.
Де-факто средство синтеза музыки на компьютерах использует MIDI (цифровой интерфейс музыкальных инструментов). Поскольку музыканты редко думают напрямую в терминах частот или длин волн (они считают шаги или полшага по шкале), MIDI представляет каждый шаг целым числом, которое представляет собой число полшага. По умолчанию MIDI предполагает, что эти высоты тона настроены с использованием стандарта, называемого 12-тональным равным темпераментом (12TET), и, к сожалению, не так легко заставить его использовать другие настройки.
Что это значит? И почему это проблема? (Я не уверен, сколько из этого вы уже знаете, поэтому я прошу прощения, если я повторяю то, что вы знаете)
Теоретически, то, что вы говорите о настройке на основе частотных соотношений, на 100% абсолютно правильно - это система под названием Just Tuning. Основная треть составляет 5/4, а идеальная пятая - 3/2. Однако инструменты с фиксированной высотой тона (клавишные, лабрадные инструменты и т. Д.) На практике редко настраиваются таким образом. Вместо этого они идут на компромисс, округляя каждую ноту в хроматической шкале до ближайшей двенадцатой октавы. Поскольку добавление октавы эквивалентно умножению начальной частоты на 2, добавление двенадцатой октавы является эквивалентом умножения начальной частоты на 2^(1/12). Так обычно настраиваются все полшага на пианино.
Таким образом, вместо чистых соотношений, вы бы на самом деле имели:
- грех (пи т)
- грех (2^(4/12) Пи т)
- грех (2^(7/12) Пи т)
- грех (2^(12/12) Пи т)
Примечание. Сравните 2^(4/12) ~ 1,26 с 5/4 = 1,25. Также сравните 2^(7/12) ~ 1.498, с 3/2 = 1.5.
Это именно те частоты, которые будет воспроизводить любой MIDI-синтезатор, учитывая ноты MIDI с номерами n, n+4, n+7 и n+12. Так что, если вы только хотите сыграть аккорд и не заботитесь о чистоте (просто) частотных соотношений, вы можете просто использовать MIDI.
Однако, если вы ищете что-то, что будет воспроизводить фактические отношения просто, это будет немного сложнее. Вы можете начать с рассмотрения некоторых вещей здесь: https://music.stackexchange.com/questions/351/software-that-allows-playing-in-different-temperaments
Если вы просто хотите посмотреть, как они звучат, вы можете посмотреть это видео на YouTube: https://www.youtube.com/watch?v=6NlI4No3s0M
Если вы можете писать программное обеспечение, вы можете попробовать написать свое, но я не хочу вдаваться в подробности, как это сделать, если это не поможет.
Я не уверен, какие программы вы описываете, что "принимает только Гц в качестве входных данных". Это программная библиотека (например, вызов API) или что-то другое? Существуют (очевидно) вызовы API, которые могут отправлять на звуковую карту более сложные данные, чем одночастотная волна.
РЕДАКТИРОВАТЬ: я не использовал его, но, похоже, это программное обеспечение может делать то, что вы хотите: https://www.youtube.com/watch?v=z0NZQMiDdNU
Я думаю, что вы решаете проблему с неправильного направления. Вы используете синусоидальные сигналы как основу своих "аккордов" и чистых интервалов.
Результат этого является строго периодическим, с периодом, который является наименьшим общим кратным отдельным периодам. Таким образом, в основном у вас есть не столько "аккорд", сколько "тон".
Органы используют эту технику: вы можете комбинировать 8-дюймовую трубу с 5-дюймовой трубой, чтобы получить тон, звучащий так, как будто он звучит из какой-то забавной 16-дюймовой трубы. Это не "аккорд", это регистрация. Классическая теория композиции не разрешите параллели квинты, чтобы избежать этого эффекта: квинты должны происходить только временно и чаще, чем не двигаться в другом направлении или не синхронно с базовой нотой.
"Аккорды" играют с слуховыми двусмысленностями между тонами и голосами: они возбуждают одну и ту же область в вашем внутреннем ухе. Однако настоящие "аккорды" и хоровые эффекты также имеют биения и помехи от неидеальных частотных соотношений, а тоны, из которых они сделаны, имеют свои собственные гармоники, что позволяет различать их как независимые объекты.
Опытный слушатель музыки воспринимает все это как самостоятельное явление. Однако, если вы начнете с чистых синоидов или сравнительно чистых источников с высокой частотой, таких как безболезненные органные трубы, это будет трудно сделать.
Так что я не уверен, что вы делаете себе одолжение, глядя на синоиды. Это все равно что пытаться понять картину, основанную на основных цветовых компонентах. Это скорее набор инструментов для воспроизведения, чем что-либо, связанное с восприятием более высокого уровня.
Очень низкий барьерный способ игры - использовать волновое пятно.
Код для выполнения того, что вы спрашиваете в своем вопросе:
var A = 440
export function dsp(t) {
var b = Math.sin(t * Math.PI * 2 * A);
var T = Math.sin(t * Math.PI * 2 * 5/4 * A);
var D = Math.sin(t * Math.PI * 2 * 3/2 * A);
var O = Math.sin(t * Math.PI * 2 * 2 * A);
return (b + T + D+ O) * 1/4
}
который находится по этой ссылке.
Обратите внимание, что это может звучать не так, как аккорд, поскольку синусоидальные волны не имеют гармоник. Вот тот же пример, но с использованием пилообразного сигнала, который имеет много гармоник.
var A = 440
//function f(x){return Math.sin(x) }
function f(x){return 2 * ( (x/(2*Math.PI) % 1) -.5) } //sawtooth
export function dsp(t) {
var b = f(t * Math.PI * 2 * A);
var T = f(t * Math.PI * 2 * 5/4 * A);
var D = f(t * Math.PI * 2 * 3/2 * A);
var O = f(t * Math.PI * 2 * 2 * A);
return (b + T + D+ O) * 1/4
}