PDA

Просмотр полной версии : Вопросы по 1bit музыку. Принцип работы.



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

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

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

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

Mifody
15.10.2010, 23:11
http://www.pic24.ru/doku.php/osa/ref/appendix/quartet
Блин,а круто звучит.. Я бы и не сказал,что это 1 бит, если бы не знал..


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

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

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

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

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

Mifody
15.10.2010, 23:40
Вероятнее всего простейший "магнитофон".
Ну да,можно сказать и так..

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

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

Atari
16.10.2010, 00:27
Я хотел просто записать поток выходящих на динамик 0 и 1 в пзуху и потом ПИКом читать эту пзу с такой же частотой. На выходе получим мелодию,которую мы захватили

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

Mifody
17.10.2010, 23:47
Блин,я понимаю что мне надо сделать,но вот что то не пойму КАК?... Наверно завтра позвоню знакомому компьютерному программисту и попрошу его написать прогу для захвата потока бит из лпт порта. А на лпт порт можно и с реала подать сигнал..
А как писать ВАВ самим эмулем? Я в основном реал использую,эмуль запускал только несколько раз..

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

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

psb
18.10.2010, 01:24
попрошу его написать прогу для захвата потока бит из лпт порта.
кажись, ниче не выйдет...


А как писать ВАВ самим эмулем?
в анриле F5 - запись звука.

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

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

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

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

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

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

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