做个mp3播放器mciSendString()用法【转】

2023-11-16

做个mp3播放器,用realplay和WMP做出来的程序内存占用太大。
如果你仅仅是播放MP3,建议使用API函数mciSendString,我把该函数的详细资料罗列如下供你参考。
Option Explicit
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal
lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
mciSendString是用来播放多媒体文件的API指令,可以播放MPEG,AVI,WAV,MP3,等等,下面介绍
它的使用方法:
  该函数有四个参数:
第一个参数:要发送的命令字符串。字符串结构是:[命令][设备别名][命令参数].
第二个参数:返回信息的缓冲区,为一指定了大小的字符串变量.
第三个参数:缓冲区的大小,就是字符变量的长度.
第四个参数:回调方式,一般设为零
返回值:函数执行成功返回零,否则返回错误代码

一、常用命令
  1.打开(Open),格式:Open 设备名 [type 设备型式][alias 别名]
Dim mName as string
mName = "f://mpeg//mpeg1.avi"
mciSendString "open mName type MPEGVideo Alias movie parent %u Style %u notify",0&, 0, 0
 其中:
open              操作命令
mName          全路径文件名
type MPEGVideo 是指打开MPEG,AVI等类型,如果不加这一句,就是打开WAV,MP3等
Alias movie    定义了该操作的别名为movie,后续操作只要指明别名即可
parent %u       源
Style %u       样式
notify          通知
  2.播放(Play),格式:Play 设备名 [from 起点][to 终点]
mciSendString "play movie", 0&, 0, 0
mciSendString "play movie fullscreen", 0&, 0, 0 '全屏播放
  3.暂停(Pause):
mciSendString "pause movie", 0&, 0, 0
  4.继续(Resume):
mciSendString "resume movie", 0&, 0, 0
  5.停止(Stop):
mciSendString "stop movie", 0&, 0, 0
  6.关闭(Colse):
mciSendString "close movie", 0&, 0, 0
  7.前进到下一个位置:
mciSendString "step movie", 0&, 0, 0
  8.后退到上一个位置:
mciSendString "step movie reverse", 0&, 0, 0
  9.前进或后退 N 個位置(其中 N<0 即表示后退)
mciSendString "step movie by " & str(N), 0&, 0, 0
  10.获取当前播放位置:
Dim ST As String*64
mciSendString "status movie position", st, len(st), 0
  11. 获取媒体的总长度:
mciSendString "status movie length", st, len(st), 0
l=val(st) 'l就是所播放文件的长度
  12.获取播放当前状态:
Dim ST As String*64
mciSendString "status movie mode", ST, Len(ST), 0
If Left(ST, 7) = "stopped" Then (处理代码) '播放完毕
  13.循环播放:
mciSendString "play movie repeat", 0&, 0, 0

二、控制声音大小(1-1000):
Dim V As Long
mciSendString "status movie volume",&V, len(v), 0 'V是获取的音量大小值。
V = 50
mciSendString "setaudio movie volume to 数值", 0, 0, 0 'V是设置的音量值

三、设置播放位置.(需事先设定时间格式),格式:Seek 设备名 [to 位置 | to start | to end]
Dim P1 as Long, P2 as Long
P1 = 100: P2 = 3000
mciSendString "seek movie to ", P1, 0, 0 'P1是当前起始位置,单位:毫秒
mciSendString "seek movie to start", 0&, 0, 0 '定位到开头位置
mciSendString "play movie", 0&, 0, 0 '定位后再播放
或者:
mciSendString "play movie FROM P1 to P2",0&, 0, 0 'P1是起始位置,P2是停止位置。单位:毫秒
mciSendString "seek movie to end", 0&, 0, 0 '定位到最后位置

四、在指定控件上播放视频:
mciSendString "open AVI 文件名 parent hWnd style child", 0&, 0, 0
其中,hWnd 是控件的句柄
执行上述命令之后,影片会被放置在控件的左上角,且影片的大小不受控件大小的影响,如果想要改变
影片播放的位置及大小,可以在執行 play 指令前先执行 put 指令,格式如下:
  mcisendString "put AVI 文件名 window at X Y [Width Height]", 0&, 0, 0
其中:X、Y为影片左上角坐标,Width、Height为影片的宽高度

五、如果播放视频还可控制亮度(1-2000)
Dim B As Long
mciSendString "status movie brightness", B, 0, 0 'B是获取的亮度值。
B = 50
mciSendString "setvideo movie brightness to " & B, &0, 0, 0 'B是设置的亮度值

六、录音设置:
  录音前,用以下语句初始化
  1.设为8位:
mciSendString "set wave bitpersample 8", "", 0, 0
  2.设为11025Hz
mciSendString "set wave samplespersec 11025", "", 0, 0
  3.设为立体声:
mciSendString "set wave channels 2", "", 0, 0
  4.实现PCM格式(不一定正确):
MCISENDSTRING "set wave format tag pcm","", 0, 0
  5.开始录音:
mciSendString "close movie",0&,0,0
mciSendString "open new type WAVEAudio alias movie",0&,0,0
mciSendString "record movie",0&,0,0
  6.保存录音到c:/123.wav
mciSendString "stop movie",0&,0,0
mciSendString "save movie C://123.wav",0&,0,0
mciSendString "close movie",0&,0,0

七、开关光驱:
mciSendString "set cdaudio door open", "", 0, 0 '打开
mciSendString "set cdaudio door close", "", 0, 0 '关闭

八、其它
  1.设置设备的各种状态(Set)
Set alias_name[audio all off][audio all on][time format ms]:
  Set命令用来设置设备的各种状态.如:静音,有声音,时间格式为毫秒等.
  2.取得设备的状态(Status)
Status alias_name[length][mode][position]:
  Status命令用来取得设备的状态.如:该媒体文件的长度,该媒体文件所处状态,该媒体文件的当前位置等. 的长度,该媒体文件所处状态,该
媒体文件的当前位置等.
参考代码:
TCHAR fileName[]="D://俺的文档//my music//爷爷泡的茶.mp3";
TCHAR shortName[MAX_PATH];
GetShortPathName(fileName,shortName,sizeof(shortName)/sizeof(TCHAR));
TCHAR cmd[MAX_PATH+10];
wsprintf(cmd,"play %s",shortName);
mciSendString(cmd,"",NULL,NULL);
(调用mciSendString第一个参数传“play 文件全路径”就可以,“文件全路径”最好传绝对路径,不建议wanghepeng10那样值传递文件名。
另外如果文件全路径中含有空格的话要使用GetShortPathName转换成短路径。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

做个mp3播放器mciSendString()用法【转】 的相关文章

  • unordered_map 中字符串的 C++ 哈希函数

    看起来 C 标准库中没有字符串的哈希函数 这是真的 在任何 c 编译器上使用字符串作为 unordered map 中的键的工作示例是什么 C STL提供模板专业化 http en cppreference com w cpp string
  • 检查 PHP 中的字符串长度

    我有一个长度为 141 个字符的字符串 使用下面的代码我有一个if如果字符串大于或小于 140 则语句返回一条消息 libxml use internal errors TRUE dom new DOMDocument dom gt loa
  • 改变字符串颜色

    好的 这是我上一个问题的延续 但我有代码 private void btnTrans Click object sender EventArgs e var abrvStr inputBx Text foreach var kvp in d
  • ruby 字符串到哈希值的转换

    我有一个这样的字符串 str uu p xx m yy n zz m 我想知道如何将给定的字符串转换为哈希值 即我的实际要求是 有多少个值 符号之前 有m n和p 我不需要计数 我需要一个精确的值 这样输出效果会更好 m gt xx zz
  • .NET 字符串.替换

    我很生气 通常 我喜欢像 C 中那样进行替换 但是是否有一种 C 风格的替换 它一次仅替换一个字母或我指定的 X 数量 不 BCL 中不存在仅替换字符的单个实例的 Replace 方法 两个主要的 Replace 方法将替换所有出现的情况
  • 使用到达时间差对信号进行三边测量

    我在寻找或实现寻找信号源的算法时遇到一些麻烦 我的工作目标是找到声音发射器的位置 为了实现这一点 我使用了三个麦克风 我正在使用的技术是多点定位这是基于到达时间差 The 到达时间差使用发现每个麦克风之间互相关接收到的信号 我已经实现了算法
  • 如何使用JavaScript估算字符串的磁盘大小?

    我需要尝试估计DISKJavaScript 中文本字符串 可以是原始文本或图像 音频 等的 Base64 编码字符串 的大小 我不知道如何估计这个 当谷歌搜索时我唯一能找到的是 length所以我想 StackOverflow 上也许有人知
  • 是否有 java.lang.String 的内存高效替代品?

    看完之后这篇旧文章 http www javaworld com javaworld javatips jw javatip130 html page 2测量几种对象类型的内存消耗 我惊讶地发现有多少内存String在Java中的使用 le
  • 根据列中的部分字符串匹配选择数据框行

    我想根据列中字符串的部分匹配从数据框中选择行 例如列 x 包含字符串 hsa 使用sqldf if它有一个like语法 我会做类似的事情 select from lt gt where x like hsa 很遗憾 sqldf不支持该语法
  • 如何在Python中获取字符串中的°字符?

    我怎样才能得到一个 度 字符转换为字符串 这是指定 Unicode 字符的最对编码人员友好的版本 degree sign u N DEGREE SIGN 转义序列 N name Meaning 角色命名name在 Unicode 数据库中
  • 如何在Python中按字母顺序对字符串中的字母进行排序

    有没有一种简单的方法可以在Python中按字母顺序对字符串中的字母进行排序 So for a ZENOVW 我想返回 ENOVWZ 你可以做 gt gt gt a ZENOVW gt gt gt join sorted a ENOVWZ
  • 按名称显示进程的命令行

    我在cmd中使用以下命令来获取进程命令行 它提供了所有流程的详细信息 WMIC OUTPUT C ProcessList txt PROCESS get Caption Commandline Processid 我想在记事本中按名称获取特
  • String.GetHashCode() 返回不同的值

    为什么 GetHashCode 对同一字符串返回不同的值 我无法描述如何复制它 但相信这不是一个恶作剧 并且以下两行来自我的监视窗口在两个不同的时间 DDD Events Application ApplicationReferenceCr
  • 从字符串中提取电子邮件地址

    我有一个像这样的字符串 Francesco Renga lt email protected cdn cgi l email protection gt 我只需要提取电子邮件 即 电子邮件受保护 cdn cgi l email protec
  • 如何将 MP3 音频文件读入 numpy 数组/将 numpy 数组保存到 MP3?

    有没有办法从 MP3 音频文件中读取 写入 MP3 音频文件numpy具有类似 API 的数组scipy io wavfile read https docs scipy org doc scipy 0 14 0 reference gen
  • 使用 Google Translate API 获取单词的发音

    我正在尝试将法语单词的发音保存到 wav 或 mp3 文件中 我想知道 Google Translate API 上是否有任何地方 因为它有发音功能 可以让我实现这个目标 其他库也可以工作 自从提出这个问题以来 从谷歌翻译中 抓取 MP3
  • 如何在 Ruby 中转义单引号?

    我通过一个脚本 不是我的 将一些 JSON 传递到服务器 该脚本接受 JSON 作为字符串 JSON 的某些内容包含单引号 因此我想确保在传递给脚本之前对所有单引号进行转义 我已经尝试过以下方法 gt irb gt 1 9 3p194 00
  • 将字符串解析为结构变量

    我试图将字符串解析为其中包含不同变量的结构向量 这是我到目前为止所拥有的 但似乎不起作用 struct client string PhoneNumber string FirstName string LastName string Ag
  • 只保留 A-Z 0-9 并使用 javascript 从字符串中删除其他字符

    我正在尝试验证字符串以使它们成为有效的网址 我只需要保留 A Z 0 9 并使用以下命令从字符串中删除其他字符javascript or jquery 例如 贝儿餐厅 我需要将其转换为 百丽餐厅 所以字符被删除 只保留 A Z a z 0
  • Python bug - 或者我的愚蠢 - 扫描字符串文字时 EOL

    我看不出以下两行之间有显着差异 然而第一个解析 而后者则不解析 In 5 n Axis of Awesome In 6 n Axis of Awesome File

随机推荐

  • 浅谈 vue组件传值

    一般有三种传值方式 1 父传子 2 子传父 3 兄弟组件之间通信 1 父组件向子组件传值 一般会在子组件里面定义props来做接收 这是比较常见的情况 这是父组件
  • MybatisPlus 3.5.1 代码生成器 自定义Service层

  • 使用RabbitMQ定时发送消息

    如何使用消息队列去发一个定时消息 1 背景 在日常开发中 有时需要我们去定时发送消息 例如定时发送邮箱 定时发送短信等业务 此时需要我们去定制一个定时任务 可以确保在某一个时间节点上自动操作 而不用手动去设置 然后 在有些场景下 发送的消息
  • OPPO芯片公司哲库全员解散的后续...

    昨天的文章提到了OPPO的自研芯片公司哲库宣布解散 三千名员工领取了N 3的赔偿开始各奔东西 对于这背后的三千个家庭来说 无疑是坏消息 想要短时间内解决这么多人的就业问题 不是件轻松的事情 目前看来 无论是公司主体 还是员工本人 都在努力的
  • Visual Studio 2010必为程序员提供更多新机遇

    Visual Studio 2010必为程序员提供更多新机遇 今天天气太冷了 实在太冷了 外边下起大雪来 是2009年的第一场大雪 自己一个人坐在办公室实在无聊 看着外边的大雪 自己情不自禁想动起手来 想挑个话题又不知道写点什么好 最后斟酌
  • 利用几行python代码爬取全国疫情数据,全方位地图分析疫情地区分布

    爬取全国疫情数据 所用的网页连接 https api inews qq com newsqa v1 automation foreign country ranklist 可视化用到的模块 gt 戳这里下载 也可以看最后 或私信我 如果没有
  • C#访问postgresql数据库

    1 为了访问PostgreSQL数据库 需要从pgfoundry网站 下载Npgsql Net Data Provider for Postgresql的组件 https download csdn net download starhuh
  • SSE2 Intrinsics各函数介绍

    SIMD相关头文件包括 include
  • PowerDesigner设计数据库表

    1 说明 使用PowerDesigner设计数据库表 然后将表设计导出为Word文档 以及MySQL数据库对应的DDL刷库脚本 2 创建模型 首先创建概念数据模型 File gt New Model gt 选择左边的Model types
  • [Swift]错误提示:Method does not override any method from its superclass

    微信公众号 山青咏芝 shanqingyongzhi 博客园地址 山青咏芝 https www cnblogs com strengthen GitHub地址 https github com strengthen LeetCode 原文地
  • Vue 入门教程

    vue 入门 常用指令 生命周期 业务 使用 Vue 简化查询 业务 vue 实现新增 vue 核心 MVVM Model View ViewModel 实现数据的双向绑定 把编程的关注点放在数据上 入门 引入 js 文件 在 JS 代码区
  • 由《羊了个羊》想到的高并发架构之路

    前言 要说最近一段时间最火的话题是什么 那必定是 羊了个羊 频频冲上微博热搜第一 因访问量骤增 大量玩家涌入进来 高并发流量导致游戏服务器被接连击穿 羊了个羊 服务器几天内就出现了多次异常 无法登录游戏 问题思考 我想这其中多次崩溃的原因可
  • jackson-databind 简介、中文文档、中英对照文档 下载

    jackson databind 文档 下载链接 含jar包 源码 pom 组件名称 中文 文档 下载链接 中英对照 文档 下载链接 jackson databind 2 10 0 jar jackson databind 2 10 0 A
  • 修改手机屏幕刷新率_手机屏幕刷新率那点事儿!

    屏幕刷新率是指电子束对屏幕上的图像重新扫描的次数 刷新率越高 显示的画面稳定性就会越好 眼睛也就不会累 屏幕有刷新率 我们的眼睛也有刷新率 所谓的人眼刷新率就是我们眼睛一秒看到的图像数量 到目前为止我们眼睛刷新率极限还没有确定的数字 一般飞
  • 华为OD机试真题-分奖金【2023.Q1】

    题目内容 公司老板做了一笔大生意 想要给每位员工分配一些奖金 想通过游戏的方式来决定每个人分多少钱 按照员工的工号顺序 每个人随机抽取一个数字 按照工号的顺序往后排列 遇到第一个数字比自己数字大的 那么 前面的员工就可以获得 距离数字差值
  • RC522 - NFC刷卡模块

    RC522 NFC刷卡模块 芯片介绍 引脚介绍 MF RC522 是应用于 13 56MHz 非接触式通信中高集成度读写卡系列芯片中的一员 是 NXP 公司针对 三表 应用推出的一款低电压 低成本 体积小的非接触式读写卡芯片 是智能仪表和便
  • 数据可视化分析之热门旅游景区数据分析

    背景介绍 对景区的数据分析可以判断热门景区的走向和趋势 从而帮助更好的决定去哪里游玩 具有一定的指导意义 景区数据分析 这里直接展示数据分析的结果 首先展示了数据的原始信息 然后 使用了pyecharts来进行数据可视化分析 得到相关的结果
  • Java 4-6、优化启动配置,properties改为yml

    优化启动配置 properties改为yml yml缩进严格 把之前的配置转换为yml的文件重写一下 一 application yml 环境配置 dev和prod spring profiles active dev 一 applicat
  • 数学建模:评价性模型学习——灰色关联分析法(GRA模型)

    目录 前言 一 灰色关联分析 1 什么是灰色关联分析 2 流程介绍 二 综合评价 1 数据无量纲化处理 2 确定参考序列 3 确定权重 4 计算灰色关联系数 5 计算灰色加权关联度 6 代码 总结 前言 继续学习数学建模涉及的评价性模型 这
  • 做个mp3播放器mciSendString()用法【转】

    做个mp3播放器 用realplay和WMP做出来的程序内存占用太大 如果你仅仅是播放MP3 建议使用API函数mciSendString 我把该函数的详细资料罗列如下供你参考 Option ExplicitPrivate Declare