Программа раскодировки на Python

Представляемая вниманию коллег разработка появилась на свет под воздействием свершений уважаемого Sinus’a и при его помощи и поддержке.
Очень захотелось поучаствовать в раскодировках, но воспользоваться наработками Sinus’a я не смог, так как мы используем в повседневной жизни разные платформы — Sinus выполняет все работы под управлением ОС Windows, у меня же все делается под Linux.
Пришлось «идти другим путем», как учил нас классик.
Другой путь получился, однако, уже не совсем другой, а как бы тот же, так как предыдущая разработка (дизассемблер Д3-28) мною уже была выполнена на языкке Python и под управлением ОС Линукс OpenSuSE. В общем, как в бородатом анекдоте: «Не выпендривайтесь, Иван Иванович, слушайте вашу любимую песню «Валенки». Так что, по примеру Ивана Ивановича — снова Python.
Код программы (чуть меньше180 строк) прокомментирован, можете забрать его в виде файла здесь.

Сразу оговорюсь: представленная программа предназначена для раскодировки ТОЛЬКО программ Д3-28, записанных на кассету командой SAVEX. Блочные записи (команда SaveRi) раскодируются другой программой, так как эти две команды используют совсем разный принцип записи/чтения. Подробности об этих различиях можно почерпнуть из «Справочника программиста Д3-28».
Как пользоваться раскодировщиком:
1. Обеспечьте себе наличие на компьютере установленного Python’a любым доступным способом. У меня он сам установился при инсталляции OpenSuSE по умолчанию.
2. Установите модули Питона wave, numpy, os, datetime. Способы тоже могут быть разные. Я делаю это в консоли от рута командой ‘pip install wave, numpy, os, datetime’.
3. Если хотите звуковую индикацию событий, установите звуковой модуль SOX. Можно и не устанавливать, тогда закомментируйте строки, в которых есть «play». Как получить звук в Windows — не знаю.
4. Положите в отдельный каталог программу-декодер и WAV-файлы, которые собираетесь раскодировать.
5. Для успешной раскодировки WAV-файлы желательно протестировать и подготовить, но об этом поговорим отдельно. Можно и не тестировать/готовить. Некоторые файлы и без этого хорошо раскодируются.
6. Запуск программы прост: в консоли из текущего каталога с программой и ВАВчиками дайте команду
python3 ./d3-28_wav_decoder.py
В консоли отобразится список WAV-файлов, имеющихся в текущем каталоге и запрос на ввод имени файла для раскодировки. Имя можно не вводить — достаточно выделить мышью это имя в списке и нажать среднюю кнопку мыши (колесико), имя файла само запишется куда надо. Далее ENTER и ожидание.
7. Окончание раскодировки сопровождается двойным звуковым сигналом и текстовой подсказкой в консоли.
8. Результат раскодировки будет находиться в текущем каталоге в двух файлах с исходным названием, но с расширением «txt» — здесь готовый код для имитатора Сергея Лыкова и расширением «decode» — здесь много отладочной информации.
Пояснения к интерпретации результатов раскодировки:
— смотрим в файл «decode». Если последний байт «0512» и в 5 колонке только плюсики, то значит раскодировка прошла успешно и без ошибок. Можно исполнить файл «txt» в имитаторе или дизассемблировать.
— если в 5 колонке есть знак вопроса, то в данном байте возможна ошибка. Что делать в этом случае — отдельный материал.
— WAV-файл для пробной раскодировки здесь (3.4MB, Бэйсик с контрольной суммой 157107).

Виталий