"# VisualHMI \u97f3\u9891\u64ad\u653e\uff1aplay_sound \u7cfb\u5217\u4e0e MP3 \u81ea\u52a8\u8fde\u64ad\n\n> 2026-08-04 | 2026-08-04\n> http:\/\/www.modbus.cn\/en\/51509.html\n\n**LUA \u811a\u672c, \u4e32\u53e3\u5c4f\/HMI \u5f00\u53d1**\n\n---\n\n\u64ad\u653e SD \u5361\u4e0a\u7684 MP3\uff1a\u64ad\u653e\/\u505c\u6b62\/\u6682\u505c\/\u7ee7\u7eed\uff0c\u52a0\u97f3\u91cf\u63a7\u5236\u3002\u9002\u5408\u8bed\u97f3\u63d0\u793a\u3001\u544a\u8b66\u97f3\u3001\u64cd\u4f5c\u53cd\u9988\u3002\n\n## 1. API\n\n\u51fd\u6570\u8bf4\u660eplay_sound(filename)\u64ad\u653e\u97f3\u9891\u6587\u4ef6\uff08\u7edd\u5bf9\u8def\u5f84\uff0c\u542b\u76d8\u7b26\uff09stop_sound()\u505c\u6b62\u64ad\u653epause_sound()\u6682\u505c\uff08\u4fdd\u7559\u4f4d\u7f6e\uff09resume_sound()\u4ece\u6682\u505c\u4f4d\u7f6e\u7ee7\u7eed\n\n![\u97f3\u9891\u64ad\u653e](https:\/\/www.modbus.cn\/wp-content\/uploads\/2026\/08\/visualhmi\/lu013_1.png)\n\n## 2. \u64ad\u653e\u5668\u753b\u9762\u63a7\u4ef6\u8868\n\n\u5730\u5740\u63a7\u4ef6\/\u7528\u9014LW1000\u4e0a\u4e00\u9875\/\u4e0b\u4e00\u9875LW1001\u4e0a\u4e00\u9996\/\u4e0b\u4e00\u9996LW1002\u64ad\u653e\/\u6682\u505c\u5207\u6362LW1003 \/ LW1004\u5f53\u524d\u9875 \/ \u603b\u9875\u6570LW1005SD \u5361\u662f\u5426\u6709\u6b4c\u66f2\uff080\/1\uff09LW1100~LW1200\u6b4c\u540d\uff08128 \u5b57\u8282\uff09LW0140\u97f3\u91cfLW0143\u64ad\u653e\u8fdb\u5ea6\n\n## 3. \u6848\u4f8b\uff1a\u81ea\u52a8\u8fde\u64ad\u5217\u8868\n\non_init \u5217\u4e3e SD \u5361\u6b4c\u66f2\u5230\u7f13\u5b58\u8868\uff1b\u70b9\u51fb\u64ad\u653e\u3001\u4e0a\u4e00\u9996\/\u4e0b\u4e00\u9996\u5207\u6362\uff1bon_run \u91cc\u5faa\u73af\u68c0\u6d4b\u64ad\u653e\u72b6\u6001\uff0c\u64ad\u5b8c\u81ea\u52a8\u4e0b\u4e00\u9996\uff1a\n\n```\nmusicNameListTb = {}\ncurPalyIindex = 1\n_IS_PLAYING_ = 0\n\nfunction on_init()\n  list_dir(\"1:\/music\")   -- \u5217\u4e3e\u97f3\u4e50\u76ee\u5f55\nend\n\nfunction on_list_dir(path, filename, type, fsize)\n  if type == 1 and string.find(filename, \".mp3\") then\n    table.insert(musicNameListTb, path .. \"\/\" .. filename)\n  end\nend\n\nfunction on_update(slave, vtype, addr)\n  if vtype == VT_LW then\n    if addr == 0x1001 then\n      local key = get_uint16(VT_LW, 0x1001)\n      if key == 0 then curPalyIindex = curPalyIindex - 1 end\n      if key == 1 then curPalyIindex = curPalyIindex + 1 end\n      if curPalyIindex &lt; 1 then curPalyIindex = #musicNameListTb end\n      if curPalyIindex &gt; #musicNameListTb then curPalyIindex = 1 end\n      stop_sound()\n      play_sound(musicNameListTb[curPalyIindex])\n    elseif addr == 0x1002 then\n      local sw = get_uint16(VT_LW, 0x1002)\n      if sw == 1 then\n        _IS_PLAYING_ = 1\n        play_sound(musicNameListTb[curPalyIindex])\n      else\n        _IS_PLAYING_ = 0\n        pause_sound()\n      end\n    end\n  end\nend\n\nfunction on_run(screen)\n  updatMisucPlayState()  -- \u5faa\u73af\u68c0\u6d4b\u64ad\u653e\u72b6\u6001, \u64ad\u5b8c\u81ea\u52a8\u4e0b\u4e00\u9996\nend\n```\n\n\u97f3\u9891\u4e09\u6ce8\u610f\uff1a**\u2460\u6587\u4ef6\u540d\u8def\u5f84\u5fc5\u987b\u5e26\u76d8\u7b26\uff08M\u7cfb\u5217 \u300c1:\/music\/xx.mp3\u300d\uff09\uff1b\u2461SD \u5361\u6ca1\u63d2\u65f6 play_sound \u65e0\u6548\u679c\u4f46\u4e0d\u4f1a\u62a5\u9519\uff0c\u754c\u9762\u8981\u9760 LW1005 \u9690\u85cf\u63a7\u5236\uff1b\u2462\u540c\u65f6\u53ea\u652f\u6301\u4e00\u4e2a\u97f3\u9891\u6d41\uff0c\u64ad\u653e\u65b0\u6587\u4ef6\u524d\u5148 stop_sound()**\u3002\n\n\u6574\u7406\u81ea \u5e7f\u5dde\u5927\u5f69\u79d1\u6280 VisualHMI \u5f00\u53d1\u6587\u6863\uff08hmi-doc.gz-dc.com\uff09LUA \u6559\u7a0b\u300c\u97f3\u9891\u64ad\u653e\u300d\uff0c\u7248\u6743\u5f52\u5927\u5f69\u79d1\u6280\u6240\u6709\u3002\n\n---\n*modbus.cn*\n"