Page 3 of 3

Re: Музыкальные инструменты

Posted: Tue Apr 09, 2019 3:02 pm
by Leency
Вод код из С-- думаю понятно.

Code: Select all

:dword IO::readKPACK(dword path1)
{
	EAX = 68;
	EBX = 27;
	ECX = path1;
	$int 0x40;
	FILES_SIZE = EDX;
	buffer_data = EAX;
	return buffer_data;
}

Re: Музыкальные инструменты

Posted: Wed Apr 17, 2019 12:18 am
by Antonio
Пока сделал самое лёгкое - сжал исполняемый файл, уменьшил размер в три раза. А чтобы разобраться, как использовать сжатые сторонние ресурсы - это надо ещё не один день сидеть.

Re: Музыкальные инструменты

Posted: Thu Apr 18, 2019 5:46 pm
by Leency
Ноты

Re: Музыкальные инструменты

Posted: Thu Apr 18, 2019 8:52 pm
by Antonio
Leency wrote:Ноты
Эм... Что имелось ввиду? Добавить ещё пятую и шестую октавы?

Re: Музыкальные инструменты

Posted: Thu Apr 18, 2019 9:46 pm
by Kopa

Re: Музыкальные инструменты

Posted: Fri Apr 19, 2019 1:38 am
by Leency
Можно вывести картинку с клавишами от фортепиано и на месте клавиш создать невидимые кнопки => т.е. как бы клавиши пианино можно будет нажимать. Дизигн)

Re: Музыкальные инструменты

Posted: Sun Apr 28, 2019 11:26 pm
by Antonio
То есть сделать кнопки красивыми, но статичными?
Тут без анимации видимо не обойдется.

Re: Музыкальные инструменты

Posted: Sun Apr 28, 2019 11:28 pm
by Asper
Тут нужно как минимум две картинки, с нажатыми клавишами и в исходном положении.

Re: Музыкальные инструменты

Posted: Mon Apr 29, 2019 11:57 am
by Leency
1. Можно две картинки.

2. Можно сделать одну картинку с палитрой. Выводить меняя в палитре цвет. Так сделано в MOUSECFG.

Code: Select all

:byte panels_img_data[] = FROM "mouse_image.raw";

#define red    0xff0000
#define yellow 0xfff600
#define white  0xffffff
#define dgrey  0x2d353d

:struct IMG_PAL{ dword back, shad1, contour, left,  right, middle, mwhite; }
         pal = { 0xF0F2F3,0xABB0B2, dgrey,   white, white, dgrey,  white  };

void DrawMouseImage(dword l,r,m,v) {
	#define IMG_W 59
	#define IMG_H 101

	IF (l) pal.left = red;
	IF (m) pal.middle = red;
	IF (r) pal.right = red;
	IF (v) pal.middle = yellow;

	PutPaletteImage(#panels_img_data,IMG_W,IMG_H,18+30,18+15,8,#pal);
	pal.left = pal.right = white;
	pal.middle = dgrey;
	IF (v) {
		pause(10);
		DrawMouseImage(l,r,m,0);
	}
}

Re: Музыкальные инструменты

Posted: Mon May 06, 2019 11:49 am
by Leency
Antonio wrote:Новая версия. PIANO4
Пропустил эту версию. Думаю, программа готова для добавления в дистрибутив. Уже залил на SVN: /programs/media/piano

Re: Музыкальные инструменты

Posted: Fri May 10, 2019 8:42 pm
by Leency
Я добавил Пианино в русскую версию IMG и сделал код немного более гибким.

Antonio, если будешь обновлять программу используй эту версию. Исходники в аттаче.

Re: Музыкальные инструменты

Posted: Tue May 14, 2019 10:40 am
by Leency
Добавлен перевод на английский язык.

Re: Музыкальные инструменты

Posted: Tue Oct 21, 2025 10:25 pm
by qullarwee
https://git.kolibrios.org/KolibriOS/kolibrios/issues/25

I tried to change the layout to make it clearer. You can start with z and q. You can use shift. However, I have not yet changed the description within the program.
P.S. I converted the source to UTF-8, and it seems to break the Russian language. Need to roll back.
Spoiler:

Code: Select all

;   Простой пример программы для KolibriOS
;   озвучивает код нажатой клавиши
;
;---------------------------------------------------------------------

  use32
  org    0

  db     'MENUET01'
  dd     1
  dd     START
  dd     I_END
  dd     MEM
  dd     STACKTOP
  dd     0
  dd     0

include "lang.inc" ; Language support for locales: ru_RU (CP866), en_US.
include "../../macros.inc"
include "../../KOSfuncs.inc"


START:

red:                    ; перерисовать окно

    call draw_window    ; вызываем процедуру отрисовки окна


still:
    mcall SF_WAIT_EVENT

    cmp  eax,2          ; нажата клавиша ?
    je   key            ; если да - на key
    cmp  eax,3          ; нажата кнопка ?
    je   button         ; если да - на button
    cmp  eax,1          ; перерисовать окно ?
    je   red            ; если да - на метку red

    jmp  still          ; если другое событие - в начало цикла



;---------------------------------------------------------------------


  key:                  ; нажата клавиша на клавиатуре
    mcall SF_GET_KEY             ; считать код символа (в ah)
        cmp   ah, 'z'        ; First
        jnz   @f
        mov   ah, 0x01
        jmp   p
    @@:
        cmp   ah, 's'
        jnz   @f
        mov   ah, 0x02
        jmp   p
    @@:
        cmp   ah, 'x'
        jnz   @f
        mov   ah, 0x03
        jmp   p
    @@:
        cmp   ah, 'd'
        jnz   @f
        mov   ah, 0x04
        jmp   p
    @@:
        cmp   ah, 'c'
        jnz   @f
        mov   ah, 0x05
        jmp   p
    @@:
        cmp   ah, 'v'
        jnz   @f
        mov   ah, 0x06
        jmp   p
    @@:
        cmp   ah, 'g'
        jnz   @f
        mov   ah, 0x07
        jmp   p
    @@:
        cmp   ah, 'b'
        jnz   @f
        mov   ah, 0x08
        jmp   p
    @@:
        cmp   ah, 'h'
        jnz   @f
        mov   ah, 0x09
        jmp   p
    @@:
        cmp   ah, 'n'
        jnz   @f
        mov   ah, 0x0a
        jmp   p
    @@:
        cmp   ah, 'j'
        jnz   @f
        mov   ah, 0x0b
        jmp   p
    @@:
        cmp   ah, 'm'
        jnz   @f
        mov   ah, 0x0c
        jmp   p
    @@:
        cmp   ah, 'Z'        ; Second
        jnz   @f
        mov   ah, 0x11
        jmp   p
    @@:
        cmp   ah, 'S'
        jnz   @f
        mov   ah, 0x12
        jmp   p
    @@:
        cmp   ah, 'X'
        jnz   @f
        mov   ah, 0x13
        jmp   p
    @@:
        cmp   ah, 'D'
        jnz   @f
        mov   ah, 0x14
        jmp   p
    @@:
        cmp   ah, 'C'
        jnz   @f
        mov   ah, 0x15
        jmp   p
    @@:
        cmp   ah, 'V'
        jnz   @f
        mov   ah, 0x16
        jmp   p
    @@:
        cmp   ah, 'G'
        jnz   @f
        mov   ah, 0x17
        jmp   p
    @@:
        cmp   ah, 'B'
        jnz   @f
        mov   ah, 0x18
        jmp   p
    @@:
        cmp   ah, 'H'
        jnz   @f
        mov   ah, 0x19
        jmp   p
    @@:
        cmp   ah, 'N'
        jnz   @f
        mov   ah, 0x1a
        jmp   p
    @@:
        cmp   ah, 'J'
        jnz   @f
        mov   ah, 0x1b
        jmp   p
    @@:
        cmp   ah, 'M'
        jnz   @f
        mov   ah, 0x1c
        jmp   p
    @@:
        cmp   ah, '<'
        jnz   @f
        mov   ah, 0x21
        jmp   p
    @@:
        cmp   ah, 'q'     ; Third
        jnz   @f
        mov   ah, 0x21
        jmp   p
    @@:
        cmp   ah, '2'
        jnz   @f
        mov   ah, 0x22
        jmp   p
    @@:
        cmp   ah, 'w'
        jnz   @f
        mov   ah, 0x23
        jmp   p
    @@:
        cmp   ah, '3'
        jnz   @f
        mov   ah, 0x24
        jmp   p
    @@:
        cmp   ah, 'e'
        jnz   @f
        mov   ah, 0x25
        jmp   p
    @@:
        cmp   ah, 'r'
        jnz   @f
        mov   ah, 0x26
        jmp   p
    @@:
        cmp   ah, '5'
        jnz   @f
        mov   ah, 0x27
        jmp   p
    @@:
        cmp   ah, 't'
        jnz   @f
        mov   ah, 0x28
        jmp   p
    @@:
        cmp   ah, '6'
        jnz   @f
        mov   ah, 0x29
        jmp   p
    @@:
        cmp   ah, 'y'
        jnz   @f
        mov   ah, 0x2a
        jmp   p
    @@:
        cmp   ah, '7'
        jnz   @f
        mov   ah, 0x2b
        jmp   p
    @@:
        cmp   ah, 'u'
        jnz   @f
        mov   ah, 0x2c
        jmp   p
    @@:
        cmp   ah, 'Q'     ; Fourth
        jnz   @f
        mov   ah, 0x31
        jmp   p
    @@:
        cmp   ah, '@'
        jnz   @f
        mov   ah, 0x32
        jmp   p
    @@:
        cmp   ah, 'W'
        jnz   @f
        mov   ah, 0x33
        jmp   p
    @@:
        cmp   ah, '#'
        jnz   @f
        mov   ah, 0x34
        jmp   p
    @@:
        cmp   ah, 'E'
        jnz   @f
        mov   ah, 0x35
        jmp   p
    @@:
        cmp   ah, 'R'
        jnz   @f
        mov   ah, 0x36
        jmp   p
    @@:
        cmp   ah, '%'
        jnz   @f
        mov   ah, 0x37
        jmp   p
    @@:
        cmp   ah, 'T'
        jnz   @f
        mov   ah, 0x38
        jmp   p
    @@:
        cmp   ah, '^'
        jnz   @f
        mov   ah, 0x39
        jmp   p
    @@:
        cmp   ah, 'Y'
        jnz   @f
        mov   ah, 0x3a
        jmp   p
    @@:
        cmp   ah, '&'
        jnz   @f
        mov   ah, 0x3b
        jmp   p
    @@:
        cmp   ah, 'U'
        jnz   @f
        mov   ah, 0x3c
        jmp   p
    @@:
        cmp   ah, 'I'
        jnz   @f
        mov   ah, 0x41
        jmp   p
    @@:
        jmp   still

  p:
    mov  [M+1], ah  ; записать код символа как код ноты

    ; функция 55-55: системный динамик ("PlayNote")
    ;   esi - адрес мелодии

       mov  eax,SF_SPEAKER_PLAY
       mov  ebx,eax
       mov  esi,M
       int  0x40

    ; или коротко:
    ;mcall SF_SPEAKER_PLAY, , , , Music

    jmp  still          ; вернуться к началу цикла


;---------------------------------------------------------------------

  button:
    mcall SF_GET_BUTTON

        cmp  ah, 0xa1       ; button 1
        jnz  @f
        mov  ah, 0x01
        jmp  p
    @@:
        cmp  ah, 0x02       ; button 2
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x03       ; button 3
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x04
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x05
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x06
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x07
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x08       ; button 8
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x09
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x0a       ; button 10
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x0b
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x0c       ; button 12
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x11
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x12
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x13
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x14
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x15
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x16
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x17
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x18
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x19
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x1a
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x1b
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x1c
        jnz  @f
        jmp  p
    @@:

        cmp  ah, 0x21       ; button 1
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x22
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x23       ; button 3
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x24
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x25       ; button 5
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x26
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x27       ; button 7
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x28
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x29       ; button 9
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x2a
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x2b       ; button 11
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x2c
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x31
        jnz  @f
        jmp  p

    @@:
        cmp  ah, 0x32
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x33
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x34
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x35
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x36
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x37
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x38
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x39
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x3a
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x3b
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x3c
        jnz  @f
        jmp  p
    @@:
        cmp  ah, 0x41
        jnz  @f
        jmp  p
    @@:

    cmp   ah, 1         ; если НЕ нажата кнопка с номером 1,
    jne   still         ;  вернуться

  .exit:
    mcall SF_TERMINATE_PROCESS   ; иначе конец программы


;---------------------------------------------------------------------
;---  ОПРЕДЕЛЕНИЕ И ОТРИСОВКА ОКНА  ----------------------------------
;---------------------------------------------------------------------

WHITE_W=48   ; While key width
BLACK_W=30   ; Black key width
BLACK_X=34   ; Black key X offset

draw_window:

    mcall SF_REDRAW, SSF_BEGIN_DRAW       ; сообщить ОС о начале отрисовки

    mcall SF_STYLE_SETTINGS, SSF_GET_COLORS, sc,sizeof.system_colors


    mov   edx, [sc.work]         ; цвет фона
    or    edx, 0x33000000        ; и тип окна 3
    mcall SF_CREATE_WINDOW, <20,WHITE_W*15+9>, <200,250>, , ,caption

    mcall SF_DEFINE_BUTTON, <WHITE_W*0,WHITE_W>, <0,100>, 0x21, 0xff7a74
    mcall , <WHITE_W*1,WHITE_W>, <0,100>, 0x23, 0x907040
    mcall , <WHITE_W*2,WHITE_W>, , 0x25, 0xa08050
    mcall , <WHITE_W*3,WHITE_W>, , 0x26, 0xb09060
    mcall , <WHITE_W*4,WHITE_W>, , 0x28, 0xc0a070
    mcall , <WHITE_W*5,WHITE_W>, , 0x2a, 0xd0b080
    mcall , <WHITE_W*6,WHITE_W>, , 0x2c, 0xe0c090
    mcall , <WHITE_W*7,WHITE_W>, , 0x31, 0xffa97c
    mcall , <WHITE_W*8,WHITE_W>, , 0x33, 0xaf8d8d
    mcall , <WHITE_W*9,WHITE_W>, , 0x35, 0xbf9d9d
    mcall , <WHITE_W*10,WHITE_W>, , 0x36, 0xcfadad
    mcall , <WHITE_W*11,WHITE_W>, , 0x38, 0xdfbdbd
    mcall , <WHITE_W*12,WHITE_W>, , 0x3a, 0xefcdcd
    mcall , <WHITE_W*13,WHITE_W>, , 0x3c, 0xffdddd
    mcall , <WHITE_W*14,WHITE_W>, , 0x41, 0xffe558

    mcall , <WHITE_W*0+BLACK_X,BLACK_W>, <0,50>, 0x22, 0x221100
    mcall , <WHITE_W*1+BLACK_X,BLACK_W>, , 0x24,
    mcall , <WHITE_W*3+BLACK_X,BLACK_W>, , 0x27,
    mcall , <WHITE_W*4+BLACK_X,BLACK_W>, , 0x29,
    mcall , <WHITE_W*5+BLACK_X,BLACK_W>, , 0x2b,
    mcall , <WHITE_W*7+BLACK_X,BLACK_W>, , 0x32,
    mcall , <WHITE_W*8+BLACK_X,BLACK_W>, , 0x34,
    mcall , <WHITE_W*10+BLACK_X,BLACK_W>, , 0x37,
    mcall , <WHITE_W*11+BLACK_X,BLACK_W>, , 0x39,
    mcall , <WHITE_W*12+BLACK_X,BLACK_W>, , 0x3b,

    mcall , <WHITE_W*0,WHITE_W>, <100,100>, 0xa1, 0x702050
    mcall , <WHITE_W*1,WHITE_W>, , 0x03, 0x683638
    mcall , <WHITE_W*2,WHITE_W>, , 0x05, 0x784648
    mcall , <WHITE_W*3,WHITE_W>, , 0x06, 0x885658
    mcall , <WHITE_W*4,WHITE_W>, , 0x08, 0x986668
    mcall , <WHITE_W*5,WHITE_W>, , 0x0a, 0xa87678
    mcall , <WHITE_W*6,WHITE_W>, , 0x0c, 0xb88688
    mcall , <WHITE_W*7,WHITE_W>, , 0x11, 0x880040
    mcall , <WHITE_W*8,WHITE_W>, , 0x13, 0x90622b
    mcall , <WHITE_W*9,WHITE_W>, , 0x15, 0xa0723b
    mcall , <WHITE_W*10,WHITE_W>, , 0x16, 0xb0824b
    mcall , <WHITE_W*11,WHITE_W>, , 0x18, 0xc0925b
    mcall , <WHITE_W*12,WHITE_W>, , 0x1a, 0xd0a26b
    mcall , <WHITE_W*13,WHITE_W>, , 0x1c, 0xe0b27b
    mcall , <WHITE_W*14,WHITE_W>, , 0x21, 0xff7a74

    mcall , <WHITE_W*0+BLACK_X,BLACK_W>, <100,50>, 0x02, 0x221100
    mcall , <WHITE_W*1+BLACK_X,BLACK_W>, , 0x04,
    mcall , <WHITE_W*3+BLACK_X,BLACK_W>, , 0x07,
    mcall , <WHITE_W*4+BLACK_X,BLACK_W>, , 0x09,
    mcall , <WHITE_W*5+BLACK_X,BLACK_W>, , 0x0b,
    mcall , <WHITE_W*7+BLACK_X,BLACK_W>, , 0x12,
    mcall , <WHITE_W*8+BLACK_X,BLACK_W>, , 0x14,
    mcall , <WHITE_W*10+BLACK_X,BLACK_W>, , 0x17,
    mcall , <WHITE_W*11+BLACK_X,BLACK_W>, , 0x19,
    mcall , <WHITE_W*12+BLACK_X,BLACK_W>, , 0x1b,


    ; вывод текстовой строки
    mov   ecx, [sc.work_text]    ; цвет фона
    or    ecx, 0x90000000        ; и тип строки
    mcall SF_DRAW_TEXT, <50, 205>, , message
    mcall , <10, 235>, , message1
    mcall , <10, 260>, , message2
    mcall , <10, 285>, , message3
    mcall , <10, 310>, , message4
    mcall , <16, 185>, , t_notes

    mcall SF_REDRAW, SSF_END_DRAW                  ; закончили рисовать

    ret


;---------------------------------------------------------------------
;---  ДАННЫЕ ПРОГРАММЫ  ----------------------------------------------
;---------------------------------------------------------------------


; Второй байт в M (Music) изменяется нажатием клавиши

M:
  db  0x90, 0x30, 0


sc system_colors

if lang eq ru_RU
  message  db 'Справка: щёлкните 2 раза на заголовке.',0
  message1 db 'Нажмите любую клавишу в английской раскладке - ',0
  message2 db 'должен звучать встроенный динамик компьютера (не колонки!)',0
  message3 db 'Нота "До" - клавиши V,Tab,U,Enter',0
  message4 db 'при включении Caps Lock - клавиши V,Q,I.',0
  t_notes  db 'ДО    РЕ    МИ    ФА   СОЛЬ   ЛЯ    СИ    ДО',0
  caption  db 'Детское пианино',0
else ; Default to en_US
  message  db 'Click twice on the window header to see help.',0
  message1 db 'Press any key in English keyboard layout - ',0
  message2 db 'so you will hear the sound from the PC-speaker (Beeper)',0
  message3 db 'Note "C" is the key V,Tab,U,Enter',0
  message4 db 'and when Caps Lock is on then the keys V,Q,I.',0
  t_notes  db 'C     D     E     F     G     A     B     C ',0
  caption  db 'Toy piano',0
end if

;---------------------------------------------------------------------

I_END:
  rb 4096
align 16
STACKTOP:
MEM:

Re: Музыкальные инструменты

Posted: Sat Dec 20, 2025 4:10 pm
by Burer
qullarwee wrote: Tue Oct 21, 2025 10:25 pm https://git.kolibrios.org/KolibriOS/kolibrios/issues/25

I tried to change the layout to make it clearer. You can start with z and q. You can use shift. However, I have not yet changed the description within the program.
P.S. I converted the source to UTF-8, and it seems to break the Russian language. Need to roll back.
Hello, and thank you for your work!
I am working on full Piano source code refactoring right now, so we can cooperate on it together.
Please, write me in Telegram (@taldariner) or Discord (Burer on KOS server, or just taldarin_).