nedoPC.org

Community for electronics hobbyists, established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 06 Oct 2024 21:48



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

Joined: 08 Jan 2003 23:22
Posts: 23357
Location: Silicon Valley
Reply with quote
Написал я тут мимоходом проигрыватель двухбитного звука с ROM-диска (мой формат до 1 МБ) - старший бит берётся с INTE, а младший - выход мафона C0 клавиатурной ВВ55 (ну или два младших бита порта C клавиатурной ВВ55 можно задействовать - звук будет чуть почище - плеер умеет и так, и эдак):
Code:
\ ***************************************
\ *  TWOBITS PLAYER FOR RK-86 BY SHAOS  *
\ *    THIS CODE IS PUBLIC DOMAIN !!!   *
\ *-------------------------------------*
\ * CREATED JAN 2014 | UPDATED SEP 2024 *
\ ***************************************
\ 80.62 TICKS PER SAMPLE FOR 22050 HZ
\ OR 241.87 PER 3 SAMPLES (WITHOUT DMA):
\ 80.62 X 1 ~ 81
\ 80.62 X 2 ~ 161
\ 80.62 X 3 ~ 242

ORG 0

\ DB 0,4,0,255

MVI_E, #00
LXI_H, #0100
CALL TWOBITS
MVI_A, #FF
STA #A002
HLT

\ 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

\ PLAY TWOBITS COMPRESSED SOUND
\ HL - ADDRESS ON ROM-DISK (#7FFF MAX)
\ E - PAGE ON ROM-DISK (#FF MAX)
TWOBITS: MVI_A, #80
STA #E008
XRA_A
STA #A002
MOV_A,E
STA #A001
MVI_A, #80
STA #A002
MVI_C, 2
SHLD #A001
GO0: \ 207 TICKS FROM PREVIOUS CYCLE (-36)
INX_H ; 5 -> 212 (-31)
LDA #A000 ; 13 -> 225 (-18)
MOV_B,A ; 5 -> 230 (-13)
STA #8002 ; 13 -> 243/0* (START HERE)
ANA_C ; 4 -> 4
JNZ SET1 ; 10 -> 14
NOP ; DI ; 4 -> 18**
JMP GO2 ; 10 -> 28
SET1:
NOP ; EI ; 4 -> 18**
JMP GO2 ; 10 -> 28
\ COUNTER (4...50) OR STOP (0)
COUNT1: MOV_A,B ; 47+5 -> 52
ORA_A ; 4 -> 56
RZ ; 5(11) -> 61
COUNT2: MOV_A,B ; 61+5 -> 66
CMP_A ; 4 -> 70
RAR ; 4 -> 74
CMP_A ; 4 -> 78
RAR ; 4 -> 82
INR_A ; 5 -> 87
MVI_B, #FF ; 7 -> 94
MVI_B, 4 ; 7 -> 101
CLOOP: \ 15*4=60 -> 161
DCR_B ; 5
JNZ CLOOP ; 10
COUNTER: \ 161 (-81) *
NOP ; 4 -> 165 (-77)
DCR_A ; 5 -> 170 (-72)
JNZ COUNTER_ ; 10 -> 180 (-62)
SHLD #A001 ; 16 -> 196 (-46)
JMP GO0 ; 10 -> 206 (-36)
COUNTER_: \ 180
MVI_B, 3 ; 7 -> 187
JMP CLOOP ; 10 -> 197 (+15*3=242)
GO2:
MOV_A,B ; 5 -> 33
RLC ; 4 -> 37
JNC COUNT1 ; 10 -> 47
RLC ; 4 -> 51
JNC COUNT2 ; 10 -> 61
MOV_A,B ; 5 -> 66
RRC ; 4 -> 70
RRC ; 4 -> 74
STA #8002 ; 13 -> 87* (+6)
ANA_C ; 4 -> 91
JNZ SET2 ; 10 -> 101
NOP ; DI ; 4 -> 105**
JMP GO3 ; 10 -> 115
SET2:
NOP ; EI ; 4 -> 105**
MOV_A,H ; 5 -> 110
MOV_A,H ; 5 -> 115
GO3:
ORA_H ; 4 -> 119
JP NONEXTPG ; 10 -> 129
\ NEXT PAGE
INR_E
XRA_A
STA #A002
MOV_A,E
STA #A001
MVI_A, #80
STA #A002
LXI_H, 0
NONEXTPG:
SHLD #A001 ; 16 -> 145
MOV_A,B ; 5 -> 150
RRC ; 4 -> 154
RRC ; 4 -> 158
RRC ; 4 -> 162
RRC ; 4 -> 166
STA #8002 ; 13 -> 179* (+18)
ANA_C ; 4 -> 183
JNZ SET3 ; 10 -> 193
NOP ; DI ; 4 -> 197*
JMP GO0 ; 10 -> 207
SET3:
NOP ; EI ; 4 -> 197**
JMP GO0 ; 10 -> 207

Пока в слегка модифицированном эмуляторе Emu80 запускаюсь (там 2-битный звук и квазидиск добавлен) - играет :o

P.S. Как можно видеть я тут выдумал некую технологию сжатия, которая сжимает чиптюновую музыку в 2-3 раза по сравнению с непожатыми четырьмя сэмплами на байт - битрейт получается чуть меньше 15-20 килобит/сек при частоте 22050 Гц (это примерно 2-2.5 килобайта в секунду, т.е. в 1 мегабайт квазидиска может влезть до 9 минут звука).

P.P.S. В сентябре 2024 года слегка поправил исходник, чтобы работало с ромдиском по схеме vinxru и закомментил EI/DI (точнее заменил на NOP-ы) - пусть играет только через C1-C0 (эдакий двухбитный ковокс получается). Эти rom-ы надо кидать в онлайн эмулятор от vital72 где включён в настройках 2-битный covox (PC1..0) и запускать на исполнение командами R,FF и G


Attachments:
EvilWezil-Carol_of_the_Bells-2bit.7z [425.57 KiB]
Downloaded 3 times
RoccoW-Create_A_Song_in_A_Day_Challenge_1-2bit.7z [192.11 KiB]
Downloaded 3 times
Rolemusic-Savage_Steel_Fun_Club-2bit.7z [192.74 KiB]
Downloaded 3 times
Rolemusic-Crush_At_Maracas_Bar-2bit.7z [235.92 KiB]
Downloaded 3 times

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973
30 Jan 2014 00:20
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23357
Location: Silicon Valley
Reply with quote
Shaos wrote:
Как можно видеть я тут выдумал некую технологию сжатия, которая сжимает чиптюновую музыку в 2-3 раза по сравнению с непожатыми четырьмя сэмплами на байт - битрейт получается чуть меньше 15-20 килобит/сек при частоте 22050 Гц...


А вот обычная современная музыка сжимается не сильно хорошо:

Code:
01 - Gangnam Style.r8u3:
Uncompressed size - 1187823 bytes (215 seconds)
Compressed size - 823892 bytes (50% uncompressable) K=1.44
Bitrate - 29.9 kbit/sec


Но в 1-мегабайтный ROM-диск влезет ;)

P.S. Chiptunes сжимаются не в пример лучше:
Code:
Rolemusic_-_03_-_Crush_At_Maracas_Bar.r8u:
Uncompressed size - 1117007 bytes (202 seconds)
Compressed size - 354963 bytes (24% uncompressable) K=3.15
Bitrate - 13.7 kbit/sec
это уже порядка 10 минут музыки в 1 мегабайте :o

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


30 Jan 2014 00:47
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
Chiptunes сжимаются не в пример лучше

А что такое "Chiptunes" или "чиптюновая музыка"?

_________________
iLavr


30 Jan 2014 08:49
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23357
Location: Silicon Valley
Reply with quote
Lavr wrote:
Shaos wrote:
Chiptunes сжимаются не в пример лучше

А что такое "Chiptunes" или "чиптюновая музыка"?


Поищи на ютюбе :)
Это всё то, что генерится старыми-добрыми музыкальными чипами с древних компов и консолей (тот же AY, SID и др.)
P.S. Нынче популярно играть чиптюновую музыку вживую на геймбоях через LSDJ ;)

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


30 Jan 2014 09:04
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Но если это просто цифровая музыка, то чем она отличается
от "обычной современной музыки", раз уж у тебя так
наглядно получаются различия в сжатии?

_________________
iLavr


30 Jan 2014 09:35
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23357
Location: Silicon Valley
Reply with quote
Post 
Lavr wrote:
Но если это просто цифровая музыка, то чем она отличается
от "обычной современной музыки", раз уж у тебя так
наглядно получаются различия в сжатии?


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

P.S. вообще можно пойти ещё дальше и кодировать не каждый отдельный импульс, а частоту - но тогда придётся входной сигнал в спектр фурье раскладывать и т.д.

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


30 Jan 2014 09:55
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Shaos wrote:
в чиптюнсах очень много прямоугольных импульсов, которые очень хорошо сжимаются RLE алгоритмом - один и тот же уровень сигнала (а у нас их четыре в случае 2 битов) сохраняется в течении энного количества временных интервалов

А то, что ты в сравнении назвал "обычной современной музыкой" - это просто оцифрованный обычный звук?
В смысле - набор амплитуд отсчетов?

_________________
iLavr


30 Jan 2014 10:05
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23357
Location: Silicon Valley
Reply with quote
Post 
Lavr wrote:
Shaos wrote:
в чиптюнсах очень много прямоугольных импульсов, которые очень хорошо сжимаются RLE алгоритмом - один и тот же уровень сигнала (а у нас их четыре в случае 2 битов) сохраняется в течении энного количества временных интервалов

А то, что ты в сравнении назвал "обычной современной музыкой" - это просто оцифрованный обычный звук?
В смысле - набор амплитуд отсчетов?


В современной музыке много шумовых эффектов - они фигово сжимаются

А так любой звук это набор амплитуд, оцифрованных с некоторой погрешностью ;)

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


30 Jan 2014 10:08
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Shaos wrote:
А так любой звук это набор амплитуд, оцифрованных с некоторой погрешностью ;)

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

_________________
iLavr


30 Jan 2014 10:21
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23357
Location: Silicon Valley
Reply with quote
Post 
Lavr wrote:
Shaos wrote:
А так любой звук это набор амплитуд, оцифрованных с некоторой погрешностью ;)

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


На входе у меня моно сигнал, сосотящий из 22050-герцовых отсчётов (т.е. длительность каждого отсчёта равна 1/22050=45.35 мкс), оцифрованных в 2 бита (4 уровня) - я иду от начала до конца и выявляю повторяющиеся элементы, кодируя вот таким макаром:
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

Кодируя неповторяющиеся элементы по три в байт, у которого два старших бита 11, а повторяющиеся указав кол-во повторений (от 4 до 50 - минус 3 в 6 бит, у которых старшие два бита никогда не равны 11) и непосредственно сам уровень сигнала (ещё 2 бита) - эдакий отвосьмибиченный RLE :)

И это даёт сжатие на реальных аудио-файлах в 1.5-4 раза (но чаще в пределах 2-3) по сравнению с обычной упаковкой "в лоб" - четыре 2-битовых отсчёта на байт...

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


30 Jan 2014 10:25
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23357
Location: Silicon Valley
Reply with quote
Post 
Аналогичным образом можно сжимать однобитный сигнал:
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 всё также будет обозначать конец стрима...

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


30 Jan 2014 20:03
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23357
Location: Silicon Valley
Reply with quote
Если через 10 лет кому-то вдруг стало интересно, как в идеальных условиях может звучать 2-битная музыка 22050 Гц, то вот вам живой пример :lol:


https://youtu.be/S9ven10lhnA

В неидеальных условиях (если не отключать ПДП на РК, чтобы на экране хоть что-то отображалось) будут искажения - т.к. биты выдаются не одномоментно и ПДП будет мешать...

P.S. Вообще 10 лет назад я подготовил 18 треков (отсортировано по времени создания):
Code:
-rw-r--r-- 1 shaos shaos 4468031 2014-01-14 20:32:23.000000000 -0800 Rolemusic_-_03_-_Crush_At_Maracas_Bar.r8u
-rw-r--r-- 1 shaos shaos 1695744 2014-01-14 20:43:10.000000000 -0800 Noisewaves_-_09_-_Last_Xmas.r8u
-rw-r--r-- 1 shaos shaos 7363008 2014-01-14 20:54:14.000000000 -0800 Dub_Terminator_-_03_-_Dope_magnets.r8u
-rw-r--r-- 1 shaos shaos 7062336 2014-01-14 21:08:25.000000000 -0800 Dub_Terminator_-_02_-_Native_people_dubstep_mix.r8u
-rw-r--r-- 1 shaos shaos 4267584 2014-01-14 21:17:07.000000000 -0800 EvilWezil_-_03_-_Carol_of_the_Bells.r8u
-rw-r--r-- 1 shaos shaos 2854656 2014-01-14 21:27:23.000000000 -0800 RoccoW_-_Create_A_Song_in_A_Day_Challenge_1.r8u
-rw-r--r-- 1 shaos shaos 5417280 2014-01-14 21:32:15.000000000 -0800 Rolemusic_-_Savage_Steel_Fun_Club.r8u
-rw-r--r-- 1 shaos shaos 5633280 2014-01-15 00:15:31.000000000 -0800 01 - It's A Rainy Day.r8u
-rw-r--r-- 1 shaos shaos 4291200 2014-01-15 00:21:46.000000000 -0800 01 - Gentleman.r8u
-rw-r--r-- 1 shaos shaos 5367168 2014-01-15 00:27:25.000000000 -0800 02 - Scary Monsters And Nice Sprites.r8u
-rw-r--r-- 1 shaos shaos 4217472 2014-01-15 00:31:30.000000000 -0800 01 - Cinema (feat. Gary Go) (Skrillex Radio Edit).r8u
-rw-r--r-- 1 shaos shaos 4841280 2014-01-15 00:39:24.000000000 -0800 01 - Gangnam Style.r8u
-rw-r--r-- 1 shaos shaos 3798144 2014-01-17 02:32:50.000000000 -0800 kakos_nonos-gummy_stub.r8u
-rw-r--r-- 1 shaos shaos 3212936 2014-01-17 02:43:53.000000000 -0800 mmcm-when_you_were_a_hero.r8u
-rw-r--r-- 1 shaos shaos 4052168 2014-01-17 02:51:52.000000000 -0800 mmcm-summer_night.r8u
-rw-r--r-- 1 shaos shaos 1977416 2014-01-17 03:19:04.000000000 -0800 hacker_vbi_rva-together.r8u
-rw-r--r-- 1 shaos shaos 4713984 2014-01-18 00:44:41.000000000 -0800 01 - The Fox (What Does The Fox Say_).r8u
-rw-r--r-- 1 shaos shaos 5742720 2014-01-18 02:11:59.000000000 -0800 02 - What If.r8u

из которых сделал 15 сжатых блобов (надо досжимать остатки):

Code:
-rw-r--r-- 1 shaos shaos  339242 2014-01-29 23:21:05.000000000 -0800 mmcm-when_you_were_a_hero.bin
-rw-r--r-- 1 shaos shaos  443983 2014-01-29 23:21:30.000000000 -0800 Rolemusic_-_Savage_Steel_Fun_Club.bin
-rw-r--r-- 1 shaos shaos  785409 2014-01-29 23:27:41.000000000 -0800 01 - Gentleman.bin
-rw-r--r-- 1 shaos shaos  355220 2014-01-29 23:31:59.000000000 -0800 Rolemusic_-_03_-_Crush_At_Maracas_Bar.bin
-rw-r--r-- 1 shaos shaos  824149 2014-01-29 23:40:49.000000000 -0800 01 - Gangnam Style.bin
-rw-r--r-- 1 shaos shaos  483943 2014-01-29 23:47:10.000000000 -0800 mmcm-summer_night.bin
-rw-r--r-- 1 shaos shaos  188315 2014-01-29 23:57:26.000000000 -0800 hacker_vbi_rva-together.bin
-rw-r--r-- 1 shaos shaos  137275 2014-01-29 23:59:34.000000000 -0800 kakos_nonos-gummy_stub.bin
-rw-r--r-- 1 shaos shaos  267861 2014-01-30 00:09:06.000000000 -0800 RoccoW_-_Create_A_Song_in_A_Day_Challenge_1.bin
-rw-r--r-- 1 shaos shaos  230324 2014-01-30 00:16:49.000000000 -0800 RoccoW_-_Create_A_Song_in_A_Day_Challenge_3.bin
-rw-r--r-- 1 shaos shaos  239276 2014-01-30 00:17:15.000000000 -0800 Noisewaves_-_09_-_Last_Xmas.bin
-rw-r--r-- 1 shaos shaos  967334 2014-01-30 16:29:59.000000000 -0800 01 - The Fox (What Does The Fox Say_).bin
-rw-r--r-- 1 shaos shaos 1038762 2014-01-30 16:35:16.000000000 -0800 Dub_Terminator_-_03_-_Dope_magnets.bin
-rw-r--r-- 1 shaos shaos 1542514 2014-01-30 16:49:05.000000000 -0800 Dub_Terminator_-_02_-_Native_people_dubstep_mix.bin
-rw-r--r-- 1 shaos shaos  707019 2014-01-30 16:54:58.000000000 -0800 EvilWezil_-_03_-_Carol_of_the_Bells.bin

и как можно видеть в 1 мег не влезает только Dub_Terminator_-_02_-_Native_people_dubstep_mix, который 5 мин 20 сек длиной (и плохо сжимается)...

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


08 Jan 2024 03:42
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23357
Location: Silicon Valley
Reply with quote
Алгоритм у меня был следующий - я брал 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


P.S. Дожимаю недожатое:
Code:
$ ./musconv 02\ -\ What\ If.r8u
02 - What If.r8u:
Uncompressed size - 1435680 bytes (260 seconds)
Compressed size - 955197 bytes (44% uncompressable) K=1.50
Bitrate - 28.7 kbit/sec
Time  32K - 16 seconds
Time 128K - 45 seconds
Time 512K - 170 seconds

$ ./musconv 02\ -\ Scary\ Monsters\ And\ Nice\ Sprites.r8u
02 - Scary Monsters And Nice Sprites.r8u:
Uncompressed size - 1341792 bytes (243 seconds)
Compressed size - 883283 bytes (39% uncompressable) K=1.52
Bitrate - 28.4 kbit/sec
Time  32K - 13 seconds
Time 128K - 43 seconds
Time 512K - 156 seconds

$ ./musconv 01\ -\ Cinema\ \(feat.\ Gary\ Go\)\ \(Skrillex\ Radio\ Edit\).r8u
01 - Cinema (feat. Gary Go) (Skrillex Radio Edit).r8u:
Uncompressed size - 1054368 bytes (191 seconds)
Compressed size - 777758 bytes (44% uncompressable) K=1.36
Bitrate - 31.8 kbit/sec
Time  32K - 10 seconds
Time 128K - 39 seconds
Time 512K - 142 seconds

$ ./musconv 01\ -\ It\'s\ A\ Rainy\ Day.r8u
01 - It's A Rainy Day.r8u:
Uncompressed size - 1408320 bytes (255 seconds)
Compressed size - 648033 bytes (33% uncompressable) K=2.17
Bitrate - 19.8 kbit/sec
Time  32K - 16 seconds
Time 128K - 61 seconds
Time 512K - 236 seconds
(чото килобитность похоже неправильно считается для вывода - надо будет поглядеть исходник повнимательнее)

Code:
-rw-r--r-- 1 shaos shaos 955198 Jan  9 00:43 '02 - What If.bin'
-rw-r--r-- 1 shaos shaos 883284 Jan  9 00:45 '02 - Scary Monsters And Nice Sprites.bin'
-rw-r--r-- 1 shaos shaos 777759 Jan  9 00:51 '01 - Cinema (feat. Gary Go) (Skrillex Radio Edit).bin'
-rw-r--r-- 1 shaos shaos 648034 Jan  9 00:56 '01 - It's A Rainy Day.bin'

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


09 Jan 2024 01:40
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23357
Location: Silicon Valley
Reply with quote
Чуть иначе подготовил AY-музычку и пережал в TWOBITS:
Code:
./musconv mmcm-when_you_were_a_hero_2024.r8u 256
Offset:256
mmcm-when_you_were_a_hero_2024.r8u:
Uncompressed size - 803232 bytes (145 seconds)
Compressed size - 284583 bytes (36% uncompressable) K=2.82
Bitrate - 15.3 kbit/sec
Time  32K - 32 seconds
Time 128K - 85 seconds



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


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

Attachment:
Screenshot from 2024-01-09 02-09-29.png
Screenshot from 2024-01-09 02-09-29.png [ 83.26 KiB | Viewed 3021 times ]

поэтому в Audacity пришлось специальным образом поработать с этим - нормализовать перед усилением и усилить с небольшим зашкалом...

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


09 Jan 2024 02:57
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23357
Location: Silicon Valley
Reply with quote
Post Re:
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-х битного (но подозреваю, что сжимается оно сильно хуже):


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

Сжимать его можно по алгоритму аналогичному 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+18 раз (18,19,20,21,22,23,24,25)
11CCCBBB - вывести BBB потом CCC

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

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


14 Jan 2024 18:08
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 28 posts ]  Go to page 1, 2  Next

Who is online

Users browsing this forum: No registered users and 2 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.