nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 27 Apr 2024 15:08



Reply to topic  [ 17 posts ]  Go to page Previous  1, 2
[ASM] Проигрыватель 2-битного звука для РК-86 и т.д. 
Author Message
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22606
Location: Silicon Valley
Reply with quote
Shaos wrote:
Алгоритм у меня был следующий - я брал MP3 файл и загружал его в Audacity где сливал 2 канала стерео в один моно 44100 Гц и по максимуму усиливал без зашкаливания, чтобы динамический диапазон не растрачивался попусту - в таком виде я сохранял 8-bit signed RAW-файл с расширением .r8s который скармливался первой программке, которая усредняла отсчёты по два (чтобы получить 22050 Гц из 44100 Гц) и подменяла получившиеся уровни по следующей слегка логарифмической шкале:
Code:
   if(k<-32) k=0x20;     // -128..-33  ---> 0x20
   else if(k<0) k=0x60;  //  -32..-1   ---> 0x60
   else if(k<32) k=0xA0; //    0..+31  ---> 0xA0
   else k=0xE0;          //  +32..+127 ---> 0xE0
и это всё сохранялось как unsigned 8-bit RAW-файл 22050 Гц с расширением .r8u (тут только 4 уровня сигнала было, но его всё ещё можно было проиграть в Audacity как показано на видео выше), ну и далее с помощью ещё одной программки происходило сжатие в .bin в описанном в начале топика формате TWOBITS:
Code:
\ TWOBITS FORMAT:
\ ONE BYTE PLAYS 3 DIFFERENT 2-BIT SAMPLES
\ OR MAXIMUM 50 IDENTICAL 2-BIT SAMPLES
\ 00000000 - END OF STREAM
\ 0NNNNNBB - OUTPUT BB NNNNN+3 TIMES
\ 10NNNNBB - OUTPUT BB NNNN+35 TIMES
\ 11DDCCBB - OUTPUT BB THEN CC THEN DD


Shaos wrote:
Shaos wrote:
Аналогичным образом можно сжимать однобитный сигнал:
Code:
00000000 - конец стрима
0nnnnnnb - повторить b nnnnnn+7 раз (т.е. от 7 до 70)
1gfedcba - вывести подряд биты a,b,c,d,e,f,g

Если уходить на большее кол-во битов, то надо сразу идти на 4, т.к. 3 бита звучат не намного лучше 2-х - я просимулировал в Audacity. Плюс к этому из 16 возможных уровней при 4-х битах можно задействовать только 15 (0001...1111), чтобы иметь уровень нуля посередине (1000), а минимальное значение (0000) можно использовать как команду размножения: 0000bbbb nnnnnnnn - что будет значить повторить bbbb nnnnnnnn раз (от 1 до 256), а 00000000 всё также будет обозначать конец стрима...

Ну или 0000nnnn будет означать повторить последний уровень nnnn+3 раз (от 3 до 18)

Я тут аккуратно поработал с 3-х битным вариантом и получил более-менее приемлемый результат, который заведомо лучше 2-х битного (но подозреваю, что сжимается оно сильно хуже)

...

Сжимать его можно по алгоритму аналогичному TWOBITS:
Code:
00000xxx - конец потока
0nnnnBBB - повторить BBB nnnn+2 раз (3,4,5,6,7,8,9,10,11,12,13,14,15,16,17)
10nnnBBB - повторить BBB nnn*2+18 раз (18,20,22,24,26,28,30,32)
11CCCBBB - вывести BBB потом CCC

Я тут второе число с шагом 2 сделал - так большее покрытие будет, а нечётные значения можно догнать одиночной посылкой того же значения. Надо прикинуть какие закономерности там ещё есть кроме повторения - может удастся что-то "поумнее" сделать - типа минус 1 и продолжить N раз или плюс 1 и продолжить N раз...

Эти форматы достаточно простые - их даже аппаратно можно в реальном времени разжимать, причём на мелкой логике :roll:

_________________
:dj: https://mastodon.social/@Shaos


15 Jan 2024 19:41
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22606
Location: Silicon Valley
Reply with quote
Shaos wrote:
... а изначально эта AY музыка выглядела вот так (будучи смикшена в моно) - т.е. выше центральной линии и с забитой амплитудой:

Image
поэтому в Audacity пришлось специальным образом поработать с этим - нормализовать перед усилением и усилить с небольшим зашкалом...
Совсем забыл, что в январе я для сравнения пожал эту AY-песенку MMCM в 3 бита:


https://www.youtube.com/watch?v=h616rAIS0nw

_________________
:dj: https://mastodon.social/@Shaos


26 Apr 2024 21:57
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 17 posts ]  Go to page Previous  1, 2

Who is online

Users browsing this forum: No registered users and 76 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.