怎样判断MediaPlayer控件播放声音时的位置?

yg2000 2001-07-30 04:25:38
例如:(MediaPlayer->Position=结束时的代码怎样写?)
...全文
134 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
yg2000 2001-08-04
  • 打赏
  • 举报
回复
MediaPlayer这个控件不知怎么啦!!!不但没有进度条也没有判断结束的代码可写,同时ModeChange事件也没有,把MediaPlayer事件放在FormCreate下通不过,在FormActivate和FormShoow事件下能自动播,但只做一次了事,第二个条件不再执行了;放在TimerTimer下却能运行但声音不正常,时钟和播放器冲突。我在VB3.0下用MCIWnd控件都做成了英语单词自动播放了。谁能举例说明一下,我会另加 分分分分 的。


下面一段代码帮我看一下怎么实现。
播放wav和Avi用MediaPlayer
播放midi用mci,代码如下:

打开设备: //代码放什么地方?写到FormOnCreate上,运行时在下面的 "MCIERROR mciError;"上通不过。
MCIERROR mciError;
char outBuf[100];
AnsiString Cmd="open ";
Cmd=Cmd+File+ " type sequencer alias "+Alias; //"type sequencer alias "怎么用
// File:midi文件
mciError=mciSendString(
Cmd.c_str(),outBuf,sizeof(outBuf),File);
if(mciError)
{
mciGetErrorString(mciError,outBuf,sizeof(outBuf));
Application->MessageBox(outBuf,"错误",
MB_SYSTEMMODAL+MB_OK+ MB_ICONSTOP);
}



播放midi://是写到控件上的单击事件上吧?或写到FormOnCreate上吧?
AnsiString Cmd="play ";
Cmd=Cmd+" "+Alias+" notify"; //怎么用"Alias"?我写上文件也不好使。
HWND hWnd=Application->Handle;
MCIERROR mciError=mciSendString(Cmd.c_str(),NULL,0,hWnd);
if(mciError)
{
char Buf[100];
mciGetErrorString(mciError,Buf,sizeof(Buf));
Application->MessageBox(Buf,"错误",
MB_SYSTEMMODAL+MB_OK+ MB_ICONSTOP);
}

luhongjun 2001-08-03
  • 打赏
  • 举报
回复
使用MCI:例如
播放wav用playsound
播放midi用mci,如下
打开设备
MCIERROR mciError;
char outBuf[100];
AnsiString Cmd="open ";
Cmd=Cmd+File+ " type sequencer alias "+Alias;
// File:midi文件
mciError=mciSendString(
Cmd.c_str(),outBuf,sizeof(outBuf),File);
if(mciError)
{
mciGetErrorString(mciError,outBuf,sizeof(outBuf));
Application->MessageBox(outBuf,"错误",
MB_SYSTEMMODAL+MB_OK+ MB_ICONSTOP);
}
播放midi
AnsiString Cmd="play ";
Cmd=Cmd+" "+Alias+" notify";
HWND hWnd=Application->Handle;
MCIERROR mciError=mciSendString(Cmd.c_str(),NULL,0,hWnd);
if(mciError)
{
char Buf[100];
mciGetErrorString(mciError,Buf,sizeof(Buf));
Application->MessageBox(Buf,"错误",
MB_SYSTEMMODAL+MB_OK+ MB_ICONSTOP);
}
停止播放
MCIERROR mciError;
AnsiString Cmd="stop ";
Cmd=Cmd+Alias;
mciError=mciSendString(Cmd.c_str(),NULL,0,NULL);
if(mciError)
{
char Buf[100];
mciGetErrorString(mciError,Buf,sizeof(Buf));
Application->MessageBox(Buf,"错误",
MB_SYSTEMMODAL+MB_OK+ MB_ICONSTOP);
}
关闭设备
AnsiString Cmd="close ";
Cmd=Cmd+Alias;
mciSendString(Cmd.c_str(),NULL,0,NULL);

路人丁 2001-08-01
  • 打赏
  • 举报
回复
激活和显示的概念是不一样的!
路人丁 2001-08-01
  • 打赏
  • 举报
回复
你写在FormActivate下岂不是每次窗体被激活都要重新播放?
路人丁 2001-08-01
  • 打赏
  • 举报
回复
你把程序写在窗体OnShow()事件下!
yg2000 2001-08-01
  • 打赏
  • 举报
回复
ddeng(登登)你好!! 你说__哪来的MediaPlayer->Close();??? __我的程序一运行,只要符合条件就会播放音乐的,但播放完后应该自行关闭才好呀。
yg2000 2001-08-01
  • 打赏
  • 举报
回复
ddeng(登登) 和 dingzhenhhy(人言落日是天涯,望及天涯不见家(快疯了) 你们好!!看来只能处处设防了(关闭子窗体或退出应用程序时都得先让主窗体上的MediaPlayer->Close();了,否则关闭子窗体时会重播的(因为我的程序是写在FormActivate下,写在FormCreate下通不过),而关闭主窗体时会死机的。

用MediaPlayer->EndPos也不好用。象 VB3 中的MCI控件它有播放位置显示条,在BCB里我一直没找到写播放位置的例子。
yushaofeng 2001-08-01
  • 打赏
  • 举报
回复
我也想知道?
路人丁 2001-08-01
  • 打赏
  • 举报
回复
你把关闭MedioPlayer代码写在OnCloseQuery()中
yg2000 2001-08-01
  • 打赏
  • 举报
回复
我的软件是象东方快车一样总浮在窗体顶上,或其它三边。打开Windows后就浮在窗体顶上,根据
我的初始化设置自动进行播音,当我要关闭时,输入密码先关闭MedioPlayer播放器再退出程序。
你说:“你写在FormActivate下岂不是每次窗体被激活都要重新播放? ”是的,但只好先关播放器再关某一窗体了。看来还是个难题,慢慢来了。
路人丁 2001-07-31
  • 打赏
  • 举报
回复
呵呵我又来了~!
你是想随时关闭媒体播放器?
ddeng 2001-07-31
  • 打赏
  • 举报
回复
可能能用MediaPlayer->EndPos,不过哪来的MediaPlayer->Close();???
yg2000 2001-07-31
  • 打赏
  • 举报
回复
我不知道是否题难还分少?怎么没人进来呀!!!!!!!我现在只好用别的办法来解决它了。
如果我能知道 if( MediaPlayer->Position=结束) 就可随时及时直接让 MediaPlayer->Close(); 那该多好呀!!

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧