Музыкальные инструменты
-
Как насчет нарисовать клавиши, как у пианино, чтобы по ним можно было нажимать?)Из хаоса в космос
В перспективе можно добавить. Но я сомневаюсь, что у меня получится красиво нарисовать. Пока могу добавлять квадратные кнопки, как в Forte Chimes.
Вот так можно упростить и уменьшить код http://prntscr.com/mycxic или переделать на процедуру http://prntscr.com/myd6wp
В процедуру вообще можно передавать два параметра: первый для сравнения с ah, второй результирующий. Т.е. проверку проводить в процедуре.
Белый и черные прямоугольники вроде не сложно
или можно картинку использовать RAW 2 цветный.
В процедуру вообще можно передавать два параметра: первый для сравнения с ah, второй результирующий. Т.е. проверку проводить в процедуре.
Белый и черные прямоугольники вроде не сложно
или можно картинку использовать RAW 2 цветный.
Из хаоса в космос
Переделал по первому варианту, по второму - не получается. Добавил кнопки. Кстати, с виртуальной клавиатурой тоже работает.
- Attachments
-
-
PIANO3.ASM (18.55 KiB)Downloaded 229 times
-
PIANO3 (4.19 KiB)Downloaded 211 times
-
Вот сделано через функцию, потести.
У меня спикер не работает, проверить не могу.
У меня спикер не работает, проверить не могу.
- Attachments
-
-
PIANO3.zip (5.97 KiB)Downloaded 234 times
-
Из хаоса в космос
Не могу скомпилировать. В Fasm пишет mov al, [_key] error: operand sizes do not match.
Попробуй добавить byte сюда http://prntscr.com/mzly76
Из хаоса в космос
А стек обрушить не боитесь?
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
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
Новая версия.
- Attachments
-
-
PIANO4 (3.53 KiB)Downloaded 216 times
-
PIANO4.ASM (18.46 KiB)Downloaded 216 times
-
Всем привет, в продолжение темы с аудиофайлами: по совету dunkaist переделал игру bomber под свои задачи. То есть, поудалял из неё почти всё. В результате качество звука заметно улучшилось по сравнению с предыдущим Forte, но всё равно не идеальное - в конце каждого звука слышен щелчок.dunkaist wrote:Bad news is that your program has to mix sounds itself.Antonio wrote:Хотел сделать более длительные звуки, но при их наложении появляется треск.
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.
- Attachments