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

Processing, playback of audio and video
  • Пока сделал самое лёгкое - сжал исполняемый файл, уменьшил размер в три раза. А чтобы разобраться, как использовать сжатые сторонние ресурсы - это надо ещё не один день сидеть.
    Attachments
    PIANO4 (1.19 KiB)
    Downloaded 399 times
    :?: :arrow: :idea:
  • Ноты
    Attachments
    notes.png
    notes.png (862 Bytes)
    Viewed 13490 times
    Из хаоса в космос
  • Leency wrote:Ноты
    Эм... Что имелось ввиду? Добавить ещё пятую и шестую октавы?
  • Можно вывести картинку с клавишами от фортепиано и на месте клавиш создать невидимые кнопки => т.е. как бы клавиши пианино можно будет нажимать. Дизигн)
    Из хаоса в космос
  • То есть сделать кнопки красивыми, но статичными?
    Тут без анимации видимо не обойдется.
  • Тут нужно как минимум две картинки, с нажатыми клавишами и в исходном положении.
  • 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);
    	}
    }
    Attachments
    mouse_image.png
    mouse_image.png (1.23 KiB)
    Viewed 13367 times
    Из хаоса в космос
  • Antonio wrote:Новая версия. PIANO4
    Пропустил эту версию. Думаю, программа готова для добавления в дистрибутив. Уже залил на SVN: /programs/media/piano
    Из хаоса в космос
  • Я добавил Пианино в русскую версию IMG и сделал код немного более гибким.

    Antonio, если будешь обновлять программу используй эту версию. Исходники в аттаче.
    Attachments
    piano.zip (5.03 KiB)
    Downloaded 379 times
    Из хаоса в космос
  • Добавлен перевод на английский язык.
    Attachments
    piano.zip (4.87 KiB)
    Downloaded 381 times
    Из хаоса в космос
  • 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:
  • Who is online

    Users browsing this forum: No registered users and 12 guests