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

Processing, playback of audio and video
  • В перспективе можно добавить. Но я сомневаюсь, что у меня получится красиво нарисовать. Пока могу добавлять квадратные кнопки, как в Forte Chimes.
  • Вот так можно упростить и уменьшить код http://prntscr.com/mycxic или переделать на процедуру http://prntscr.com/myd6wp
    В процедуру вообще можно передавать два параметра: первый для сравнения с ah, второй результирующий. Т.е. проверку проводить в процедуре.
    Белый и черные прямоугольники вроде не сложно :)
    или можно картинку использовать RAW 2 цветный.
    Из хаоса в космос
  • Переделал по первому варианту, по второму - не получается. Добавил кнопки. Кстати, с виртуальной клавиатурой тоже работает. :)
    Attachments
    PIANO3.ASM (18.55 KiB)
    Downloaded 225 times
    PIANO3 (4.19 KiB)
    Downloaded 209 times
    :?: :arrow: :idea:
  • Вот сделано через функцию, потести.
    У меня спикер не работает, проверить не могу.
    Attachments
    PIANO3.zip (5.97 KiB)
    Downloaded 230 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 215 times
    PIANO4.ASM (18.46 KiB)
    Downloaded 212 times
    :?: :arrow: :idea:
  • 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, но всё равно не идеальное - в конце каждого звука слышен щелчок.
    Attachments
    CHIMES.zip (275.67 KiB)
    Downloaded 223 times
    :?: :arrow: :idea:
  • Прикольно. Вообще ресурсы можно сжимать KPACK'ом и загружать через функцию 68.27
    Из хаоса в космос
  • Leency wrote:Прикольно. Вообще ресурсы можно сжимать KPACK'ом и загружать через функцию 68.27
    Спасибо за совет, а пример где-нибудь можно посмотреть?
    Я заметил разницу в размере исполняемого файла игры bomber: у меня после компиляции размер получился раз в 10 больше, чем эта игра занимает в образе сборки.
  • Who is online

    Users browsing this forum: No registered users and 9 guests