mciSendString 函数_轩逸云_新浪博客

函数原型

MCI(Media Control Interface,媒体控制接口)函数中,有些只适用于一种接口方式,有些则两种接口都可以用。mciSendString只适用于命令串接口方式(命令串中不区分大小写)。

mciSendString(发送命令串),函数原型为:

MCIERROR mciSendString( // 出错返回非零值(错误代码

// 可用mciGetErrorString获得错误的文本描述

LPCTSTR lpszCommand, // 指向以null结尾的命令字符串:”命令 设备[ 参数]”

LPTSTR lpszReturnString,// 指向接收返回信息的缓冲区,为NULL时不返回信息

UINT cchReturn, // 上述缓冲区的大小

HANDLE hwndCallback // 在命令串中含notify时,它指定一个回调窗口的句柄

// 一般为NULL

);

如:mciSendString(L"open sample.wav type waveaudio alias wave", NULL, 0, NULL);

MCI函数中还有一个只适用于命令串接口的函数为mciExcute,mciExcute(执行)是mciSendString的简化形式:

BOOL mciExcute(LPCTSTR lpszCommand); // 成功返回TRUE

该函数只有Win16支持,Win32不支持,可自写一函数实现:

BOOL mciExcute(LPCTSTR lpszCommand) {

if (mciSendString(lpszCommand, NULL, 0, NULL)) return FALSE;

return TRUE;

}

如:mciExcute(L"open sample.wav type waveaudio alias wave");

使用方法

mciSendString是用来播放多媒体文件的API指令,可以播放MPEG,AVI,WAV,MP3,等等,下面我们来介绍一下它的使用方法:

一,打开多媒体文件

首先在Dialog上面放一个Picture控件,MCISendString就在这个Picture控件的平面上播放多媒体文件

设Picture控件的ID为IDC_STATIC1:

CStatic *pStatic=(CStatic*)GetDlgItem(IDC_STATIC1);HWND h=pStatic->GetSafeHwnd();

CString open1;

char buf[256];

open1.Format("open f:\\mpeg\\mpeg1.avi type MPEGVideo Alias movie parent %u Style %u notify", h,WS_CHILD);

mciSendString(open1.GetBuffer(open1.GetLength()),buf,sizeof(buf),NULL);

这样F盘下面的mpeg目录下的mpeg1.avi就打开了,其中的type MPEGVideo是指打开MPEG,AVI等类型,如果不加type MPEGVideo这一句,就是打开WAV,MP3等,Alias movie定义了mpeg1.avi的别名为movie,以后可以通过操作movie就可以操作mpeg1.avi。

二,播放多媒体文件

上面我们已经打开了f:"mpeg"mpeg1.avi,现在我们来播放它:

mciSendString("play movie",buf,sizeof(buf),NULL);

如果想全屏播放:

mciSendString("play movie fullscreen",buf,sizeof(buf),NULL);

三,暂停播放。

mciSendString("pause movie",buf,sizeof(buf),NULL);

四,停止播放。

mciSendString("close movie",buf,sizeof(buf),NULL);

五,得到所播放文件的长度。

char sPosition[256];long lLength;

mciSendString("Status movie length", sPosition, 255,0);lLength=strtol(sPosition, NULL, 10);

其中lLength就是所播放文件的长度。注意:该长度单位是毫秒。

六,得到所播放文件的声音大小。

char chVolume[256];long lVolume;mciSendString("status movie volume",chVolume,255,0);lVolume=strtol(chVolume,NULL,10);其中lVolume就是所播放文件的声音大小。

七,到你指定的位置播放。

CString step1;long lPosition;

lPosition=100;

step1.Format("seek movie to %ld",lPosition);

mciSendString(step1.GetBuffer(step1.GetLength()),buf,sizeof(buf),0);

其中lPosition就是要到的播放位置,可以由你指定。

程序示例

命令串

1)CD

wchar_t buf[256];

MCIERROR err = mciSendString(L"open cdaudio alias cd", NULL, 0, NULL); // 打开CD

if (err) {

if (mciGetErrorString(err, buf, 256))

MessageBox(buf, L"Error"); // 获得并显示错误串

return;

}

mciSendString(L"status cd number of tracks", buf, 256, NULL); // 获得音轨总数

m_nTracks = wcstol(buf, NULL, 10); // 这里使用了宽字符版的字符串到整数的

// 转换函数:long wcstol( const wchar_t *nptr, wchar_t **endptr, int base );

wsprintf(buf, L"play cd from %d to %d", m_nFrom, m_nTo);

mciSendString(buf, NULL, 0, NULL); // 从音轨m_nFrom头播放到音轨m_nTo–1尾

其他常用命令:

mciSendString(L"set cd time format tmsf", NULL,0,NULL); // 设置时间格式为

// 轨(<100):分(<100):秒(<60):帧(<75),一秒=75块,一块=98帧

mciSendString(L"set cd door open", NULL, 0, NULL); // 打开光驱

mciSendString(L"set cd door closed", NULL, 0, NULL); // 关闭光驱

mciSendString(L"pause cd", NULL, 0, NULL); // 暂停播放

mciSendString(L"resume cd", NULL, 0, NULL); // 恢复播放

mciSendString(L"stop cd", NULL, 0, NULL); // 停止播放

mciSendString(L"close cd", NULL, 0, NULL); // 关闭CD设备

mciSendString(L"status cd length", buf, 256, NULL); // 获得整个CD的音轨总长度

mciSendString(L"status cd length track 5", buf, 256, NULL); // 获得第5个音轨的长度

mciSendString(L"status cd current track", buf, 256, NULL); // 获得当前音轨号

注意:

"play cd from m_nFrom to m_nTo"是完整形式,它还有其他形式:

"play cd from m_nFrom"从m_nFrom播放到盘尾

"play cd to m_nTo"从当前位置播放到指定音轨

"play cd" 从当前位置播放到盘尾

例如播放最后一首歌:"play cd from m_nLast"

2)WAV

wchar_t buf[256];

wsprintf(buf, L"open \"%s\" alias sound type waveaudio", pDoc->strFilePath);

MCIERROR err = mciSendString(buf, NULL, 0, NULL);

if (err) {

if (mciGetErrorString(err, buf, 256)) MessageBox(buf, L“Error”);

return;

}

// t1和t2为用户指定的起止时间(单位为秒,浮点变量)

DWORD start = (DWORD)(t1 * 1000 + 0.5), end = (DWORD)(t2 * 1000 + 0.5);

wsprintf(buf, L"play sound from %ld to %ld", start, end);

mciSendString(buf, NULL, 0, NULL);

其他常用命令:

mciSendString(L"status sound length", buf, 256, NULL);

mciSendString(L"pause sound", NULL, 0, NULL);

mciSendString(L"play sound", NULL, 0, NULL); // 从当前位置播放到文件尾

mciSendString(L"stop sound", NULL, 0, NULL);

mciSendString(L"close sound", NULL, 0, NULL);

3).MP3

下面看一个播放mp3音乐的简单示例:

#include .h>

#include .h>

#pragma comment(lib, "WINMM.LIB")

int main(int argc, char *argv[])

{

mciSendString(TEXT("open 难忘的一天.mp3 alias mysong"), NULL, 0, NULL);

mciSendString(TEXT("play MySong"), NULL, 0, NULL);

return 0;

}

该函数还可以播放avi视频等。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值