Page 2 of 3

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

Posted: Fri Mar 15, 2019 2:56 pm
by Leency
Как насчет нарисовать клавиши, как у пианино, чтобы по ним можно было нажимать?)

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

Posted: Fri Mar 15, 2019 5:53 pm
by Antonio
В перспективе можно добавить. Но я сомневаюсь, что у меня получится красиво нарисовать. Пока могу добавлять квадратные кнопки, как в Forte Chimes.

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

Posted: Fri Mar 15, 2019 7:10 pm
by Leency
Вот так можно упростить и уменьшить код http://prntscr.com/mycxic или переделать на процедуру http://prntscr.com/myd6wp
В процедуру вообще можно передавать два параметра: первый для сравнения с ah, второй результирующий. Т.е. проверку проводить в процедуре.
Белый и черные прямоугольники вроде не сложно :)
или можно картинку использовать RAW 2 цветный.

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

Posted: Sat Mar 16, 2019 9:31 pm
by Antonio
Переделал по первому варианту, по второму - не получается. Добавил кнопки. Кстати, с виртуальной клавиатурой тоже работает. :)

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

Posted: Sun Mar 17, 2019 1:08 am
by Leency
Вот сделано через функцию, потести.
У меня спикер не работает, проверить не могу.

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

Posted: Mon Mar 18, 2019 7:59 pm
by Antonio
Не могу скомпилировать. В Fasm пишет mov al, [_key] error: operand sizes do not match.

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

Posted: Mon Mar 18, 2019 8:55 pm
by Leency
Попробуй добавить byte сюда http://prntscr.com/mzly76

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

Posted: Tue Mar 19, 2019 5:46 pm
by Ray
А стек обрушить не боитесь?
Spoiler:

Code: Select all

proc playnote _key, _note
	mov al, [_key]
	cmp	ah, al
	jnz	@f
	mov esi, [_note]
	mcall 55,55
	jmp still ;<<<<<<<<<<<<<<<<<
  @@:
	ret
endp

  key:			; ­ ¦ â  ª« ¢¨è  ­  ª« ¢¨ âãà¥
    mcall 2		; äã­ªæ¨ï 2 - áç¨â âì ª®¤ ᨬ¢®«  (¢ ah)

	stdcall playnote, 0x041, T07 ; A - if Caps Lock ON
	stdcall playnote, 0x05a, T08 ; Z
	stdcall playnote, 0x053, T09 ; S
	stdcall playnote, 0x058, T0a ; X
	stdcall playnote, 0x044, T0b ; D
	stdcall playnote, 0x043, T0c ; C
	stdcall playnote, 0x056, T01 ; V
	stdcall playnote, 0x047, T02 ; G
	stdcall playnote, 0x042, T03 ; B
	stdcall playnote, 0x048, T04 ; H
	stdcall playnote, 0x04e, T05 ; N
	stdcall playnote, 0x04d, T06 ; M
	stdcall playnote, 0x04b, T07 ; K
	stdcall playnote, 0x03c, T08 ; <
	stdcall playnote, 0x04c, T09 ; L
	stdcall playnote, 0x03e, T0a ; >
	stdcall playnote, 0x03a, T0b ; :
	stdcall playnote, 0x03f, T0c ; ?
	stdcall playnote, 0x022, T11 ; "
	stdcall playnote, 0x021, T0c ; key !-------
	stdcall playnote, 0x051, T11 ; key Q
	stdcall playnote, 0x040, T12 ; @
	stdcall playnote, 0x057, T13 ; W
	stdcall playnote, 0x023, T14 ; #
	stdcall playnote, 0x045, T15 ; E
	stdcall playnote, 0x052, T16 ; R
	stdcall playnote, 0x025, T17 ; %
	stdcall playnote, 0x054, T18 ; T
	stdcall playnote, 0x05e, T19 ; ^
	stdcall playnote, 0x059, T1a ; Y
	stdcall playnote, 0x026, T1b ; &
	stdcall playnote, 0x055, T1c ; U
	stdcall playnote, 0x049, T21 ; I
	stdcall playnote, 0x028, T22 ; (
	stdcall playnote, 0x04f, T23 ; O
	stdcall playnote, 0x029, T24 ; )
	stdcall playnote, 0x050, T25 ; P
	stdcall playnote, 0x07b, T26 ; {
	stdcall playnote, 0x02b, T27 ; +
	stdcall playnote, 0x07d, T28 ; }
	stdcall playnote, 0x07c, T29 ; |
	stdcall playnote, 0x061, T17 ; a - if Caps Lock OFF
	stdcall playnote, 0x07a, T18 ; z
	stdcall playnote, 0x073, T19 ; s
	stdcall playnote, 0x078, T1a ; x
	stdcall playnote, 0x064, T1b ; d
	stdcall playnote, 0x063, T1c ; c
	stdcall playnote, 0x076, T21 ; v
	stdcall playnote, 0x067, T22 ; g
	stdcall playnote, 0x062, T23 ; b
	stdcall playnote, 0x068, T24 ; h
	stdcall playnote, 0x06e, T25 ; n
	stdcall playnote, 0x06d, T26 ; m
	stdcall playnote, 0x06b, T27 ; k
	stdcall playnote, 0x02c, T28 ; ,
	stdcall playnote, 0x06c, T29 ; l
	stdcall playnote, 0x02e, T2a ; .
	stdcall playnote, 0x03b, T2b ; ;
	stdcall playnote, 0x02f, T2c ; /
	stdcall playnote, 0x027, T31 ; '
	stdcall playnote, 0x060, T2c ; `
	stdcall playnote, 0x009, T31 ; tab
	stdcall playnote, 0x031, T32 ; 1
	stdcall playnote, 0x071, T33 ; q
	stdcall playnote, 0x032, T34 ; 2
	stdcall playnote, 0x077, T35 ; w
	stdcall playnote, 0x065, T36 ; e
	stdcall playnote, 0x034, T37 ; 4
	stdcall playnote, 0x072, T38 ; r
	stdcall playnote, 0x035, T39 ; 5
	stdcall playnote, 0x074, T3a ; t
	stdcall playnote, 0x036, T3b ; 6
	stdcall playnote, 0x079, T3c ; y
	stdcall playnote, 0x075, T41 ; u
	stdcall playnote, 0x038, T42 ; 8
	stdcall playnote, 0x069, T43 ; i
	stdcall playnote, 0x039, T44 ; 9
	stdcall playnote, 0x06f, T45 ; o
	stdcall playnote, 0x070, T46 ; p
	stdcall playnote, 0x02d, T47 ; -
	stdcall playnote, 0x05b, T48 ; [
	stdcall playnote, 0x03d, T49 ; =
	stdcall playnote, 0x05d, T4a ; ]
	stdcall playnote, 0x05c, T4b ; \
	stdcall playnote, 0x008, T4c ; backspace
	stdcall playnote, 0x00d, T51 ; enter
	stdcall playnote, 0x066, T01 ; f
	stdcall playnote, 0x06a, T05 ; j
	stdcall playnote, 0x033, T08 ; 3
	stdcall playnote, 0x037, T11 ; 7
	stdcall playnote, 0x030, T15 ; 0
	stdcall playnote, 0x0b4, T10 ; home
	stdcall playnote, 0x0b5, T70 ; end
	stdcall playnote, 0x0b8, T20 ; PageUp
	stdcall playnote, 0x0b7, T70 ; PageDown
	stdcall playnote, 0x0ff, T00 ; F12
	stdcall playnote, 0x0b6, T70 ; Del


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

Posted: Tue Mar 19, 2019 7:29 pm
by Leency
Ray
Я такие тонкости не знаю, как по твоему мнению это можно исправить?

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

Posted: Tue Mar 19, 2019 10:03 pm
by Antonio
После переделки программа работает минуты две, потом звук пропадает.

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

Posted: Wed Mar 20, 2019 4:15 pm
by Ray
Leency wrote:Я такие тонкости не знаю, как по твоему мнению это можно исправить?
Либо вручную балансировать стек (так себе вариант, спагетти это не уменьшает).
Spoiler:

Code: Select all

proc playnote _key, _note
   mov al, [_key]
   cmp   ah, al
   jnz   @f
   mov esi, [_note]
   mcall 55,55
   add esp, 12 ;+
   jmp still
  @@:
   ret
endp
Либо использовать таблицу, вместо кучи вызовов.
Spoiler:

Code: Select all

  key:			; ­ ¦ â  ª« ¢¨è  ­  ª« ¢¨ âãà¥
        mcall   2		; äã­ªæ¨ï 2 - áç¨â âì ª®¤ ᨬ¢®«  (¢ ah)
        push    eax ebx ecx esi
        mov     ecx, playtable.sizeof
        mov     esi, playtable
  .check_next: 
        cmp     ah, byte [esi]
        jnz     @f
        mov     esi, [esi + 4]
        mcall   55, 55
        jmp     .stop_check
  @@:
        add     esi, 8
        dec     ecx
        jnz     .check_next
  .stop_check:
        pop     esi ecx ebx eax
        jmp     still

playtable:
	dd 0x041, T07 ; A - if Caps Lock ON
	dd 0x05a, T08 ; Z
	dd 0x053, T09 ; S
	dd 0x058, T0a ; X
	dd 0x044, T0b ; D
	dd 0x043, T0c ; C
	dd 0x056, T01 ; V
	dd 0x047, T02 ; G
	dd 0x042, T03 ; B
	dd 0x048, T04 ; H
	dd 0x04e, T05 ; N
	dd 0x04d, T06 ; M
	dd 0x04b, T07 ; K
	dd 0x03c, T08 ; <
	dd 0x04c, T09 ; L
	dd 0x03e, T0a ; >
	dd 0x03a, T0b ; :
	dd 0x03f, T0c ; ?
	dd 0x022, T11 ; "
	dd 0x021, T0c ; key !-------
	dd 0x051, T11 ; key Q
	dd 0x040, T12 ; @
	dd 0x057, T13 ; W
	dd 0x023, T14 ; #
	dd 0x045, T15 ; E
	dd 0x052, T16 ; R
	dd 0x025, T17 ; %
	dd 0x054, T18 ; T
	dd 0x05e, T19 ; ^
	dd 0x059, T1a ; Y
	dd 0x026, T1b ; &
	dd 0x055, T1c ; U
	dd 0x049, T21 ; I
	dd 0x028, T22 ; (
	dd 0x04f, T23 ; O
	dd 0x029, T24 ; )
	dd 0x050, T25 ; P
	dd 0x07b, T26 ; {
	dd 0x02b, T27 ; +
	dd 0x07d, T28 ; }
	dd 0x07c, T29 ; |
	dd 0x061, T17 ; a - if Caps Lock OFF
	dd 0x07a, T18 ; z
	dd 0x073, T19 ; s
	dd 0x078, T1a ; x
	dd 0x064, T1b ; d
	dd 0x063, T1c ; c
	dd 0x076, T21 ; v
	dd 0x067, T22 ; g
	dd 0x062, T23 ; b
	dd 0x068, T24 ; h
	dd 0x06e, T25 ; n
	dd 0x06d, T26 ; m
	dd 0x06b, T27 ; k
	dd 0x02c, T28 ; ,
	dd 0x06c, T29 ; l
	dd 0x02e, T2a ; .
	dd 0x03b, T2b ; ;
	dd 0x02f, T2c ; /
	dd 0x027, T31 ; '
	dd 0x060, T2c ; `
	dd 0x009, T31 ; tab
	dd 0x031, T32 ; 1
	dd 0x071, T33 ; q
	dd 0x032, T34 ; 2
	dd 0x077, T35 ; w
	dd 0x065, T36 ; e
	dd 0x034, T37 ; 4
	dd 0x072, T38 ; r
	dd 0x035, T39 ; 5
	dd 0x074, T3a ; t
	dd 0x036, T3b ; 6
	dd 0x079, T3c ; y
	dd 0x075, T41 ; u
	dd 0x038, T42 ; 8
	dd 0x069, T43 ; i
	dd 0x039, T44 ; 9
	dd 0x06f, T45 ; o
	dd 0x070, T46 ; p
	dd 0x02d, T47 ; -
	dd 0x05b, T48 ; [
	dd 0x03d, T49 ; =
	dd 0x05d, T4a ; ]
	dd 0x05c, T4b ; \
	dd 0x008, T4c ; backspace
	dd 0x00d, T51 ; enter
	dd 0x066, T01 ; f
	dd 0x06a, T05 ; j
	dd 0x033, T08 ; 3
	dd 0x037, T11 ; 7
	dd 0x030, T15 ; 0
	dd 0x0b4, T10 ; home
	dd 0x0b5, T70 ; end
	dd 0x0b8, T20 ; PageUp
	dd 0x0b7, T70 ; PageDown
	dd 0x0ff, T00 ; F12
	dd 0x0b6, T70 ; Del
.sizeof: dd ($ - playtable)/8

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

Posted: Thu Mar 28, 2019 8:47 pm
by Antonio
Новая версия.

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

Posted: Sat Apr 06, 2019 6:44 am
by Antonio
dunkaist wrote:
Antonio wrote:Хотел сделать более длительные звуки, но при их наложении появляется треск.
Bad news is that your program has to mix sounds itself.
Good news is that there is an example. This is not an easy task at all. May be you need to look for some theory on audio mixing to better understand what is going on in the code.
Всем привет, в продолжение темы с аудиофайлами: по совету dunkaist переделал игру bomber под свои задачи. То есть, поудалял из неё почти всё. В результате качество звука заметно улучшилось по сравнению с предыдущим Forte, но всё равно не идеальное - в конце каждого звука слышен щелчок.

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

Posted: Mon Apr 08, 2019 11:28 pm
by Leency
Прикольно. Вообще ресурсы можно сжимать KPACK'ом и загружать через функцию 68.27

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

Posted: Tue Apr 09, 2019 2:22 pm
by Antonio
Leency wrote:Прикольно. Вообще ресурсы можно сжимать KPACK'ом и загружать через функцию 68.27
Спасибо за совет, а пример где-нибудь можно посмотреть?
Я заметил разницу в размере исполняемого файла игры bomber: у меня после компиляции размер получился раз в 10 больше, чем эта игра занимает в образе сборки.