Идея написания этого приложения пришла после того как я перебрал множество приложения под линукс для зацикливания музыкальных кусочков. Мне нужно было что бы это приложение создавало петли на лету, то есть записал и тут же воспроизвел и чтобы петли были совершенно разной длины и их было много. Мне попался pylooper - этот не умеет писать звук, играет только готовые файлы. Потом мне попался superlooper , который может встраиваться в разные другие приложения подключаясь через jack. Но в нем я увидел кучу ограничений, например, циклы ограничиваются синхронизирующим циклом, нельзя переназначить кнопки, а если они пересекались с другими приложениями, то все начинало глючить. Размер цикла задается заранее. Да и настраивать его не так то просто. Короче, ни разу он нормально у меня не заработал, я не мог с ним играть и сходу делать композиции из петель. Самый главный косяк всех таких приложений, что там нельзя одной кнопкой и записывать и включать воспроизведение и начинать запись следующего цикла.
Потом я нашел
freewheeling - вот это было почти то что нужно.
И я даже сделал в нем несколько композиций.
Вот например:
http://www.realmusic.ru/songs/1087816
http://www.realmusic.ru/songs/470033
http://www.realmusic.ru/songs/545939
Очень удобная штука оказалась, тут все можно было перенастраивать и я собрал нужную конфигурацию. Я даже сделал ножную управлялку из старой клавиатуры, чтобы можно было играя на гитаре ногой включать запись петель. Но т.к. freewheeling имеет очень трудно читаемый конфиг, я так и не добился устойчивой работы. Приложение постоянно слетало или путало кнопки или выполняло сразу несколько действий. Так как я не понимал как оно работает, я решил реализовать что-то похожее, но полностью свое, на понятном мне python.
Я решил создать похожий на freewheeling интерфейс. За основу я взял библиотеку pygame, т.к. у нее хорошо реализована система событий пользователя (нажатие клавиш и работа с мышью). Для записи звука я использовал библиотеки pyaudio и wave.
И вот после вяло текущего написания появилась первая бета версия.
https://github.com/yaricp/pywheels
https://bitbucket.org/yaricp/pywheels/
Она имеет только самый необходимый функционал.
Она позволяет нажатием одной кнопки писать и воспроизводить петлю за петлей. Петли разбиты по секциям и можно записать разной количество петель в разных секциях, а потом переключать их с одной на другую тем самым меняя тему композиции.
В этом случае композиция получается более живой. А если еще вовремя мышкой подправить громкость разных петель, можно сменить акценты и опять же оживить композицию.
Если запись текущей петли получилась косячной, можно отменить ее. Можно на время выключить звук всех петель для эффектного соло и снова включить весь звук.
Да, забыл сказать все петли пишутся и воспроизводятся, синхронизируясь с синхронизационной петлей, которую нужно записать в первую очередь. Это типа как задать темп - как обычно в группе ногой "давайте вот в таком темпе - раз, два, три". То есть время между первым и вторым нажатием и будет временем синхронизации. Если Вы при записи не попали в щелчек синхронизатора (синхронизационно петли), то запись начнется со следующим щелчком, тоже самое если хотите закончить запись или попадайте в щелчек или играйте до следующего после нажатия щелчка.
Все петли начинают воспроизводиться вместе с щелчком синхронизатора, если петля длиннее синхронизатора, то она играется вся до конца и потом стартует заново.
Звук регулируется колесом мыши на играющей петле. Щелчком мыши можно остановить петлю, остановится она тут же, а заиграет вместе с синхронизатором.
Все размеры и цвета настраиваются в файле settings.py. Там же можно переназначить клавиши и указать путь для хранения записанных файлов.
Приложение пока не имеет автоматической подстройки уровня звука под самый громкий записываемый звук. Пока придется стабилизировать уровень звука до подачи на компьютер. Так же программа не работает с jack. Нужно еще хорошенько прикинуть нужно ли прикручивать ей такую возможность или обойтись стандартными средствами, которые предоставляют библиотеки pygame и pyaudio.
Приложение пока не умеет плавно убирать звук для завершения композиции. Нет пока возможности менять скорость воспроизведения петель и проигрывать петли задом наперед. Но опять же нужно ли?
Буду рад любым замечаниям и предложениям по усовершенствованию программы.
PyWheels распространяется под лицензией GPL 2.
Для того чтобы запустить программу нужно чтобы у вас был установлен Python2.7 и его библиотеки pygame, pyaudio и wave. Скопируйте все файлы из репозитория
https://github.com/yaricp/pywheels или
https://bitbucket.org/yaricp/pywheels/ и запустите файл main.py посмотрите как оно вам, если не нравится цвет, можете отредактировать файл settings.py
На линуксе все проверено и работает, на Windows еще не проверял.
Желаю всем успехов!