Допустимая задержка начала звукоизвлечения

Теория по электронике

Модератор: Модераторы

andriano
Пользователь
Сообщения: 49
Зарегистрирован: 09 авг 2020, 22:50
Местоположение: Сергиев Посад

Допустимая задержка начала звукоизвлечения

Сообщение andriano » 09 авг 2020, 23:09

Меня вот тоже давно интересует вопрос, насколько критична задержка в музыкальном инструменте. Собственно, "стандартным" способом генерации звука (по крайней мере, в ПК) является формирование его в циклическом буфере, воспроизводимом через DMAC. Соответственно, от размера буфера зависит, насколько будет сдвинут момент воспроизведения фрагмента буфера по сравнению с моментом его заполнения. Для ПК и особенно Windows это критично.
Но аналогичный вопрос возникает и при программировании MC/DSP. Т.к. там тоже один из способов - через буфер и DMAC. В одном из своих устройств решил проблему радикально - без буфера и DMAC сформированный звуковой отсчет сразу направляется на Analog Out. Но смущают накладные расходы на прерывание, вызываемое десятки тысяч раз в секунду, само аналоговое преобразование, а самое главное - в прерывании выполняются различные действия различной длительности, при этом необходимо, чтобы самая длинная цепочка не превышала интервала между вызовами прерывания. А в случае буфера эти требования существенно смягчаются за счет усреднения и избавления от накладных расходов.
Честно говоря, в литературе/Интернете не смог найти ответа на вопрос о допустимой величине задержки. Общее впечатление, что она лежит в пределах от единиц до (небольших) десятков мс.
Собственно, даже в одной из своих поделок (MIDI BOX) предусмотрел возможность регулировки задержки поступающего на вход потока MIDI, но пока не смог придумать, как грамотно поставить эксперимент.
Честно говоря, постановку такого эксперимента и хотелось бы обсудить, если его результаты вызывают интерес не только у меня.

Аватара пользователя
Dmitry Dubrovenko
Администратор
Сообщения: 2017
Зарегистрирован: 12 окт 2014, 20:20
Местоположение: Санкт-Ленинград
Контактная информация:

Re: Допустимая задержка начала звукоизвлечения

Сообщение Dmitry Dubrovenko » 10 авг 2020, 01:12

andriano писал(а):насколько критична задержка в музыкальном инструменте
Ну, вообще-то, в статье шла речь о задержке аппаратного THRU.
Про способности человеческого уха где-то говорили уже (там в Форж засовывали фрагмент, дублировали и сдвигали по времени, а затем воспроизводили).
Насколько помню, да, что-то около десятка миллисекунд.

andriano писал(а):постановку такого эксперимента и хотелось бы обсудить
Так а что должен разъяснить данный эксперимент?
Подпись

andriano
Пользователь
Сообщения: 49
Зарегистрирован: 09 авг 2020, 22:50
Местоположение: Сергиев Посад

Re: Допустимая задержка начала звукоизвлечения

Сообщение andriano » 10 авг 2020, 12:21

Меня, как человека, увлекающегося конструированием музыкальных инструментов, интересует вопрос: какова величина максимальной задержки начала воспроизведения звука относительно поступления сигнала на воспроизведение, обеспечивающая комфорт для музыканта?
В принципе, что 1 мс допустима, - ясно из самого существования протокола MIDI.
Что порядка 10 мс плюс-минус 3 раза, тоже в общем, понятно (т.е. искать следует в диапазоне от 3 до 30 мс).
Но при этом ответ "чем меньше, тем лучше" категорически не устраивает тем, что не дает никаких оценок для возможной длины звукового буфера.
С другой стороны, что происходит в случае акустического инструмента:
1. Мозг дает команду нажать на клавишу.
2. Сигнал распространяется по нейронам до соответствующих мышц.
3. Палец приходит в движение и начинает двигаться к нужной клавише.
4. Палец достигает клавиши, клавиша начинает двигаться.
5. Клавиша выбирает свободный ход.
6. Начинает двигаться молоточек клавиатуры.
7. Молоточек достигает струны и ударяет по ней.
8. Колебание распространяется вдоль струны, пока не достигнет деки.
9. Дека начинает звучать, создавая колебания воздуха.
10. Колебания воздуха достигают уха, возбуждая нервные окончания.
11. Сигнал распространяется по нейронам до мозга - мы слышим звук.
На всех одиннадцати этапах скорость распространения конечная и не слишком высокая (от десятков мм/с до сотен м/с), тем не менее, это не мешает группе музыкантов играть согласованно.
Другими словами, должен быть некоторый "порог предвидения" в пределах которого человек не будет ощущать естественной задержки между воздействием на орган управления (клавишу) и реакцией на него (звуком). Вот именно величину этого порога и хотелось бы знать.

В этом контексте как-то наложение сдвинутого по времени звука последующим воспроизведением не отвечает на поставленный вопрос. У меня в синтезаторе, например, на каждый тонгенератор предусмотрена индивидуальная огибающая, причем, время начала этой огибающей можно сдвигать, формируя таким образом сдвинутые по времени профили ADSR для разных тонгенераторов (точнее, сдвинутые относительно первого), но к ответу на вопрос это меня как-то не приблизило.
Специально сделал в MIDI-Box'е возможность задержки входной MIDI последовательности на регулируемую величину (от 1 до 300 мс), дал возможность жене поиграть и покрутить ручки - утверждает, что слышит 3 мс. Но что-то не очень верится, что так поставленный эксперимент имеет какой-то смысл.

Аватара пользователя
Dmitry Dubrovenko
Администратор
Сообщения: 2017
Зарегистрирован: 12 окт 2014, 20:20
Местоположение: Санкт-Ленинград
Контактная информация:

Re: Допустимая задержка начала звукоизвлечения

Сообщение Dmitry Dubrovenko » 10 авг 2020, 20:06

andriano писал(а):ответ "чем меньше, тем лучше" категорически не устраивает
Тем не менее, он самый правильный (ИМХО). :-)

andriano писал(а):наложение сдвинутого по времени звука последующим воспроизведением не отвечает на поставленный вопрос
Таки да, там вопрос был о различении (во слово-то какое придумал) двух звуков.
Насколько понимаю, Вас интересует вопрос "комфортного воспроизведения" музыкантом.
Это уже совсем отдельная тема.

ИМХО, задержки по нейронам нервной системы, на несколько порядков меньше (хотя я не специалист в этой области).
Наиболее значимая задержка здесь - удар молоточка.
Исходя из опыта разработки электроники миди-клавиатур, это как-раз и будет миллисекунды.
Отсюда и исходите.
Подпись

andriano
Пользователь
Сообщения: 49
Зарегистрирован: 09 авг 2020, 22:50
Местоположение: Сергиев Посад

Re: Допустимая задержка начала звукоизвлечения

Сообщение andriano » 10 авг 2020, 22:43

Ну пока я обеспечил менее 0.3 мс, но мне это не нравится - тесновато.
А по поводу постановки эксперимента при наличии устройства, которое может управляемо задерживать MIDI последовательность, идей нет?

Аватара пользователя
Dmitry Dubrovenko
Администратор
Сообщения: 2017
Зарегистрирован: 12 окт 2014, 20:20
Местоположение: Санкт-Ленинград
Контактная информация:

Re: Допустимая задержка начала звукоизвлечения

Сообщение Dmitry Dubrovenko » 11 авг 2020, 18:56

andriano писал(а):не нравится - тесновато
Так может что-то в консерватории алгоритмах подправить? :roll:

andriano писал(а):А по поводу постановки эксперимента
Если я правильно понимаю, Вы хотите задерживать Нотэ Он на различное время и следить за "комфортностью исполнения"?
1. Вам нужна миди-клавиатура заведомо без задержек (а понять это можно только имея исходник кода).
2. Результат будет сугубо субъективный.
3. Насколько понимаю, человеческая психика умеет адаптироваться.
Например, если взять мой горячо любимый драм-машин Алесис ЭйчЭр-16, то при воспроизведении и одновременной игре по пэдам, последние имеют весьма нехилую задержку по звукоизвлечению. Ничего, начинаешь интуитивно давить пэды чуток раньше.
4. Я пока так и не могу понять в чём проблема с проведением?
Подпись

andriano
Пользователь
Сообщения: 49
Зарегистрирован: 09 авг 2020, 22:50
Местоположение: Сергиев Посад

Re: Допустимая задержка начала звукоизвлечения

Сообщение andriano » 11 авг 2020, 23:13

Dmitry Dubrovenko писал(а):Так может что-то в консерватории алгоритмах подправить? :roll:

Нет, ну есть же объективные характеристики.
Например, вычисление волновой формы, микширование, фильтрация, масштабирование должны производиться на каждый отсчет, что не очень обременительно ввиду нересурсоемкости этих операций.
А вот пересчет коэффициентов фильтра занимает гораздо больше времени. Но и требуется далеко не 48000 раз в секунду.
По времени кроме обязательных операций я могу пересчитать только один фильтр за 1/48000 долю секунды. Вот и приходится их пересчитывать поочередно при расчете последовательных сэмплов. Вот и получается сложная схема, когда каждый из фильтров, ADSR, LFO, а также обработка NoteOn/NoteOff "разбрасываются" по разным сэмплам. Причем, делать это так, чтобы ни один из фрагментов обработки не превысил 20 мкс. А в случае применения буфера, скажем, на 16+16 отсчетов, требования гораздо мягче: за 330 мкс надо обработать 16 сэмплов и по одному разу каждый из фильтров, ADSR, LFO и NoteOn/NoteOff. Ну и накладные расходы на вызов прерывания снижаются.
4. Я пока так и не могу понять в чём проблема с проведением?

- в отсутствии понимания того, как следует трактовать результаты измерений,
- как следствие - отсутствие понимания, что должно являться результатами,
- как следствие - отсутствие понимания, как проводить измерения,
- как следствие - отсутствие понимания, как ставить и проводить эксперимент.
Другими словами, чтобы поставить эксперимент, нужно предварительно понять, как трактовать его результаты. Если действовать по принципу "Давайте что-нибудь померяем, а потом будем думать, что с этим делать", ничего разумного не получится.

Аватара пользователя
Dmitry Dubrovenko
Администратор
Сообщения: 2017
Зарегистрирован: 12 окт 2014, 20:20
Местоположение: Санкт-Ленинград
Контактная информация:

Re: Допустимая задержка начала звукоизвлечения

Сообщение Dmitry Dubrovenko » 12 авг 2020, 20:05

Если я правильно понимаю задачу, то:
andriano писал(а):как ставить и проводить эксперимент

Схема такая:
1. МИДИ-клавиатура.
Желательно знать задержку посылок, а ещё лучше собрать какую-нибудь простую не динамическую самому на нескольких кнопках (скажем восемь кнопок - октава).
Последнее позволит вывести синхро-сигнал замыкания клавиши.

2. Блок задержки миди-посылки.
Можно использовать как отдельный блок, так и совмещённый с клавиатурой, или синтезатором.
И его желательно изготовить самому, для понимания ПО

3. Синтезатор.
Лучше опять же какой-нибудь простецкий тон-генератор (типа такого) для избежания лишних задержек.
4. Звуковой усилитель.

andriano писал(а):как проводить измерения

Сажаем кого-нибудь, немного умеющего играть, и просим "понажимать клавиши", изменяя время задержки.
Параллельно можно измерять осциллографом/логическим анализатором задержку между началом посылки из клавиатуры и на входе синтезатора.

andriano писал(а):что должно являться результатами

Чисто субъективное мнение подопытного, при каком значении он перестаёт ощущать дискомфорт при игре.

andriano писал(а):как следует трактовать результаты измерений

Собрать статистику и получить среднее арифметическое.

Как-то так. :yes:
Подпись

andriano
Пользователь
Сообщения: 49
Зарегистрирован: 09 авг 2020, 22:50
Местоположение: Сергиев Посад

Re: Допустимая задержка начала звукоизвлечения

Сообщение andriano » 12 авг 2020, 23:05

Ну, с аппаратной частью как раз проблем нет:
1. Та самая на Roland K-25m. Сейчас там MIDI команды посылаются прямо из прерывания таймера сразу после замыкания второй группы контактов.
2. Об этом блоке я уже писал. Собственно, он совмещен с синтезатором на SAM2195, задержка которого в дэйташите не указана.
3. Помимо синтезатора на SAM2195 можно воспользоваться одноголосым синтезатором с задержкой менее 0.3 мс, который я тоже упоминал - там формирование звука происходит без буфера - из прерывания с частотой 48000 прямо на DAC.
4. Это тоже имеется. И, как ни странно, тоже с минимальной задержкой.
Ну и условие по поводу самостоятельного изготовления - тоже по всем пунктам удовлетворяется.

Дальше:
"Сажаем кого-нибудь". Это тоже уже пройдено: жена утверждает, что слышит задержку в 3 мс. Но как-то я этому не очень верю. Должно быть "слепое" прослушивание.

Ну и список оборудования я бы еще дополнил каким-нибудь секвенсором или ритм-машиной, с которой в такт и нужно играть (а не в своем произвольном темпе). Это тоже есть и опять собственного изготовления. То есть с оборудованием, вроде, проблем быть не должно.

А вот дальше начинаются методика проведения эксперимента и обработка данных. И как раз по этому поводу идей у меня пока нет.

Аватара пользователя
Dmitry Dubrovenko
Администратор
Сообщения: 2017
Зарегистрирован: 12 окт 2014, 20:20
Местоположение: Санкт-Ленинград
Контактная информация:

Re: Допустимая задержка начала звукоизвлечения

Сообщение Dmitry Dubrovenko » 13 авг 2020, 19:10

andriano писал(а):идей у меня пока нет
Так посадил играть, а сам потихоньку задержку меняешь.
Как подопытный "заверезжит", занёс показания в табличку.
И так для разных темпов игры (раз уж метроном использовать).
Ну и, наверное, попросить играть различные по экспрессивности произведения.
А потом, как уже говорил, вывести среднее арифметическое.

Оффтоп
andriano писал(а):ритм-машиной
Плиз, поподробнее (только в отдельной теме).
До драм-машинок я сам не свой. :roll:
Подпись

andriano
Пользователь
Сообщения: 49
Зарегистрирован: 09 авг 2020, 22:50
Местоположение: Сергиев Посад

Re: Допустимая задержка начала звукоизвлечения

Сообщение andriano » 14 авг 2020, 15:44

Dmitry Dubrovenko писал(а):Так посадил играть, а сам потихоньку...
Ну, от этих пожеланий до методики проведения эксперимента - дистанция огромного размера. И пройти ее я пока не нахожу в себе сил.
Оффтоп
Плиз, поподробнее (только в отдельной теме).
До драм-машинок я сам не свой. :roll:

Ох уж эти темы!
В отдельной - я не готов: разработка устройства не закончена.
Вообще то, над чем я сейчас работаю (с небольшим перерывом на изготовление MIDI клавиатуры), я сам называю секвенсором.
В настоящий момент он может воспроизводить (с SD карты) стандартные (0 и 1) MIDI файлы. При необходимости добавляя звук метронома, который начинает работать на 4 четверти раньше начала файла (при этом проблема синхронизации метронома с сильной долей, когда файл начинается с затакта, пока не решена). Т.к. SD карточка находится в глубине корпуса, и извлечение ее без разборки устройства невозможно, секвенсор также может принимать от компьютера MIDI файлы по протоколу FDS. Собственно, в основном за этим мне и понадобились SysEx сообщения. Ну а удалять файлы, так же, как и назначать их на определенные кнопки, можно из меню устройства.
В дальнейшем планируется добавить функции записи MIDI трека, в частности, в уже существующий MIDI файл, а также некоторые функции драм-машинки. Ну и выгрузку MIDI файлов обратно на ПК (пока передача файлов работает лишь в одну сторону).
Есть также идеи отказаться от стандартной файловой системы SD, а также переписать с нуля реализацию протокола SPI, который в stmduino сделан из рук вон плохо (возможно, для совместимости с AVR, а может - просто плохо без конкретных причин).
Но это все требует обдумывания-устаканивания, поэтому пока и занялся клавиатурой.

Аватара пользователя
Dmitry Dubrovenko
Администратор
Сообщения: 2017
Зарегистрирован: 12 окт 2014, 20:20
Местоположение: Санкт-Ленинград
Контактная информация:

Re: Допустимая задержка начала звукоизвлечения

Сообщение Dmitry Dubrovenko » 11 май 2021, 20:14

Вот, разработчики из Яблока считают, что допускается задержка до 15ms. :roll:
Подпись


Вернуться в «Теория»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость