如何理解PlaySound函数API文档并在MASM中实现?
How to understand PlaySound function API document and implement it in MASM?
我知道在PlaySound函数中把20001h作为最后一个参数可以让音乐同步播放。但是为什么是20001h呢?我还希望“重复”在后台播放音乐,但我无法理解 API 文档,因为它没有提到 20001h 代表 SND_SYNC,也没有显示代表 SND_LOOP 的内容。
求指教,万分感谢!
这是我的代码:
includelib Winmm.lib
PlaySound PROTO,
pszSound:PTR BYTE,
hmod:DWORD,
fdwSound:DWORD
file BYTE "test.wav",0
SND_SYNC DWORD 0
main proc
mov SND_SYNC, 20001H
INVOKE PlaySound, OFFSET file, NULL, SND_SYNC
.......
I know that putting 20001h in PlaySound function as the last parameter can make the music play synchronously.
这是不正确的。它 异步播放文件 .
最后一个参数是一个位掩码,它可以将多个标志“或”在一起。 SND_SYNC
定义为 00000h
(没有任何其他标志),而 20001h
是 SND_ASYNC
(00001h
) 与 [= 或运算的组合15=] (20000h
).
SND_LOOP
(00008h
) 只能与 SND_ASYNC
.
结合使用
所以,为了完成你想要的:
I also wanted the music played in the background "repeatedly"
您需要组合 SND_FILENAME
、SND_ASYNC
和 SND_LOOP
标志。该数值为 20009h
.
以下是您可以与 PlaySound()
一起使用的所有标志。它们的含义在 PlaySound
's documentation 1:
中解释
Name
Value
SND_SYNC
0x00000000
SND_ASYNC
0x00000001
SND_NODEFAULT
0x00000002
SND_MEMORY
0x00000004
SND_LOOP
0x00000008
SND_NOSTOP
0x00000010
SND_PURGE
0x00000040
SND_APPLICATION
0x00000080
SND_NOWAIT
0x00002000
SND_ALIAS
0x00010000
SND_ALIAS_ID
0x00110000
SND_FILENAME
0x00020000
SND_RESOURCE
0x00040000
SND_SENTRY
0x00080000
SND_RING
0x00100000
SND_SYSTEM
0x00200000
1 注意:SND_RING
没有记录,但您可以看到 SND_ALIAS_ID
是 SND_RING
与 SND_ALIAS
.
我知道在PlaySound函数中把20001h作为最后一个参数可以让音乐同步播放。但是为什么是20001h呢?我还希望“重复”在后台播放音乐,但我无法理解 API 文档,因为它没有提到 20001h 代表 SND_SYNC,也没有显示代表 SND_LOOP 的内容。 求指教,万分感谢!
这是我的代码:
includelib Winmm.lib
PlaySound PROTO,
pszSound:PTR BYTE,
hmod:DWORD,
fdwSound:DWORD
file BYTE "test.wav",0
SND_SYNC DWORD 0
main proc
mov SND_SYNC, 20001H
INVOKE PlaySound, OFFSET file, NULL, SND_SYNC
.......
I know that putting 20001h in PlaySound function as the last parameter can make the music play synchronously.
这是不正确的。它 异步播放文件 .
最后一个参数是一个位掩码,它可以将多个标志“或”在一起。 SND_SYNC
定义为 00000h
(没有任何其他标志),而 20001h
是 SND_ASYNC
(00001h
) 与 [= 或运算的组合15=] (20000h
).
SND_LOOP
(00008h
) 只能与 SND_ASYNC
.
所以,为了完成你想要的:
I also wanted the music played in the background "repeatedly"
您需要组合 SND_FILENAME
、SND_ASYNC
和 SND_LOOP
标志。该数值为 20009h
.
以下是您可以与 PlaySound()
一起使用的所有标志。它们的含义在 PlaySound
's documentation 1:
Name | Value |
---|---|
SND_SYNC | 0x00000000 |
SND_ASYNC | 0x00000001 |
SND_NODEFAULT | 0x00000002 |
SND_MEMORY | 0x00000004 |
SND_LOOP | 0x00000008 |
SND_NOSTOP | 0x00000010 |
SND_PURGE | 0x00000040 |
SND_APPLICATION | 0x00000080 |
SND_NOWAIT | 0x00002000 |
SND_ALIAS | 0x00010000 |
SND_ALIAS_ID | 0x00110000 |
SND_FILENAME | 0x00020000 |
SND_RESOURCE | 0x00040000 |
SND_SENTRY | 0x00080000 |
SND_RING | 0x00100000 |
SND_SYSTEM | 0x00200000 |
1 注意:SND_RING
没有记录,但您可以看到 SND_ALIAS_ID
是 SND_RING
与 SND_ALIAS
.