刚刚修正了自己用的小闹钟的代码。

坑1:REPEAT 选项的作用范围

原来用得好好的,之后选择 .wav 文件,居然不出声音了……

诶,MCI 肯定支持 .wav 的啊……

仔细想想,我以前都是选 .mp3 作为闹铃,和这个有关系吗?

查看源代码。

strSend = "PLAY " & STRING_SOUND_ALIAS & " REPEAT"
Call mciSendString(strSend, rbuf, 0, 0)

  

为了将我从睡梦中闹醒(一般来说我睡得很死的……),我选用了 REPEAT 选项来循环播放。

嗯,有。记得在哪里读到过,PLAY 指令的 REPEAT 选项只能作用于 MPEGVideo 类型的文件。(时间也这么晚了, 我想记录完直接睡觉,就不找引用来源了。)

那就很简单,打开的时候作为 MPEGVideo 打开就好了。

strSend = "OPEN " & Chr$(34) & FileName & Chr$(34) & " ALIAS " & STRING_SOUND_ALIAS & " TYPE MPEGVIDEO"
Call mciSendString(strSend, rbuf, 0, 0)

  

坑2:文件名长度

应该好了吧……来,试一下。

D:\Music\Themes\Anison Piano ~marasy animation songs cover on piano~ marasy\marasy - Anison Piano ~marasy animation songs cover on piano~.wav

嗯?没有特殊字符啊,为什么还是无法播放呢?(我没写调试输出,所以如果看成一个黑盒的话,我看到的结果只有无法播放。)总长度也明显小于 MAX_PATH,文件夹名称和文件名称长度也正常。

去看 mciSendString() 的返回字符串太麻烦了,推理吧。

你看,MCI 是一个历史久远的东西,那么……历史久远!历史久远的东西,在这种情况下能造成影响的,很大的可能性是8.3文件名(短文件名)。

那也好办。Windows API,GetShortPathName(),不要重复发明轮子。

strShortFilename = String$(MAX_PATH, vbNullChar)
Call GetShortPathName(FileName, strShortFilename, MAX_PATH)
strShortFilename = Strip(strShortFilename)
strSend = "OPEN " & Chr$(34) & strShortFilename & Chr$(34) & " ALIAS " & STRING_SOUND_ALIAS & " TYPE MPEGVIDEO"
Call mciSendString(strSend, rbuf, 0, 0)

  

(注意,上面的代码还有一个小坑。如果不进行字符串“修剪”去掉冗余的 vbNullChar 的话,也是无法播放的。不过我觉得这没必要单独提出来,就放在这括号里了。)

去睡觉

至少刚刚用了几个sample去测试,都通过了。今早应该能醒来吧……设置闹钟然后睡觉吧。

这篇文章就当是备忘录好了……看官别抱太大希望……

最后补充说明,MCI 其实是调用相应的已注册的解码器来工作的,所以其实如果安装了相应的解码器,就能播放相应格式的音频文件。当然,raw PCM 和 waveform 肯定要用 native 的 API 直接解决对不对……如果微软那群人不这么想我也没办法……

mciSendString 的两个小坑的更多相关文章

  1. 关于sqlmap的两个小坑

    i春秋作家:__LSA__ 0x00 概述 近日在利用sqlmap注入测试时遇到一个奇怪的现象,高版本sqlmap无法检测出注入,但是低版本的可以测出注入,并且能跑出数据不是误报,经过对比测试和查看s ...

  2. swiper 初始化的两个小坑

    1.当swiper loop设为true时,同时你又改变了sliderPerview的值,这时候轮播,按prev按钮到第一个时,会出现空白页: 解决办法:sliderPerview设置为auto,lo ...

  3. kvm 虚机环境碰到的两个小坑

    1)当部署一个商用VA的时候,出现virsh version|grep "Using library" 返回错误,经过查看,发现里面有汉字,猜应该是这个原因导致无法检索到libvi ...

  4. win2016 配置IIS 和mysql5.7 迁移数据表的两个小坑

    今天配置一整天,就IIS都装了一整天,都是没办法安装.net3.5的问题. 最后解决办法:https://help.aliyun.com/knowledge_detail/38203.html?spm ...

  5. Xcode7 的两个小坑

    Xcode7 还在 beta.时不时崩一下什么的倒也是预料之中的事.没料到的是之前用着好好的,今天升完 El Capitan 之后,模拟器竟然不见了,设备倒是在 schema 栏右边里能看到.只是注明 ...

  6. Java实现快排+小坑+partition的两种思路

    在做一道剑指Offer的题的时候,有道题涉及到快排的思路,一开始就很快根据以前的思路写出了代码,但似乎有些细节不太对劲,自己拿数据试了下果然.然后折腾了下并记录下一些小坑,还有总结下划分方法parti ...

  7. 这两个小技巧,让我的SQL语句不仅躲了坑,还提升了1000 倍

    原文: https://cloud.tencent.com/developer/article/1465618 本次来讲解与 SQL 查询有关的两个小知识点,掌握这些知识点,能够让你避免踩坑以及提高查 ...

  8. [LeetCode]29 两数相除和一个小坑点

    给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor 得到的商. 示例 1: 输 ...

  9. C#中的Infinity有个小坑

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 昨天家里有事,上网也不方便,就没有推送文章.今天很累,也不长篇大论了.简单介绍一下最近遇到的 ...

随机推荐

  1. RunTimeException包括:

    大约有如下几种: NullPointerException - 空指针引用异常 ClassCastException - 类型强制转换异常 IllegalArgumentException- 传递非法 ...

  2. mongodb的修改器

    在mongodb中通常文档只会有一部分要更新,利用原子的更新修改器,可以做到只更新文档的一部分键值,而且更新极为高效,更新修改器是种特殊的键,用来指定复杂的更新操作,比如调整.增加.或者删除键,还可以 ...

  3. php获取excel所有的批注

    phpexcel下载:https://github.com/PHPOffice/PHPExcel <?php /** *获取excel所有的批注 * * 存在编码问题,xls和xlsx的批注编码 ...

  4. GDB调试汇编分析

    GDB调试汇编分析 代码 本次实践我参照了许多先做了的同学的博客,有卢肖明,高其,张梓靖同学.代码借用的是卢肖明同学的代码进行调试运行. GCC编译 使用gcc -g gdbtest.c -o gdb ...

  5. Excel VBA 函数

    Instr函数 一. 定义 InStr 函数 返回 Variant (Long),指定一字符串在另一字符串中最先出现的位置. InStr([start, ]string1, string2[, com ...

  6. shell脚本删除指定mobileprovision

    由于某种原因,xcode帮我按照了几千个开发和上线证书,需要删除这部分证书: #dir="/Users/Ethan/Library/MobileDevice/Provisioning Pro ...

  7. 关于Unicode,字符集,字符编码,每个程序员都应该知道的事

    关于Unicode,字符集,字符编码,每个程序员都应该知道的事 作者:Jack47 李笑来的文章如何判断一个人是否聪明?中提到: 必要.清晰.且准确的概念,是一切思考的基石.所谓思考,很大程度上,就是 ...

  8. EasyPR--一个开源的中文车牌识别系统

    我正在做一个开源的中文车牌识别系统,Git地址为:https://github.com/liuruoze/EasyPR. 我给它取的名字为EasyPR,也就是Easy to do Plate Reco ...

  9. 更新Literacy

    之前都没有做单元测试的啊 昨天离职了,闲着没事做了个单元测试,结果发现一堆问题....大部分都是关于值类型在IL中的操作问题... 这件事让我感觉蛋蛋隐隐发疼....以后一定要做单元测试啊.... 具 ...

  10. Azure PowerShell (10) 使用PowerShell导出订阅下所有的Azure VM和Cloud Service的高可用情况

    <Windows Azure Platform 系列文章目录> 本文介绍的是国内由世纪互联运维的Azure China服务. 该脚本下载地址在http://files.cnblogs.co ...