Внимание! Это временный неофициальный архив старой версии форума Полигон Призраков, созданный сочувствующим форуму участником. Этот сайт просуществует лишь до тех пор, пока администрация Полигона не сдержит своё обещание и не откроет официальный архив по адресу old.sannata.org.

Полигон-2

Форум о старых компьютерах

Объявление форума

Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС.

Полигон-2 »   Калькуляторы, арифмометры, PDA, HPC »   Свисток для Д3-28
RSS

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

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

<<Назад  Вперед>> Страницы: 1 * 2 3
Печать
 
xoiss
Advanced Member


Всего сообщений: 711
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 окт. 2013
Sergei Frolov написал:
[q]
А скомпилированного файла нет?
[/q]
поверхностный ответ: питон - это скриптовый/интерпретируемый язык, программы распространяются в исходном коде

более детальный ответ:
- в принципе я мог бы сделать скомпилированный дистрибутив 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

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


Откуда: СПб
Всего сообщений: 30
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
7 авг. 2016
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 разбираться... )
xoiss
Advanced Member


Всего сообщений: 711
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 окт. 2013
День добрый!

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


Откуда: СПб
Всего сообщений: 30
Рейтинг пользователя: 0


Ссылка


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

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


Всего сообщений: 711
Рейтинг пользователя: 0


Ссылка


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

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

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

Вот.

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


Откуда: СПб
Всего сообщений: 30
Рейтинг пользователя: 0


Ссылка


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

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

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

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


Всего сообщений: 711
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 окт. 2013
... мда, как говорицца, непрокатило

боюсь, "цифрой" это никак не улучшить... особенно на участках, где в канале длительное время нет активности

"Романтик" у Вас какой? М-201С? М-309С? М-311? ...
уточните, пожалуйста, модель — я хотел бы глянуть схему его канала записи
// ну, или если есть сразу в готовом виде скан его принципиалки — то пришлите, пожалуйста
Sinus
Newbie


Откуда: СПб
Всего сообщений: 30
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
7 авг. 2016
xoiss
Почему плохо записался маткадный сигнал "проба" с пологими фронтами, я пока ещё не понял. (Буду выяснять, опыты с пологими фронтами собираюсь продолжить.) Но уже убедился, что "прямоугольный" сигнал с частотой дискретизации 1000 Гц не годится: известная в ЦОС теорема Котельникова и практика ЦОС против таких сигналов резко протестуют; вот подтверждающие опыты:

test-2_17-05-2018.pdf

Это опыты без магнитофона, только с компом. Если у Вас будет желание и время, то попробуйте, пожалуйста, проделать их тоже: интересно посмотреть, как сильно зависит результат от звукового чипа в компьютере (или от звуковой карты, если она есть).



xoiss написал:
[q]
"Романтик" у Вас какой? М-201С? М-309С? М-311? ...
уточните, пожалуйста, модель — я хотел бы глянуть схему его канала записи
[/q]
"Романтик М-309С-1"; схема есть здесь:
http://rw6ase.narod.ru/00/mg_kp1/romantik_m309.html
xoiss
Advanced Member


Всего сообщений: 711
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 окт. 2013
Добрый день!

(1)
Да, я посмотрел Ваш отчёт — Вы всё правильно там изложили.

Я не учёл, что в потоке может быть нечётное (три, например) количество сэмплов с одинаковым уровнем.
Из-за этого возникает мгновенная инверсия фазы. Ну, если не вдаваться в детали, то это так.
Разные реализации алгоритмов могут иметь свои сайд-эффекты в таком случае, когда приходится склеивать разрыв фазы.
В частности, декодер ffmpeg (который в общем можно считать стандартом) в таком месте добавляет "лишний" импульс.
Полагаю, аудио-чип у Вас в компьютере, порождает примерно похожий дефект.

Ну, такой дефект — лишний импульс — конечно, никак нельзя устранить аналоговыми цепочками.

Вот здесь этот дефект виден на отсчётах 1361 и 1650:
https://yadi.sk/i/0dWD0doa3W7sPq

- синий — это "эталонный" сигнал — сигнал, изначально синтезированный на 48000 Гц
- оранжевый — это сигнал, синтезированный на 1000 Гц и потом ресемплированный при помощи ffmpeg на 48000 Гц

ИТОГО: ---- Ок, согласен, 1000 Гц никак не годится.


(2)
Изначально, когда проверял это всё, я взял слишком короткий пример (емнип, что-то около 9 семплов), и в нём, увы, надо полагать, не было цепочки из трёх одинаковых битов подряд.
Ну, вынужден признать, проглядел я этот дефект, а "чистую теорию" — наверное, уже подзабыл я все эти чётности-нечётности, тетроды-пентоды.

... и шо ж таперь делать???
Увеличивать размер файла в 48 раз (до 48000 Гц) и страдать? :)

Ну уж нет!!

Коли наши логарифмы не любят моментальную инверсию фазы — избавим их от этой напасти. Сделаем частоту дискретизации 2000 Гц вместо 1000 Гц.
Как следствие непрерывные цепочки из нечётного числа одинаковых сэмплов более встречаться не будут — они все умножатся на 2 и станут чётными.

Вот здесь это видно — "лишние" импульсы теперь не возникают, т.к. фаза теперь нигде на 180 градусов мгновенно не инвертируется:
https://yadi.sk/i/9d_Lu4ZG3W7sPx

- синий — "эталонный" сигнал, изначально синтезированный на 48000 Гц (как и в п.1)
- оранжевый — это сигнал, синтезированный теперь уже на 2000 Гц и потом ресемплированный при помощи ffmpeg на 48000 Гц


(3)
Вот. Предлагаю Вам четыре файла, синтезированные на сетке 2000 Гц:

1-2-3--sample_rate=2000--soft_ends=True.wav
https://yadi.sk/d/126v64hQ3W82jF

1-2-3--sample_rate=2000--soft_ends=False.wav
https://yadi.sk/d/EpX0vqCw3W82j8

7-11-2017_tablo-XY-test__KP-637_N-36--sample_rate=2000--soft_ends=True.wav
https://yadi.sk/d/7s6sveA93W82jU

7-11-2017_tablo-XY-test__KP-637_N-36--sample_rate=2000--soft_ends=False.wav
https://yadi.sk/d/uTN6uZEc3W82jN

Посмотрите, пожалуйста.

Здесь:
- soft_ends=True — вариант с плавным введением/выведением уровней в начале и конце записи
- soft_ends=False — вариант со скачкообразным введением уровня в начале и удержанием неизменного уровня в конце записи
// хотя, честно, я не думаю, что это будет иметь какое-либо влияние на "середину" файла — ну, таки пусть будет, уж если Вы спрашивали ранее


(4)
Какие ещё дефекты здесь остались? А вот такие:
1. заваливание фронта/среза импульса с огибающей 1000 Гц (для сетки дискретизации 2000 /в секунду)
2. постоянное +90° смещение фазы — т.е. постоянное опережающее смещение фронта/среза импульса в обоих каналах примерно на 30-50% от ширины импульса
3. небольшие гармонические выбросы на полках импульсов в направлении нуля
-- 4. ---- устранён дефект "лишние импульсы" в точке инверсии фазы ----

Что с ними делать? Ну, примерно вот что:
1) усилитель записи в магнитофоне и так завалит резкие фронты/спады — поэтому, думаю, первый дефект не очень суть критичен. Максимум, что из-за него может быть, - это недостаточная амплитуда считанного импульса (недостаточная величина производной). Если это будет критическим моментом, то можно будет попробовать увеличить сетку синтезатора до 4, 6, 8... кГц
2) постоянное смещение всех перепадов в одном направлении в обоих каналах — это в принятой схеме кодирования вообще некритично
3) выбросы на полках импульсов — полагаю, их можно будет подчистить, просто введя усилитель записи магнитофона в режим перегрузки по входу (ну, хватит 30% перегрузки, думаю). Кстати, перегрузка усилителя записи по входу должна также помочь и против дефектов типа (1) и (2)

Таким образом — универсальное решение: перегрузить усилитель записи по входу на 30-50%.


(5)
И чтоб дважды не вставать, высылаю Вам ещё четыре файла, синтезированные на сетке 48000 Гц:

1-2-3--sample_rate=48000--soft_ends=True.wav
https://yadi.sk/d/Im6UnDV-3W6cL7

1-2-3--sample_rate=48000--soft_ends=False.wav
https://yadi.sk/d/D35lGjWv3W6cL2

7-11-2017_tablo-XY-test__KP-637_N-36--sample_rate=48000--soft_ends=True.wav
https://yadi.sk/d/_vPAsnDX3W6cLF

7-11-2017_tablo-XY-test__KP-637_N-36--sample_rate=48000--soft_ends=False.wav
https://yadi.sk/d/s2hbmKHo3W6cLB

Зачем? Ну, так, для сравнения с теми, что на 2000 Гц.

// честно говоря, мне ОЧЕНЬ не хотелось бы поднимать частоту до 48 кГц без крайней на то надобности, ибо файлы получаются ну уж очень большими


(6)
В своей программе я немного подкрутил алгоритм — теперь можно устанавливать sample_rate любым, кратным 2000 (ну, частота, кратная 1000, нас не устраивает из-за чётностей-нечётностей).
Это позволяет установить стандартные частоты, например, 48 кГц.

Я не стал делать поддержку частот типа 44100 Гц или 22050 Гц, т.к. это потребовало бы значительную переделку алгоритма, который изначально был рассчитан на сетку 1000 Гц.
А так я просто вместо одного кадра вставляю N копий такого кадра, чтобы получить N кГц вместо 1 кГц — простое решение.


(7)
Для всех научных опытов я использую программу ffmpeg — это такой аудио-видео-медиа "кухонный комбайн" — который может абсолютно всё, и даже то, чего не может Чак Норрис.
// а если он чего-то всё-таки не может, то мы тут для него пишем плагины

Собсна, самый простой опыт — это сделать с её помощью ресемплирование 2000 Гц-сигнала на 48000 Гц — и посмотреть, что получится:
ffmpeg -i myfile_2000.wav -c:a pcm_u8 -ar 48000 myfile_resampled_2000_to_48000.wav

Вот. ffmpeg в режиме ресемплера позволяет избежать необходимости стыковать две отдельные программы (плеер и рекордер) через аудиосистему компьютера.
На выходе (файл) Вы получаете математически строгий результат, хотя и используете при этом не абстрактную матмодель, а вполне "промышленные" библиотеки аудио-кодеков.


(8)
Вот. Ну и ещё хотелось бы отметить такой момент:
Как я и ожидал, в схеме усилителя записи "Романтика" есть элементы, подавляющие постоянную составляющую сигнала.

Это крайне не дружит с битстримом, в котором могут наблюдаться ооооооооооочень длинные цепочки из одинаковых бит.

В случае с Д3-28 получается следующее:
- если есть участок памяти, забитый "0000", то за период XX * 9 бит (XX байт) в канале "1" не будет ни одной смены уровня
- сотвесна, если после такого длинного участка в XX нулевых байт придёт байт, содержащий "1", то величина записанного импульса будет, ну, наверное, в два раза ниже, чем должна была бы быть

Ну, будем надеяться, что это не повлечёт концептуальных проблем при воспроизведении.

Однако, чисто на пробу высылаю Вам один файлик, в котором вот специально вставлены длинные цепочки "нулей" или "единиц":

long-stalls.dat
https://yadi.sk/d/zZao8-8W3W82sy

long-stalls--sample_rate=2000--soft_ends=True.wav
https://yadi.sk/d/rKXcsnB23W82uA

long-stalls--sample_rate=48000--soft_ends=True.wav
https://yadi.sk/d/DRwKodL03W82uy

В этом файле вставлена цепочка "0000" из 4 байт, потом цепочка "1515" из 4 байт, потом такие же пары цепочек, но уже из 8 байт и из 16 байт ---- всего 6 цепочек.
Цепочки разделены маркёрами "1010 0505".

Спасибо!
С уважением, Александр.
Sinus
Newbie


Откуда: СПб
Всего сообщений: 30
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
7 авг. 2016
xoiss, спасибо. О результатах на моём компе:

1. Без магнитофона, вроде, всё нормальноно выглядит (если не обращать внимания на обсуждавшиеся выше "осцилляции Гиббса"). Картинки для разных примеров похожи, привожу только две, для:
1-2-3--sample_rate=2000--soft_ends=True.wav
1-2-3--sample_rate=48000--soft_ends=True.wav
https://yadi.sk/i/_6TfPuJ33W9YFb
(test-3_no_mag__18-05-2018.jpg)

2. С "Романтиком" плохо понимаю, что происходит. Трижды записывал (пока он, гад, ленту не зажевал). Сначала артефакты оставались, но когда я поменял плеер, и при записи (через менее чувствительный вход, т.е. с делителем 30/(820+30)) уровень громкости компьютера убавил наполовину, то вроде стало лучше. Но всё-таки кое-где артефакты появляются. Описывать результат в картинках поленюсь, вот сам конечный wav-файл, в который аудиоредактором записан сигнал с магнитофона:

https://yadi.sk/d/3toggyID3W9YSY
(test-3_18-05-2018.wav; примерно 2.5 мегабайта)
Там 18=6·3 записей - на "Романтик" были записаны Ваши 6 сигналов (каждый сигнал по 3 раза подряд) в следующей последовательности:
1-2-3--sample_rate=2000--soft_ends=True.wav
7-11-2017_tablo-XY-test__KP-637_N-36--sample_rate=2000--soft_ends=True.wav
1-2-3--sample_rate=48000--soft_ends=True.wav
7-11-2017_tablo-XY-test__KP-637_N-36--sample_rate=48000--soft_ends=True.wav
long-stalls--sample_rate=2000--soft_ends=True.wav
long-stalls--sample_rate=48000--soft_ends=True.wav

Для сигналов с soft_ends=False, как Вы и говорили, всё примерно так же (только с "щелчком" на концах, а "середина" такая же; поэтому результат не привожу).

3. Один канал в "Романтике" (верхний на рисунках, т.е. "канал нулей") работает хуже другого. Он и стирает хуже, и в нём между импульсами возникает паразитное низкочастотое переколебание ("горб"), на фоне которого величина полезных импульсов оказывается очень малой - машинка их не увидит. (Наверное, АРУ реагирует на паразитный НЧ "горб" между импульсами как на сигнал, поэтому полезный перепад уровня оказывается подавленным). Кроме того, может быть, когда в одном канале долго нет активности, то АРУ повышает его чувствительность, и в него начинает проникать помеха из другого канала.

4. Думаю в итоге, что Ваш метод работоспособен, однако нужен хороший магнитофон; желательно без АРУЗ, с ручной регулировкой уровня записи. И хорошо бы проверять результат на Д3-28: всё-таки машинка в этой игре главный судья.

5. Малый размер wav-файла, думаю, не должен быть самоцелью; качество записи важнее. Важно, чтобы самодельную запись на кассете хотя бы один раз удалось загрузить в Д3-28; тогда можно будет записать хорошие копии самой машинкой, в любом количестве.
<<Назад  Вперед>> Страницы: 1 * 2 3
Печать
Полигон-2 »   Калькуляторы, арифмометры, PDA, HPC »   Свисток для Д3-28
RSS

1 посетитель просмотрел эту тему за последние 15 минут
В том числе: 1 гость, 0 скрытых пользователей

Последние RSS
[Москва] LIQUID-Акция. Сливаются разъемы CF
МС7004 и 7004А на AT и XT
Пайка термотрубок
Проммать s478 PEAK 715VL2-HT ( Full-Size SBC)
Подскажите по 386 материке по джамперам.

Самые активные 5 тем RSS