Конечно, эта программа требует некоторого дополнительного графического интерфейса, поэтому изначально я выбрал TkInter, поскольку включение Canvas казалось подходящим способом решить проблему рисования формы волны. Однако с этой опцией, похоже, есть некоторые проблемы:
- Когда уровень масштабирования достигает отдельных сэмплов (например, масштабирование до нескольких миллисекунд дорожки ), их отображение должно отличаться от отображения при сжатии нескольких секунд/минут — точно так же, как в Audacity. Другими словами, небольшое количество выборок должно быть составлено другим способом. Поэтому функция Canvas .zoom(...) не подходит.
- При масштабировании Если длинный аудиофайл (например, длительностью в час) составляет всего несколько миллисекунд, то абсолютно неэффективно визуализировать весь оставшийся фрагмент семпла. Поэтому я подумал о создании «статического» холста, который бы отображал только видимую часть звука. С помощью простой математики мне удалось это реализовать, и я мог прокручивать и масштабировать изображение по своему желанию. Проблема, однако, заключается в том, что по сути приходится перерисовывать холст каждый раз, когда я перемещаю полосу прокрутки или увеличиваю или уменьшаю масштаб. Судя по тому, что я читал, методы TkInter, такие как create_line(...), не являются «нарисовать и забыть» — вместо этого они каким-то образом «хранят» эти объекты, и при таком подходе они ужасно медленны и засоряют. память.
- Подход «перерисовки», кажется, трудно сочетать с взаимодействием «маркера», о котором я упоминал ранее.
Подробнее здесь: https://stackoverflow.com/questions/790 ... audio-file