我正在尝试用python播放一个.mp3文件winmm.dll(ctypes.windll.winmm). 但是,当我尝试以毫秒为单位获取某个文件的长度时,得到的不是实际长度(05:23=323000 ms),而是3。status命令得到的时间格式为“m”,设置命令后时间格式不变。下面是一些说明问题的代码:
from ctypes import windll, c_buffer
fp = 'song.mp3'
alias = 'test'
buf = c_buffer(255)
r = windll.winmm.mciSendStringW(f'open "{fp}" alias {alias}', buf, 254, 0)
print(r)
buf = c_buffer(255)
r = windll.winmm.mciSendStringW(f'status {alias} time format', buf, 254, 0)
print(r, buf.value)
buf = c_buffer(255)
r = windll.winmm.mciSendStringW(f'set {alias} time format milliseconds', buf, 254, 0)
print(r)
buf = c_buffer(255)
r = windll.winmm.mciSendStringW(f'status {alias} time format', buf, 254, 0)
print(r, buf.value)
buf = c_buffer(255)
r = windll.winmm.mciSendStringW(f'status {alias} length', buf, 254, 0)
print(r, buf.value)
及其输出:
0
0 b'm'
0
0 b'm'
0 b'3'
提前感谢您的帮助!你知道吗
正如我在评论中指出的,这是一个典型的未定义行为示例。有关详细信息,请查看[SO]: C function called from Python via ctypes returns incorrect value (@CristiFati's answer)。
而且,您正在混合8位和16位字符串。你知道吗
清单[Python 3.Docs]: ctypes - A foreign function library for Python。你知道吗
代码00.py:
输出:
相关问题 更多 >
编程相关推荐