qwertyMAN 1 722 Опубликовано: 7 февраля, 2017 (изменено) Что вы тут за велосипеды придумываете? Давно уже есть готовый алгоритм для поиска частот нот разных тональностей в стандартной библиотеке note. Неужели вы не знали? P.S. Прога простенькая. Но раз проги пишут редко в последнее время, то не стану осуждать вручение медали за такой код. P.P.S. Не понимаю, зачем для такой простенькой проги такие требования делать. Я даже для своей игры в змейку сделал такие требования, что в неё можно играть хоть на экранах первого уровня на самых слабых компах. А тут, всего лишь прога для который не нужна красивая графика, а требования сразу экран 3 уровня с видеокартой. Зачем? Я думаю хорошая программа должна быть гибкой и универсальной, подходить всем и нубам и папкам. А ты лишний раз для простой программы завышаешь требования. Изменено 7 февраля, 2017 пользователем qwertyMAN Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 148 Опубликовано: 7 февраля, 2017 Так?Не так. На пианино две клавиши Ля никак не могут находиться рядом. Или я не понял вопроса. Что вы тут за велосипеды придумываете? Давно уже есть готовый алгоритм для поиска частот нот разных тональностей в стандартной библиотеке note. Неужели вы не знали?Велосипед – понятие, зависящее от контекста. Нет смысла занимать оперативную память подключенной библиотекой, когда частота ноты вычисляется по формуле 440*math.pow(2,offset/12), где offset – смещение полутона относительно ноты Ля первой октавы, положительное – в сторону повышения и отрицательное – с сторону понижения тона Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Laine_prikol 48 Опубликовано: 7 февраля, 2017 Не так. На пианино две клавиши Ля никак не могут находиться рядом. Или я не понял вопроса.Он наверное даже в гугле не смог написать "Клавиатура пианино". Он говорил что типо ему лень... и всё такое... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
qwertyMAN 1 722 Опубликовано: 7 февраля, 2017 Не так. На пианино две клавиши Ля никак не могут находиться рядом. Или я не понял вопроса.Велосипед – понятие, зависящее от контекста. Нет смысла занимать оперативную память подключенной библиотекой, когда частота ноты вычисляется по формуле 440*math.pow(2,offset/12), где offset – смещение полутона относительно ноты Ля первой октавы, положительное – в сторону повышения и отрицательное – с сторону понижения тона Во первых, это конечно дело каждого, писать велосипед или нет, но оправдываться заниманием этой мизерной памяти на библиотеку как-то не камильфо. К тому же в библиотеки и другие полезные функции есть. Во вторых насчёт клавишь клавиатуры. Скорее всего их нет, потому что он тестирует прогу. Пока что он располагает кнопки вертикально. А на скрине где нота другой тональности, она смещена по горизонтали. И что тут плохого? Будет удобненькая таблица, как я понял по скринам. 7 в высоту и не знаю сколько в ширину. По этому поводу наезды необоснованы. Кнопки в отличии от клавиш можно располагать в любом порядке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
kotik_prikol Автор темы 4 Опубликовано: 8 февраля, 2017 (изменено) Не так. На пианино две клавиши Ля никак не могут находиться рядом. Или я не понял вопроса. Я нажимаю на кнопки он просто пердит код:http://pastebin.com/iCNA47Ww Чёрные кнопки не работают https://puu.sh/tTFz1/6d35bd8e1e.png Изменено 8 февраля, 2017 пользователем Alex 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 148 Опубликовано: 8 февраля, 2017 Я нажимаю на кнопки он просто пердит код:http://pastebin.com/iCNA47WwЭто от того, что выбранные тобой частоты лежат на три октавы ниже первой. Не всякая звуковая система способна адекватно передать столь низкие звуки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
qwertyMAN 1 722 Опубликовано: 8 февраля, 2017 Это от того, что выбранные тобой частоты лежат на три октавы ниже первой. Не всякая звуковая система способна адекватно передать столь низкие звуки. Ну как бы в OpenComputers ограничения по диапазону частот. Он и не должен их играть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 148 Опубликовано: 8 февраля, 2017 Ну как бы в OpenComputers ограничения по диапазону частот. Он и не должен их играть. Ограничения есть, но именно эти частоты воспроизводить должен: Supports frequencies from 20 to 2000Hz, with a duration of up to 5 seconds.Вопрос лишь в том, насколько адекватным будет воспроизведение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Laine_prikol 48 Опубликовано: 8 февраля, 2017 Во-во уже нормальный дизайн, хоть уже на клавиши пианино похожи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
kotik_prikol Автор темы 4 Опубликовано: 8 февраля, 2017 Это от того, что выбранные тобой частоты лежат на три октавы ниже первой. Не всякая звуковая система способна адекватно передать столь низкие звуки. Насяника всё сделали Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 148 Опубликовано: 8 февраля, 2017 Насяника всё сделалиА разве библиотека forms знает, как справиться с коллизиями перекрывающих друг друга кнопок? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy 2 187 Опубликовано: 8 февраля, 2017 (изменено) А разве библиотека forms знает, как справиться с коллизиями перекрывающих друг друга кнопок? Если не вызывалась функция redraw(), библиотека forms прорисовывает компоненты в той последовательности, в которой они были созданы. Т.е кнопки, которые были созданы позже будут находиться над кнопками, которые были созданы ранее. Изменено 8 февраля, 2017 пользователем Zer0Galaxy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 148 Опубликовано: 8 февраля, 2017 Если не вызывалась функция redraw(), библиотека forms прорисовывает компоненты в той последовательности, в которой они были созданы. Т.е кнопки, которые были созданы позже будут находиться над кнопками, которые были созданы ранее.С отображением понятно. А в какой последовательности запускаются обработчики кликов? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy 2 187 Опубликовано: 8 февраля, 2017 С отображением понятно. А в какой последовательности запускаются обработчики кликов? Обработчик клика проверяет принадлежит ли клик тому или иному компоненту, начиная проверку с более поздних компонентов. Если такой компонент найден, вызывается его обработчик onClick. Другие компоненты на предмет клика уже не проверяются. Т.е. если клик произведен в области перекрывания двух клавиш, клик отработает только для верхней клавиши. По крайней мере, так должно быть. 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
qwertyMAN 1 722 Опубликовано: 8 февраля, 2017 А разве библиотека forms знает, как справиться с коллизиями перекрывающих друг друга кнопок? А разве не её использует ECS? Там ведь много подобных случаев всплывающих окошек Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fingercomp 4 398 Опубликовано: 8 февраля, 2017 У них там своя либа со свистелками, к формочкам отношения не имеющая. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 148 Опубликовано: 8 февраля, 2017 Обработчик клика проверяет принадлежит ли клик тому или иному компоненту, начиная проверку с более поздних компонентов.Как же разумно твоя либа устроена! А я надеялся убедить @kotik_prikol отказаться от ее использования. Придется найти другие подходы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
qwertyMAN 1 722 Опубликовано: 8 февраля, 2017 Обработчик клика проверяет принадлежит ли клик тому или иному компоненту, начиная проверку с более поздних компонентов. Если такой компонент найден, вызывается его обработчик onClick. Другие компоненты на предмет клика уже не проверяются. Т.е. если клик произведен в области перекрывания двух клавиш, клик отработает только для верхней клавиши. По крайней мере, так должно быть. А я в своих прогах вручную из условий строил наиболее компактные схемы проверки нажатия. Вручную, Карл. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 148 Опубликовано: 9 февраля, 2017 Меня все-таки напрягает, что при каждом нажатии в цикле проверяются границы всех кнопок, учитывая, что на пианино их может быть много, а расположены они в строгом порядке. Поэтому я бы постарался избавиться от использования библиотеки. Тем более, пианино должно иметь более одной октавы, а код уже сейчас слишком громоздок. Так как картинка в целом периодическая, то для изображения клавиш отлично подходит вывод прямоугольников в цикле. Белые клавиши выводятся подряд, а для черных надо будет пропустить третью и седьмую клавишу из каждых семи. Это просто. С эффективным вычислением номера полутона из координат клика немного сложнее. При небольшой ширине клавиш удобно использовать два массива: для верхней и нижней половины клавиатуры, что позволит за одну операцию получить номер полутона в октаве. В нашем случае массивы содержат 56 значений, по протяженности изображения клавиш октавы на экране: TopKey_HT = { 1,1,1,1,1,2,2,2,2,2,3,3,3,4,4,4,4,4,5,5,5,5,5,nil,6,6,6,6,6,7,7,7,7,7,8,8,8,9,9,9,9,9,10,10,10,11,11,11,11,11,12,12,12,12,12} BottomKey_HT = { 1,1,1,1,1,nil,3,3,3,3,3,nil,5,5,5,5,5,nil,6,6,6,6,6,nil,8,8,8,8,8,nil,10,10,10,10,10,nil,12,12,12,12,12}При каждом клике на экране выбирается нужный массив, а из него сразу извлекается номер полутона. Хранить массивы для других октав не требуется, т. к. номера полутонов повторяются циклично. Для легкого изменения ширины клавиш следует отдать предпочтение автоматическому формированию массивов. Так как соседние значения в таблицах часто совпадают, то при большой ширине клавиш желательно использовать фиксированное количество значений, немного пожертвовав скоростью обработки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах