Просмотр полной версии : Сделал вот AY Player на Arduino...
Добрый день!
Давно хотелось собрать себе какой-нибудь девайс на микроконтроллере, но все как-то руки не доходили. А тут заимел вот себе замечательную платку Arduino Uno (это что-то вроде DevBoard-а на базе ATMega328).
И появилась у меня идея запилить на ее основе AY-плеер. С программной частью проблем никаких не возникло - просто перенес свой давнешний код с Java на C (было дело, писал когда-то эмулятор AY для J2ME), попутно слегка оптимизировав его под "контроллерную" восьмибитную специфику.
За день удалось сваять первую рабочую версию. Эмулятор без тормозов выдает 31250Hz (на частоте контроллера 16Mhz). Пока только играет по кругу жестко зашитую в память PSG, но в ближайшем будущем планирую сделать плеер для какого-нибудь .pt3.
По-быстрому накидал в Proteus-е макет девайса (просто контроллер с тупым R-2R-ЦАП-ом на порту D). Подключил виртуальный динамик, запустил - ИГРАЕТ!!! Радости - полные штаны!
И вот теперь, уважаемые, нужна ваша помощь. Хочу завести теперь все это на реальном железе, но не хватает элементарных познаний в электронике. В теоретической части. Паяльник-то я вроде держать немного умею.
Итак, вводные данные: контроллер работает на 5 вольтах, каждый вывод порта тянет нагрузку до 20mA. Подскажите пожалуйста, как правильно подключить наушники к этой платке? Будет ли играть без усилителя? Какие номиналы резисторов нужно использовать, чтобы и звук был, и порт не пожечь?
Буду благодарен за любую помощь. Если все заработает как надо - обязательно поделюсь исходниками.
30489
Ну ты хоть выложи на ютуб как у тебя этот девайс играет, интересно же :)
Выложу, обязательно выложу. Как только заиграет. Сейчас могу разве что выложить пример того, как играет эмулятор этого эмулятора :)
А мы с невартом реальный AY к ардуине прикрутили :rolleyes:
Вот, в теории играет как-то так (http://fgf1.i.ua/g/2a612f.2a612f.98293.1.830b5a43.2/zzz.7z). По ссылке WAV-файл в архиве, 44100 Mono (получен апсэмплом с 31250Hz до 44100Hz дампа с порта эмулятора). Размер - 2,2Mb.
Вот, в теории играет как-то так.
На будущее, аудиофайлы лучше выкладывать на сервисе soundcloud.com
Вот закачал для теста - http://soundcloud.com/breeze-fbn/ay-player-arduino
И кстати можно картинку несколько в лучшем качестве приложить, а то текст вообще не возможно разобрать :(
solegstar
04.11.2011, 16:16
есть похожие проекты -
http://zx-pk.ru/showthread.php?t=10510
http://zx-pk.ru/showthread.php?t=12485
Спасибо, не знал про soundcloud.com. Занятный сервис.
А насчет картинки - это не я, это форум ее так изуродовал. Вот, схема в нормальном качестве:
http://fgf1.i.ua/g/2a612f.2a612f.98303.1.9991b1dd.2/sch.png
---------- Post added at 14:21 ---------- Previous post was at 14:18 ----------
solegstar, да, похожие. Но первый сделан на непонятном мне Algorithm Builder-е, второй - на С, но без исходников. Кроме того, там юзается настоящий ЦАП. А мне бы хотелось чего попроще, типа вот такого Covox-а.
Вот, в теории играет как-то так.
Тестовые музоны должны быть с огибающей.
solegstar
04.11.2011, 16:35
кстати вопрос, а стерео будет? в проекте с настоящим ЦАПом в чем прикол - там ведь стерео плеер, используется один порт под данные, еще три бита другого под управление ЦАПом. Впринципе, если есть свободные выходы у меги (и для удешевления конструкции в самый раз), то можно конечно поставить и две 572ПА1 (у них получше звук будет, чем у резисторов) на разные порты. Самую качественную схему включения 572ПА1 (без высокочастотных свистов и левых звуков) я собирал по схеме SounDrive 1.02 вот по этой (http://velesoft.speccy.cz/da_for_zx-cz.htm) ссылке.
newart, Насчет огибающей - это верно... Там теоретически могут косяки вылезти. Какой посоветуете для теста?
solegstar, О! Кстати в этой теме (http://zx-pk.ru/showthread.php?t=10510) откопал подходящую схемку! Там даже стерео! И для этого там задейстовованы всего 2 ноги контроллера, а не 8 (и это для моно) как у меня. Ибо там юзается аппаратный ШИМ контроллера. Думаю что попробую и такой и сякой вариант (т.е. моно на R-2R и стерео на ШИМ).
Пошел допиливать код...
solegstar
04.11.2011, 16:51
возможно стОит еще предусмотреть возможность переключать раскладки каналов - ABC или ACB, т.к. раньше мелодии были с двумя стандартами и сам понимаешь звучали по разному на разных микшерах АУшки.
Rolex, дык у ардуины есть аналоговый выход? Почему бы не заюзать его? Сколько там разрядность ЦАПа?
solegstar, элементарно! Сделаю.
BYTEMAN, увы, AFAIK у ардуины есть только аналоговые ВХОДЫ, а выходов - нет.
Rolex, дык у ардуины есть аналоговый выход? Почему бы не заюзать его? Сколько там разрядность ЦАПа?
Ты не путаешь аналог и шим?
---------- Post added at 17:08 ---------- Previous post was at 17:08 ----------
Rolex, кстати откуда в итоге будут играться музоны? C SD?
Ты не путаешь аналог и шим?
ммм... а что, реально только выходы? Невнимательно я даташит читал :(
Вот, типа "стерео-версия" схемы, вместо ЦАП-а используется ШИМ. Господа, подскажите плиз, ЭТО можно собирать? Наушники к этому прицепить получится? Ничего не спалю? А то я уже поехал покупать детальки и греть паяльник :)
http://fgf1.i.ua/g/2a612f.2a612f.98362.1.a2d1226f.3/sch2.png
solegstar
04.11.2011, 19:07
ЭТО, как ты выразился, можно подключить к входу звуковухи компа/усилителя. Для наушников нужен усилитель мощности. допустим tda7050 как здесь - http://test.radiokot.ru/circuit/audio/amplifier/23/index.shtml
ну и регулятор громкости надо бы :)
Я подключал наушники (30 Ом) играли громко без усилителя. Написано что порт может выдать 40 mА, но на практике они терпят и 80 mA, главное чтобы сумарный ток всех портов не привысил 200 mA.
Вот, в теории играет как-то так.
Гм... Такое ощущение, что писалось через микрофон в пустой комнате (эхо) и уровень записи зашкаливал...
Ну вот... Собрал R-2R ЦАП aka Covox... Только что остыл паяльник и отключена Ардуина... Играет, зараза! Правда почему-то фигню какую-то :( Ушел в дебаг :)
---------- Post added at 01:50 ---------- Previous post was at 01:45 ----------
Сорри за оффтоп: breeze, или кто-нибудь из Fishbone, а вот это (http://www.youtube.com/user/TheFishboneCrew#p/a/f/2/XEjXGIkQCcI) (первый трек) - ЧТО ЭТО??? Это SID? Просто... Это... Взорвало мозг и лишило сна... Теперь есть к чему стремиться. Хочу повторить ЭТО на АТМеге.
Сорри за оффтоп: breeze, или кто-нибудь из Fishbone, а вот это (http://www.youtube.com/user/TheFishboneCrew#p/a/f/2/XEjXGIkQCcI) (первый трек) - ЧТО ЭТО??? Это SID?
Да, это демо для Commodore 64 играет SID :)
Просто... Это... Взорвало мозг и лишило сна... Теперь есть к чему стремиться. Хочу повторить ЭТО на АТМеге.
Не уверен конечно :) но боюсь эт сложновато будет… хотя может и получится :)
Уже есть эмулятор СИДа в ардуине. Но, блин, звук мягко говоря... Проще реальный сид к ардуинине прикрутить...
---------- Post added at 12:42 ---------- Previous post was at 12:41 ----------
Rolex, посетите hvsc.c64.org :)
Итак, оно играет! Пока что правда Mono. И еще я похоже в процессе отладки спалил два разряда порта D на АТМеге :( На них теперь постоянно +5, что с ними ни делай... В следующий раз надо (ГОРАЗДО!) внимательнее смотреть в схему. Но как по мне, для ПЕРВОГО В ЖИЗНИ спаянного девайса это нормально, "искусство требует жертв". Сейчас попробую перекинуть вывод двух старших бит порта D на какой-нибудь другой, и записать на Line-in звучание эмулятора уже в "железе".
Но, блин, звук мягко говоря...
Ну так я и о том же ;)
---------- Post added at 12:46 ---------- Previous post was at 12:46 ----------
Итак, оно играет!
Ждём видео!
Ну качество дрянь, но в виде пруф-видео сгодится... http://www.youtube.com/watch?v=HZna-MZBWk0&feature=player_embedded
---------- Post added at 17:56 ---------- Previous post was at 17:55 ----------
Сегодня спаяю шнурок и попробую звук с Line-in записать.
---------- Post added at 18:03 ---------- Previous post was at 17:56 ----------
Кстати, само звучание мне весьма даже нравится, а вот точность эмуляции, в особенности шума, хромает. Завтра чуть-чуть приведу в порядок исходники и выложу здесь. Может, совместными усилиями у нас и получится добиться приемлемого качества?
Может, совместными усилиями у нас и получится добиться приемлемого качества?
Приемлемого для чего?
Цель то какая?
Приемлемого для чего?
Цель то какая?
Честно говоря сейчас уже сложно сказать... Изначальная идея - да-да, не смейтесь - дверной звонок. Эта цель по сути достигнута, качество приемлемое, более чем для данной задачи. Но тут уже, как водится, захотелось продолжения. Сейчас в планах - стерео-версия, плюс (с вашей, кстати, подачи!) проигрывание с SD/MMC.
А вообще просто давно душа лежит к программированию вот таких вот мелких девайсов, ну вроде AVR-ок. Или Спека :) А на основной работе - хоть я и программер - но совсем другие вещи делать приходится... Так что целей тут определенных пока не ставлю, делаю я все это чисто для души. Джаст, как говорится, фор фан :)
---------- Post added at 00:57 ---------- Previous post was at 00:50 ----------
А это уже запись с линейного входа (http://soundcloud.com/rostislavuralskiy/emulation-of-ay8910). Странно, но то ли дело в ноуте, на котором это писалось, то ли фиг его знает в чем, но в записи звучит далеко не так, как реальная Ардуина подключенная к центру: на записи басов почти совсем нет. При "прямом" подключении звук мне нравится куда больше.
проигрывание с SD/MMC
Но проигрывание чего? pt3?
---------- Post added at 12:49 ---------- Previous post was at 12:48 ----------
Форматов превеликое множество.
---------- Post added at 12:50 ---------- Previous post was at 12:49 ----------
А лет 5 назад появился Turbo Sound (2xAY).
Сабж такое едва ли потянет?
newart, Если с карты - то хоть бы и PSG. Но в первой итерации хочу сделать .pt3 из флэша контроллера. А то PSG максимум минута сейчас влазит. Для звонка - более чем, для плеера - разумеется, это уже не айс. А насчет "великого множества форматов" - а стоит ли пытаться объять необъятное?
2xAY - может даже и потянет, даже на штатных 16MHz. После этой демы (http://www.linusakesson.net/scene/phasor/index.php) я вообще сильно пересмотрел свое отношение к возможностям AVR-контроллеров :)
Кстати, есть вопрос по генерации шума: сейчас там вот такой код:
rngSeed = ((rngSeed << 1) + 1) ^ (((rngSeed >> 16) ^ (rngSeed >> 13)) & 1);
res ^= (rngSeed >> 16) & 1;
Вроде как по идее "референсная" шумелка, но фигня в том, что переменная rngSeed - 32-разрядная (на МК это unsigned long). Может есть идея как это соптимизировать, чтобы не использовать 32-разрядную переменную?
Kakos_nonos
07.11.2011, 16:32
Извините за оффтоп, Rolex, вы писали, что написали эмулятор AY на J2ME. Можно посмотеть на него, если это, конечно, не секретная разработка.
А то иногда хочется на телефоне послешать, а в mp3 перегонято неохота.
Kakos_nonos, Можно, только он нe играет :) Т.е. и на одном из РЕАЛЬНЫХ телефонов оно не работало. В эмуляторе сановском что-то даже играло. Я и забросил это дело. Может кто сейчас возьмется дописать? Кодом могу поделиться.
---------- Post added at 15:30 ---------- Previous post was at 14:43 ----------
Кстати, тут в ходе экспериментов получился занятный код: что-то типа 1-битного моно-AY :) Звучание сильно смахивает на спековские биперные мелодии а-ля Chronos. Эх, жаль почти напрочь забыл как на спеке кодить... А то бы наверное попробовал эмуляцию псевдо-AY на бипере сделать - похоже ресурсов Z80 хватило бы. Код на всяк случай сохранил. Может кому покажется забавным. Могу даже пример звука попробовать выложить.
А то бы наверное попробовал эмуляцию псевдо-AY на бипере сделать - похоже ресурсов Z80 хватило бы.
Это врядле. Даже ресурсов 12 Мгц Z80 на это толком не хватило:
Рабочий стол - General Sound AY Emulator v1.0 (http://www.zxpress.ru/article.php?id=9503)
Вроде только было решил, что все хорошо... На большинстве музонов качество эмуляции сейчас более-менее сносное. Но тут попалось мне вот это интро (http://party.c64.su/ht2010/ht2k10se.zip) от Fishbone Crew... Музыка понравилась. Сдампил PSG, загрузил в ардуину. F-F-F-F-FUUUUUU.... Звучит просто ужасно! Ужаснее всего - почему-то именно канал B. На нем басы и частично ударные идут.
Может компетентные товарищи подскажут, в чем может быть подвох в эмуляции именно этого трека? Если надо - кину свои исходники.
---------- Post added at 15:44 ---------- Previous post was at 15:39 ----------
Ой, стоп, разобрался уже!
---------- Post added at 16:05 ---------- Previous post was at 15:44 ----------
Поправил, уже лучше... но все равно дрянь... :( Хрипы сильные, как будто интерференция между каналами. И огибающую здесь насилуют по полной. Ну ООЧЕНЬ хитровыделанная мелодия! Первый раз такая попалась!
Ой, стоп, разобрался уже!
Огибающую переинициализировал лишний раз?
---------- Post added at 18:10 ---------- Previous post was at 18:07 ----------
И огибающую здесь насилуют по полной. Ну ООЧЕНЬ хитровыделанная мелодия! Первый раз такая попалась!
Ты наверное спектрум вообще не слушал.
Это как бы уровень последних лет 12.
И далеко не предел.
Послушай:
http://zxtunes.com/author.php?id=326
http://zxtunes.com/author.php?id=316
http://zxtunes.com/author.php?id=473
http://zxtunes.com/author.php?id=388
http://zxtunes.com/author.php?id=82
newart, да, наверное, где-то лет 10-12 не слушал реальный AY. А за ссылки - спасибо. Действительно, убедился - не предел... Не знаешь, то что на этои сайте в онлайне играет - это записи с реала? А то в эмуляторе Бульбы большинство из тех треков звучит почти так же ужасно, как на Ардуине.
Не знаешь, то что на этои сайте в онлайне играет - это записи с реала?
Нет. Это эмулятор AY.
эмуляторе Бульбы большинство из тех треков звучит почти так же ужасно, как на Ардуине.
Вообще то, эмулятор Бульбы почти эталон эмуляции AY.
Попробуй поменять частоту дискретизации, скажем поставить 48к или 96к (если звуковуха поддерживает).
Так, сейчас еще раз помедитировал над докой по AY, поправил синтез огибающей (счетчик огибающей щелкает на 1/32 частоты AY, я правильно понял?). Стало по-моему лучше. К сожалению сейчас выложить сэмпл не могу, может ближе к ночи, как домой доберусь.
---------- Post added at 18:04 ---------- Previous post was at 17:59 ----------
А вообще интересно было бы потыкать осциллографом в живой AY - что-то мне подсказывает, что там на аналоговых выходах сигнал немножко сложнее чем просто прямоугольник :)
---------- Post added at 18:08 ---------- Previous post was at 18:04 ----------
И еще вопрос: я заметил, что в зависимости от выбора "раскладки" каналов (ABC/ACB/BAC etc) звучание может иногда ОЧЕНЬ сильно отличаться. А есть ли в файлах pt3 информация, для какой "раскладки" он написан?
А есть ли в файлах pt3 информация, для какой "раскладки" он написан?
Нет.
А есть ли в файлах pt3 информация, для какой "раскладки" он написан?
В самих файлах как таковых данных нет, но иногда встречается информация в названии трека [ABC][ACB]. Возможно в имени файла.
но иногда встречается информация в названии трека [ABC][ACB]. Возможно в имени файла.
Черезвучайно редко и у 2-3 авторов, о которых и так известно в какой они раскладке писали.
Ну вот, сейчас как-то так (http://soundcloud.com/rostislavuralskiy/emulation-of-ay8910-with-1#). Не судите строго - там куча упрощений и допущений. Тем не менее, имеется даже недурственная заначка по быстродействию - может даже (не буду загадывать) и та два AY хватит.
---------- Post added at 02:14 ---------- Previous post was at 02:09 ----------
Собственно код эмуляции - это всего около 30 коротких строк на Си. Плюс еще огибающая (процидурка на 102 AVR-овских байта, т.е 51 слово)- но там если не будет хватать можно и таблицу засунуть. Короче, весь колхоз должен где-то в 1,5-2K вместиться. Но это для PSG. Полновесный плеер, я думаю, выйдет раза в три побольше, минимум.
---------- Post added at 02:28 ---------- Previous post was at 02:14 ----------
И таки да, пока первые 7 секунд ужасны.
как-то так
Неправильная ссылка.
Неправильная ссылка.
http://soundcloud.com/rostislavuralskiy
Странно... Ну тогда сейчас могу отправить только так: http://fgf1.i.ua/g/2a612f.2a612f.c0043.2.8b72c3d9.1/test_out.mp3 - mp3-шка, 1,9M
Странно... Ну тогда сейчас могу отправить только так: http://fgf1.i.ua/g/2a612f.2a612f.c0043.2.8b72c3d9.1/test_out.mp3 - mp3-шка, 1,9M
Че за музон? можно оригинал выложить?
newart, AY.
Ramiros, музон из этой интры (http://party.c64.su/ht2010/ht2k10se.zip). Вот он же, выдранный оттуда (http://fgf1.i.ua/g/2a612f.2a612f.c007e.2.e5fe50fb.2/ht2k10se.psg) в виде PSG.
---------- Post added at 12:08 ---------- Previous post was at 11:52 ----------
О, удалось загрузить на SoundCloud: http://snd.sc/voPShg
В arduino nano оно будет работать?
newart,
В arduino nano оно будет работать?
А почему нет? Контроллер-то совершенно идентичный.
---------- Post added at 23:57 ---------- Previous post was at 23:39 ----------
Ёкарныбабай! Мысль! А ведь у ней-то целых 6 выходов с поддержкой ШИМ! Так что по идее на трех можно сбацать аналоги A,B,C каналов AY! И не морочиться с программным микшированием! Попробую! Сейчас правда до вторника катастрофическая нехватка времени на все это, но вот через неделю иду в отпуск :D - вот тогда и поманьячу в удовольствие! :v2_dizzy_punk:
Ага. И в следущий раз выкладывай wav, а не mp3.
Вопрос к гуру эмуляции AY. У меня "внутри" AY есть 5 счетчиков, назовем их cntA,B,C,N,E. Каждый из них щелкает до заданного значения freqA,B,C,N,E (регистры AY), определяющего частоту прямоугольника/шума на данном канале, или (не знаю как это сказать, "скорость" что ли) огибающей. Короче, чем объяснять на словах, проще просто кусочек кода вставить:
if (++cntA == freqA) {
cntA == 0;
res ^= BIT_A;
}
Вопрос такой: что должно происходить при freqA = 0? Должен ли BIT_A "дергаться" с частотой AY, или при freqA = 0 счетчик должен отключиться?
Ок, разобрался. Тут уже ассемблер попёр :) Звук еще не идеал, но постепенно приближается (опять же, с рядом допущений в целях быстродействия). Кстати, на днях спаяю стерео-версию. Пока -с программным микшированием каналов.
Кстати, сорцы интересны кому-либо? Вроде чуть-чуть привел в порядок, можно и было бы и выложить. А то совсем стыдно было бы пообещать, пусть хоть какие-то исходники, и не выложить ничего.
Они под VS2010 и AVRStudio 5 (что уже по сути одно и то же), просто одним дефайном определяется, собирать либо Ардуиновскую прошивку, либо Win32-"эмулятор эмулятора", дампящий в файл результат проигрывания.
пока проект интереса не представляет.
пока проект интереса не представляет.
Спасибо за очень ценный и ёмкий комментарий! Для автора проекта это очень важная и нужная информация! :rolleyes:
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot