Свисток для Д3-28 (программа для создания WAV-файлов в формате Д3-28)

Карманные вычислительные устройства и механические вычислители
Гость

Свисток для Д3-28

Сообщение Гость » 14.05.2018,02:59

программа для создания WAV-файлов в формате Д3-28

Всем привет!

Предлагаю всеобщему вниманию небольшую программку, которая (я надеюсь!) создаёт WAV-файлы в формате "Электроника Д3-28".

Программа работает из командной строки и принимает два аргумента:
- имя файла данных, который нужно положить на плёнку
- имя WAV-файла, который будет создан в результате работы программы

Далее полученный WAV-файл Вам нужно каким-то образом воспроизвести и записать на компакт-кассету -- а-ля МК-60.

Ну а ещё далее Вам нужно эту кассету засунуть в Ваш ЛПМ Вашего Д3-28 ...если, конечно, они у Вас есть! :)

Ну и, наконец, уж коли Вам вдруг это всё удалось проделать, то, полагаю, дальше Вы и сами догадаетесь, что делать.

* Disclaimer:
В силу того, что у меня пока нет возможности записать WAV-файл на живую кассету и проверить её с живой Д3-28, я не вполне уверен, что в живую это всё в итоге чётко считается.
Посему, суть, я был бы признателен, если кто-то, у кого есть мафон+шнурок+кассета+аппорат, проведёт этот опыт и поделится результатами... :help:
// возможно, при этом придётся пошаманить с настройками моей программы и посоздавать разные варианты WAV-файла в поисках рабочего варианта

В общем, программа умеет создавать WAV-файлы, их формат, вроде бы, правильный, и они, предположительно, должны читаться в Д3-28.

На данный момент поддерживаются файлы-образы сегмента памяти Д3-28.
Файлы в формате "Бейсика" сейчас НЕ поддерживаются.

Далее в отдельных комментариях я излагаю вопросы:
- установка программы
- формат входного файла, запуск программы и создание WAV-файла
- чего хотелось бы от коллег с Форума

Спасибо за внимание!
С уважухой, Саня.

Гость

Сообщение Гость » 14.05.2018,03:00

Установка программы.

Далее я исхожу из того, что Вы понимаете, что здесь написано.
// Если НЕ понимаете, но ОООчень хотите эту программу установить, то задавайте вопросы здесь -- очень постараюсь не послать. ;)

Программа написана на Питоне. Поэтому Вам, очевидно, сначала нужно установить себе Питон. Программа совместима с Python 2.7 и Python 3.4.
Ещё Вам понадобится менеджер пакетов Питона -- pip. На Линуксе его надо устанавливать отдельно. На Виндоузе он, вроде бы, емнип, приезжает сразу вместе с Питоном.

Для установки программы Вам, конечно же, нужен Интернет.

Открываем консольку и набираем:
- в Виндоузе:
pip install mk60
- в Линуксе:
sudo pip install mk60 --pre
Если всё норм, то на экран будет выдано что-нибудь вроде:
- в Виндоузе:
Collecting mk60
Downloading https://files.pythonhosted.org/packages ... 1a1.tar.gz
Installing collected packages: mk60
Running setup.py install for mk60
Successfully installed mk60-0.1a1
- в Линуксе:
Downloading/unpacking mk60
Downloading mk60-0.1a1.tar.gz
Running setup.py (path:/tmp/pip_build_root/mk60/setup.py) egg_info for package mk60
Installing collected packages: mk60
Running setup.py install for mk60
Installing mk60 script to /usr/local/bin
Successfully installed mk60
Ну, собсна, на этом процесс установки закончен!
А Вы что думали?! :)

В командной строке набираем:
mk60
Программа запустится и ругнётся, что ей не указали имена файлов для обработки:
specify input and output files in the command line
Если у Вас всё то же самое, то значит программа установилась успешно.

Гость

Сообщение Гость » 14.05.2018,03:01

Формат входного файла, запуск программы и создание WAV-файла.

Как уже было сказано выше, программа на данный момент поддерживает только файлы-образы сегмента памяти Д3-28.
Здесь в "Теме по Д3-28" было приведено достаточно таких файлов -- так что, есть с чем поэкспериментировать.

Формат файла:
- файл является текстовым файлом в ASCII-кодировке (ну или хотя бы без Unicode-тэгов, задающих endianness и пр.)
- каждая строка должна завершаться символом перевода строки -- CR+LF или LF (в зависимости от Вашей операционной системы). Последняя строка файла может не иметь символа перевода строки
- файл может иметь пустые строки -- они игнорируются
- файл может иметь строки-комментарии -- они тоже игнорируются. Строка-комментарий -- это такая, которая начинается с символа '#'
- строка с данными должна содержать ровно ОДИН байт данных и более ничего. Концевые комментарии в строках с данными не допускаются
- байт данных представляется в хитрой-прехитрой кодировке, принятой в Д3-28... я бы её назвал "decimal-coded hexadecimal" десятично-кодированная шестнадцатеричная система. Например, байт данных 0xEA должен быть представлен как 1410 -- здесь, "14" есть десятичное представление шестнадцатеричной цифры E, а "10" - десятичное представление шестнадцатеричной цифры "A"
- самый последний байт в файле должен быть кодом инструкции END, т.е. это должен быть код 0512

Пример файла (абстрактный пример!):
# my comment
0102
0304
1013
0512
В этом файле всего 4 байта: [ 12, 34, AD, 5C ]

Ну и чтобы этот файл сконвертировать в WAV, суть открываем консольку, переходим (для удобства) в каталог с нашим файликом и выполняем команду:
mk60 myfile.dat myfile.wav
// думаю, понятно, что myfile.dat -- это имя исходного файла с данными

Проверить полученный WAV-файл можно, в общем, любым плеером, способным открывать WAV-файлы.

Кстати, если вдруг у кого-то отыщется плеер (кроме VLC), который ругнётся на созданный файл или будет проигрывать "тишину", то очень прошу сообщить мне об этом.
Я лично проверял полученные файлы с плеерами ffplay, vlc, windows media player. Из них все проигрывают файл правильно, кроме VLC (он проигрывает тишину -- с этим я буду разбираться отдельно).

Гость

Сообщение Гость » 14.05.2018,03:01

Чего хотелось бы от коллег с Форума.

Ну, собсна:
1) попробовать записать полученный WAV-файл на кассету
2) попробовать считать такую кассету в Д3-28

Если кто может сделать хотя бы п.1, то это уже было бы здорово, т.к. можно будет оцифровать такую запись, и посмотреть, вообще "то" у нас получается на ленте, "что" мы ожидаем, или "не то".

Спасибо!

Sergei Frolov
Advanced Member
Сообщения: 2644
Зарегистрирован: 05.07.2003,15:30
Откуда: Питер
Контактная информация:

Конкурсы

Вклад в сообщество

Сообщение Sergei Frolov » 14.05.2018,13:06

А скомпилированного файла нет?
Собираю в коллекцию советские калькуляторы и компьютеры.
Мой сайт: http://www.leningrad.su/museum/  ICQ=12370106

Гость

Сообщение Гость » 14.05.2018,15:06

Sergei Frolov писал(а):А скомпилированного файла нет?
поверхностный ответ: питон - это скриптовый/интерпретируемый язык, программы распространяются в исходном коде

более детальный ответ:
- в принципе я мог бы сделать скомпилированный дистрибутив exe/bin с интегрированным питоном
- но такой вариант сильно ограничил бы кроссплатформенность -- линукс/виндоуз, 32/64 бит, версия libc
- поэтому я сделал дистрибутив с исходным кодом -- это более правильный путь для программ на питоне
- на самом деле, если бы я хотел скомпилированный вариант, то я бы написал на C++ или Java
- в данном случае питон был выбран по договорённости с создателями сайта d3-28.ru -- т.к. они уже используют питон для похожей задачи (ну, как я понял)
- если будут массовые мотивированные пожелания перейти на другой язык, то мне лично до без разницы -- могу переписать на другой

скачать питон можно здесь:
https://www.python.org/downloads/
// конкретно на виндоуз я проверял с версией 3.4.4, но, думаю, и с последней тоже должно работать

для линукс -- ну, если убунту/дебиан -- то надо установить пару пакетов:
- python или python2.7 или python3.4
- python-pip
// здесь я проверял с версией 2.7.5

если питон уже установлен, то узнать его версию можно, набрав в консольке
python --version

Sinus
Newbie
Сообщения: 62
Зарегистрирован: 07.08.2016,17:30
Откуда: СПб

Вклад в сообщество

Сообщение Sinus » 15.05.2018,17:54

xoiss, а можно хоть одним глазком взглянуть для примера на готовый wav? Может, и народу готовый wav пригодится. Например, вот был в теме про Д3-28 файлик "myfile.dat" с простенькой программкой для голой Д3-28, без периферии:
7-11-2017_tablo-XY-test__KP-637_N-36.txt

И даже ещё короче вот программка - просто счётчик, выводит с паузой числа 1, 2, 3, ... на Y-табло машинки: 0700 0604 0701 0600 0412 0615 1402 0004 0512 (набирать надо, конечно, столбиком).

(Очень хочется ошибаться, но сомнение гложет: станет ли кто из раз-два и обчёлся владельцев работающей машинки мало того, что экспериментировать с записыванием кассеты, так до того ещё питон ставить, программу ставить, и с myfile.dat разбираться... )

Гость

Сообщение Гость » 16.05.2018,02:00

День добрый!

7-11-2017_tablo-XY-test__KP-637_N-36.wav
https://yadi.sk/d/PoI3IKdw3Vxjzo

1-2-3.wav (ну, не придумал, как лучше его назвать)
https://yadi.sk/d/2d8Kyyqq3Vxk24

Наверное, можно попробовать их записать на кассету, а потом прочитать-оцифровать полученную запись и попробовать разобрать её в Вашей программе для Маткада.


Я сам пока не могу с кассетой весь цикл пройти.
Дома ни одной аудиокассеты нет (были, да, куда-то все делись, включая пару с Бейсиком для Д3-28 -- уже 2 года никак нигде не могу их отыскать... боюсь жена выбросила как мусор).
И со шнурком тоже разбираться надо. На ноутбуке jack с пиктограммой "наушники"... Может ли он работать как вход -- не знаю. Надо чем-нибудь проверить.
Магнитофон стерео есть, но у него нет линейного входа-выхода. Есть только под микрофон/наушники (а это "не совсем то"). Да и головку у него не покрутишь.

В общем, если Вы можете на Вашем комплекте опробовать, то было бы здорово.

И, кстати, попробуйте поставить Питон. На самом деле сложного ничего нет -- скачали/запустили и всё. Маткад - и то в 100 раз сложнее ставить.

Sinus
Newbie
Сообщения: 62
Зарегистрирован: 07.08.2016,17:30
Откуда: СПб

Вклад в сообщество

Сообщение Sinus » 16.05.2018,03:13

xoiss, спасибо. Попробую "цикл пройти", если мой старый м/ф "Романтик", ещё способен записывать, в чём я очень не уверен; и да, тоже ведь надо ещё запись с компа наладить, - возможно, не очень скоро выйдет, если выйдет. Завтра начну, сейчас ночь.

Графики сигналов Ваших я посмотрел. Интересно, как дело пойдёт с такими прямоугольниками (чисто вертикальные фронты! Может, лучше их подзавалить? Ладно, попробуем посмотреть, во что их превратит АЧХ магнитофона).

Гость

Сообщение Гость » 16.05.2018,06:24

Sinus писал(а):Интересно, как дело пойдёт с такими прямоугольниками (чисто вертикальные фронты! Может, лучше их подзавалить?
Там не просто ровные прямоугольники -- там ОДИН сэмпл на один такой "прямоугольник" -- потому он такой прямоугольный.
То есть в этом файле частота дискретизации не 44.1 кГц, например, а всего лишь 1 кГц.
Ну, для синтеза этого должно быть достаточно. Зато файл в 40 раз меньше.

Заваливать... ну, имхо, смысла нет -- только алгоритм усложнится, и файл вырастет на порядок.

Меня больше напрягают другие вещи:
- я использовал 8 бит на канал вместо 16. В принципе там и 1 бита хватило бы, но меньше 8 сделать нельзя. Однако, в зависимости от плеера, это может иметь побочные эффекты в виде непойми-откуда-берущихся шумов воспроизведения. Если использовать FloatPoint-кодирование, то такие шумы не наблюдаются. Для 16 бит -- не проверял. В общем, надо посмотреть, будут ли они возникать. Если будут, то перейдём на FloatPoint
- я использовал плавное введение/выведение уровня "ноль" -- собсна, процесс занимает +1 сек. в начале и +1 сек. в конце. Ну, это долго объяснять. В общем, может, будет лучше введение уровня делать единомоментным скачком (за N секунд до начала записи), а выведение и вовсе не делать. Если по второму варианту, то, конечно, при воспроизведении есть щелчки, которые нужно будет убрать мануально (т.е. кнопкой Пауза магнитофона), но второй вариант проще в реализации и у него шумов, вроде как, меньше. Короче, это тоже надо смотреть по факту

Вот.

---
А так, конечно, лучше бы как-то нарыть отдельный ЛПМ и прилепить к нему нативную схему усилителя записи/воспроизведения от Д3-28.
Я не говорю, что прям вот надо туда ещё и микроконтроллер засандалить -- это лишнее, -- но как бы хотя бы аналоговую часть сделать, как в оригинале.

Sinus
Newbie
Сообщения: 62
Зарегистрирован: 07.08.2016,17:30
Откуда: СПб

Вклад в сообщество

Сообщение Sinus » 17.05.2018,00:58

xoiss
Возможно на хорошей аппаратуре у кого-нибудь всё более-менее получится. Но у меня пока только самый первый блин не комом вышел: каким-то чудом первая попытка оказалась удачной (см. ниже отчёт). А все остальные копии, которые я сделал для набора статистики, получились с какими-то "непонятно что". Даже не могу никак толком объяснить эти артефакты; удивляюсь сам себе... Предполагаю пока, что АРУ (в магнитофоне и, может быть, в компюьтере) вызывает некие длительные пертурбации в тракте. Может быть и длительное нарастание (введение) "постоянного уровня" негативно повлияло. Во всяком случае, тот факт, что АРУ срабатывало, было слышно при записи. Надо придумать проверки и способы борьбы с АРУ, и ещё поэкспериментировать.

Здесь отчёт: test-1_16-05-2018.pdf

Поправка: на более чувствительном входе магнитофона резистивный делитель напряжения был не 30к/(82к+30к) (это меня склероз подвёл), а 30к/(13к+30к) - так нарисовано в схеме; параллельно к 30ком подключено управляемое сопротивление АРУ на полевиках. Качественно это количественное уточнение сути дела не меняет.

К сожалению, я только после этого мероприятия заметил, что у меня в компе была включена галка "Auto Gain Control" (все эффекты отключил, а про эту АРУ я в суете или забыл или нечаянно включил, вместо того чтобы выключить). Завтра-послезавтра повторю без этой галки, и напишу, влияет ли она и как.

Ответить