Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Для начинающих (http://zx-pk.ru/forumdisplay.php?f=43)
-   -   Вопросы по 1bit музыку. Принцип работы. (http://zx-pk.ru/showthread.php?t=14046)

Mifody 15th October 2010 23:12

Вопросы по 1bit музыку. Принцип работы.
 
Здравствуйте. Как я понимаю, 1 битная музыка-это всего навсего последовательность нулей и едениц на выходе цифровой микросхемы.. То есть как я понимаю такую последовательность можно получить и на выходе контроллера. Допустим PIC.. Сразу попрошу не пинать за тупые вопросы, так как вобще пока в этом не шарю..
Первый вопрос: какой должен быть поток данных БИТ/сек, чтобы получить на выходе мелодию. Есть идея записать код мелодии в ПЗУ и выводить её потом с помошью PICа. Такое в принципе возможно,как я понимаю. Только надо прикинуть объём ПЗУхи хотя бы для 30 секундной мелодии..
Вопрос два: Как "захватить" поток данных цифровой мелодии для последующей записи последовательности нулей и едениц в ПЗУ..
Возможно решение такого вопроса с помощью записи мелодии в пзу покажется для многих странным. Я и сам это понимаю. Гораздо солидней было бы написать код для PICа, чтобы он сам формировал 1 битную мелодию,а не просто считывал её из ПЗУхи. Но я пока до этого не дорос.. Пока хочу попробовать так. А потом видно будет..

dosikus 15th October 2010 23:18

Mifody, Ключевое слово ШИМ . Здесь пример полифонии :
http://www.pic24.ru/doku.php/osa/ref/appendix/quartet
Пример прекрасно моделируется в Протеус .
http://s57.radikal.ru/i157/1010/d3/ee20716d6d83.png

Atari 15th October 2010 23:43

ШИМ может быть как и способом преобразования данных при обычном ИКМ кодировании/хранении, так и самим способом оцифровки/хранения. Во втором случае ужасно прожорливым.

dosikus 16th October 2010 00:08

Quote:

Originally Posted by Atari (Post 323201)
ШИМ может быть как и способом преобразования данных при обычном ИКМ кодировании/хранении, так и самим способом оцифровки/хранения. Во втором случае ужасно прожорливым.

Там ноты , вроде конвертированное MIDI...

Mifody 16th October 2010 00:11

Quote:

Originally Posted by dosikus (Post 323191)
http://www.pic24.ru/doku.php/osa/ref/appendix/quartet

Блин,а круто звучит.. Я бы и не сказал,что это 1 бит, если бы не знал..

Quote:

Originally Posted by Atari (Post 323201)
Во втором случае ужасно прожорливым.

Да,я это подозревал. Просто моих знаний по программингу контроллеров пока недостаточно,чтобы написать код для контроллера. Я тут часы с будильником забабахал на пике,хотел чтоб вместо писка в будильнике играло спековскую 1 бит мелодию. хотел наскорую руку записать мелодию в пзуху,а потом просто выводить содержимое на динамик. В принципе,я это уже умею..)))) Только вот не знаю какой поток данных в спековской 1 бит музыке,от сюда неизвестно объём пзухи,который нужно для 1 секунды звучания. Нужно знать поток данных бит/сек,который выводится на динамик спека во время звучания 1 бит мелодии.. Я надеюсь вы поняли,что я хочу замутить? Должно получиться? Или этот вариант сразу можно исключить?

Atari 16th October 2010 00:19

Mifody, честно говоря, что именно вы хотите замутить я так и не понял.

Вероятнее всего простейший "магнитофон".

В таком случае емкость ПЗУ (моно) расчитывается как обычно:
Полоса сигнала умноженное на два (частота дискретизации) и умноженное на к-во байт (бит деленных на восемь) на отсчет.

8 кГц на 8 бит нам дадут ~ полмегабайтную ПЗУ.

Mifody 16th October 2010 00:40

Quote:

Originally Posted by Atari (Post 323233)
Вероятнее всего простейший "магнитофон".

Ну да,можно сказать и так..
Quote:

Originally Posted by Atari (Post 323233)
что именно вы хотите замутить я так и не понял.

Ну,тогда на пальцах попробую объяснить..

Как я понимаю,1 бит мелодия,это последовательность 0 и 1, которые идут на динамик с определённой частотой. Получается некий поток данных в битах/секунду звучания. Допустим,это 8 кГц, получается,что поток данных 8 кБит/сек или 1кБ на 1 секунду звучания. Но только ведь это может быть и не 8кГц,тогда и поток данных получается другой. Я хотел просто записать поток выходящих на динамик 0 и 1 в пзуху и потом ПИКом читать эту пзу с такой же частотой. На выходе получим мелодию,которую мы захватили. Идея конечно тупая, но пока я додумался только до этого. Написать код,который сам бы генерировал мелодию я пока не могу..(((

Atari 16th October 2010 01:27

Quote:

Originally Posted by Mifody (Post 323250)
Я хотел просто записать поток выходящих на динамик 0 и 1 в пзуху и потом ПИКом читать эту пзу с такой же частотой. На выходе получим мелодию,которую мы захватили

В таком случае надо отталкиваться примерно от потока в 16...20 кбит/сек.
Что даст на 30 секунд ~ теже полмегабайта.

Потом исходя из "качества" результата можно будет варьировать скоростью потока.

Mifody 16th October 2010 01:44

Во.. Значит буду думать дальше.. А не подскажете как можно захватить звук и преобразовать его потом в bin файл? В WAV записать можно,а вот потом что с ним делать?

psb 16th October 2010 04:11

хранить беззнаковый PCM, лучше ADPCM, выводить шимом. частота несущей чем больше, тем лучше. точно больше 20 кГц, чтобы свиста не было слышно. разрядность тоже чем больше, тем лучше (храните 8бит звук - делайте 8бит шим).

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

Mifody 16th October 2010 21:33

Как программить ШИМ я пока ещё не знаю...(( Это в дальнейших планах..

Quote:

Originally Posted by psb (Post 323270)
wav можно загрузить в саундфорж, сделать ему нужную частоту, битность, моно/стерео, обрезать начало/конец и ... сохранить как RAW. это данные без заголовка, можно прям в пзу писать.

А вот за это спасибо. Буду пробовать.))

dosikus 16th October 2010 21:48

Mifody, Может тебе диктофон нужен?
http://www.uni-electronics.narod.ru/dictophon.htm

Mifody 16th October 2010 22:11

Quote:

Originally Posted by dosikus (Post 323404)
Может тебе диктофон нужен?

Диктофон,только 1 битный,который бы записывал только цифровой сигнал. Да собственно записать то нужно только 1 раз,а потом для воспроизведения читать запись из ПЗУ.

dosikus 16th October 2010 22:20

Quote:

Originally Posted by Mifody (Post 323412)
Диктофон,только 1 битный,который бы записывал только цифровой сигнал.

Проще указать что за источник сигнала. А если один раз записать - проще на компе оцифровать...
Меня терзают смутные сомнения : ты не звонок ли делаешь? Или как вариант : речевой информатор?

Mifody 16th October 2010 23:42

Нет. Всё намного проще. Я тут потихоньку PIC контроллеры изучаю. Забацал часы с будильником. А теперь вот хочу,чтоб вместо пищалки в будильнике играла спековская 1 битная музыка. Конечно,можно написать код для ПИКа,который будет генерировать 1 битную музыку, как это было сделано по ссылке выше. Но к сожалению моих знаний пока не хватает для этого. Вот я и думаю,как бы сделать это попроще. Так как музыка 1 битная,значит она представляет из себя последовательность только 0 и 1, которые идут на динамик с какой то частотой. Получается некий поток данных в битах/секунду звучания. Вот мне и нужно знать, какой это поток данных в битах/секунду, чтобы записать этот поток в ПЗУ и потом последовательно считывать её с той же частотой.. На выходе мы получим записанную в ПЗУ мелодию. Как раз и получается некий 1 битный диктофон. Только записать нужно 1 раз. Вот я и ломаю теперь голову над тем,на писи это всё дело провернуть. Я запустил на эмуле 1 битную мелодию,записал её в WAV. А вот что теперь делать не пойму. Чуть выше советовали убрать из файла заголовок и записать это всё в ПЗУ. Так можно сделать,только получим 8 битный WAV и считывать нужно по целому байту для вывода звука. Да ещё и через ЦАП. Это громоздко и расточительно со стороны экономии места ПЗУ. Так можно выводить любой звук. Я как раз и хочу вывести спековскую 1 бит мелодию чтоб отказаться от ЦАПа, да и размер ПЗУ сократится в 8 раз. Мне не нужно готовое устройство. Мне нужно понять, как захватить 1 бит мелодию с выхода спека (или на эмуле на писи) и преобразовать захваченную последовательность бит в bin файл для записи ПЗУ. А для этого нужно знать с какой частотой (каков поток данных в бит/сек) выводится с выхода спека при проиргывании мелодии чтоб потом с той же частотой читать ПЗУ и выводить считанные биты на динамик. Ну и собственно КАК захватить этот поток нулей и едениц и преобразовать всё это в файл для ПЗУ..
Надеюсь,понятно объяснил...

dosikus 17th October 2010 00:12

Так тебе все уже написали .
Захватываешь в wav -> конвертируешь в ADPCM, или сразу захватываешь в ADPCM.
С нужными тебе параметрами (частота и т.д.) .
Записываешь или в память чипа ( если хватит :) ) . Или во внешнее ПЗУ- I2C,serial)
Потом выводишь ADPCM -> ШИМ (PWM).
ИМХО проще написать свой вывод 1 битной музыки , подсмотрев со спеки частоту/длительность - обьем будет на порядки меньше.
Примеров для PIC таких пищалок - кучи . В том же Протеус есть DoorBell.

psb 17th October 2010 02:27

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

---------- Post added at 03:27 ---------- Previous post was at 03:26 ----------

вот всегда так получается: человек не договаривает, ему начинают советовать, советовать... насоветуют универсального... а оказывается, и не надо городить огороды и все куда проще.

описывайте сразу задачи яснее!

Mifody 17th October 2010 12:20

Quote:

Originally Posted by psb (Post 323521)
там скорее всего будут как раз импульсы - нули и единицы (если нет - надо прогнать через компаратор). нужно их перевести в 1 бит (написав программку), упаковать в байты и выводить просто на выход мк с частотой оцифровки. тут ни шим, ни цапы не надо, тупой цикл: взять из пзу байт, выводить бит в порт, пауза, след.бит, пауза, ...., повторить со след.байтом.

Как раз это я и хочу сделать! Вроде ж описал всё правильно и ничего не недоговаривал..
Я уже написал прогу для МК для вывода побитно содержимого ПЗУ. Осталось теперь записать в ПЗУху мелодию. Я записывал мелодию из эмуля в ВАВ в GoldWavе. Но там не совсем цифровой сигнал получается. Звуковуха походу коверкает цифровой сигнал. Там нечто,похожее на синусоиды.. Теперь надо подготовить прошиву на РС,в чём и есть основная проблема..((( Я сейчас начинаю понимать,что наверно не смогу сам подготовить прошиву для ПЗУхи..((((

Ewgeny7 17th October 2010 17:49

А не реальней использовать реальный спектрум, подключив его к выходу звуковухи+эмуль? Считывать значение с магнитофонного входа и перегонять сразу в память. Будет как раз дамп из нулей и единичек.
Может я и глупость сморозил...

psb 17th October 2010 22:39

вав пишите самим эмулятором!
в крайнем случае - выложите trd что надо записать.

Mifody 18th October 2010 00:47

1 Attachment(s)
Блин,я понимаю что мне надо сделать,но вот что то не пойму КАК?... Наверно завтра позвоню знакомому компьютерному программисту и попрошу его написать прогу для захвата потока бит из лпт порта. А на лпт порт можно и с реала подать сигнал..
А как писать ВАВ самим эмулем? Я в основном реал использую,эмуль запускал только несколько раз..

"в крайнем случае - выложите trd что надо записать."

вот в этом образе вторая мелодия. если вы знаете как это сделать,можете подготовить дамп с частотой 8кГц, 16кГц, и 22кГц. А я уже попробую с разными частотами и посмотрю качество звука.

psb 18th October 2010 02:24

Quote:

Originally Posted by Mifody (Post 323710)
попрошу его написать прогу для захвата потока бит из лпт порта.

кажись, ниче не выйдет...

Quote:

Originally Posted by Mifody (Post 323710)
А как писать ВАВ самим эмулем?

в анриле F5 - запись звука.

но, как я выяснил, не хватает 44100 для этого... на этой частоте сигнал уже сглаживается местами и получается аналоговый (не 1 бит). так что надо думать... можно попробовать настроить на запись в 192000гц и посмотреть... и тогда уже надо не тупо эту 1битную последовательность хранить, а например время от переключения до переключения выхода... так меньше займет места.

либо разобрать плеер... либо плюнуть и записать аналоговый сигнал (8бит).

psb 18th October 2010 02:39

1 Attachment(s)
в аттаче записанный файл.
формат: вав, 8 бит, 192000 кгц! моно.
т.е. можно тупо откусить заголовок, байт 100, а дальше каждый байт это либо 0, либо #ff, что соответствует 0 и 1 на выходе. пакуете ЭТО по 8 байт в один, и потом воспроизводите с 192кГц:):):) будет ну очень похоже звучать:)
либо думайте как упаковать этот поток... RLE спасет, но не сильно.

psb 18th October 2010 02:41

анрил у меня тупил дико, когда я 192000 поставил... не играл звук, скорость просто ппц резвая была, но в вавку записал. зато быстро:) превед, deathsoft! ;)

Barmaley_m 2nd November 2010 23:56

Если записать спековскую однобитную музыку... Например, движок Savage, частота дискретизации примерно 56кГц. Надо 56 килобит на каждую секунду звука. То есть 7 килобайт в секунду. Никакой емкости памяти пика не хватит даже на 10-30 секунд звука, надо цеплять внешнюю ПЗУшку. Я недавно делал подобное устройство, использовал 64кБ памяти на внешней микросхеме - да и того хватило всего-то на секунд 10 звука в ужасном качестве.

Не годится этот способ. Надо или ШИМ использовать с меньшей частотой дискретизации, или прицепить хотя бы 8-битный ЦАП к пику, или генерировать сигнал в реальном времени, как это делают спектрумовские музыкальные движки. Но эти движки - довольно сложные программы, уж точно не на 5-минутный "учебный" проект. Да и произвольные звуки реализовать на них нельзя - на то он и синтез, что привязан к простой математической модели.

GriV 23rd November 2010 23:28

Насколько сложный алгоритм допустим? Закодировать в 1битный сигнал ADAPCM можно любой исходный вариант, только поставьте чётко ограничения по объёму и т.д.
Вот тут есть http://zx.pk.ru/showthread.php?t=386
На 256 кбайт можно около минуты "свистового" звука записать, повышая качество можно сильно развиться... но память там улетает в трубу...


All times are GMT +4. The time now is 23:55.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.