void __fastcall TForm1::ListBox1DblClick(TObject *Sender) //双击歌曲文件列表某行
{
MediaPlayer1->FileName=ListBox1->Items->Strings[ListBox1->ItemIndex];
//将选中的歌曲文件的路径送给播放器TMediaPlayer
Label1->Caption=MediaPlayer1->FileName; // Label1显示歌曲文件的路径
MediaPlayer1->DeviceType=dtAutoSelect;// TMediaPlayer自动选择
MediaPlayer1->Open(); //打开播放器
MediaPlayer1->Play(); //播放歌曲
n=ListBox1->ItemIndex; //歌曲序号
Timer2->Enabled=true;//打开控制Label1的定时器,让歌曲文件路径横向移动
}
出错歌曲路径:
F:\音乐天地\SogouMusic\
C? bé mùa ??ng - Th?y Tiên - ??ng Kh?i.mp3
很多歌曲都可以正常播放,就是跳到几首歌曲之后就会出现以上错误了,警告窗口不停
地弹出来,关都关不掉。根据出错的歌曲路径可以看出,大概是歌曲文件名TMediaPlayer
识别不了吧?我把那首歌曲换成其他正常的名字就可以播放了。。。我是新手,请问各位
有什么办法处理这种情况?我试过try/catch语句,貌似没什么变化。。。
15 个解决方案
#1
显示乱码的这个歌曲名字到底是什么呢?
#2
哈哈,那是一首越南歌,估计是播放器识别不了吧,其他还有一些文件名字不规则那些也放不了,我都不知道该怎么办。。。
#4
ListBox里面我存的全部是歌曲路径,不懂怎么筛选出文件名。
#5
看起来, 好像是MediaPlayer不支持Unicode文件名.
2009以后的版本中可能会支持.
2009以后的版本中可能会支持.
#6
简单方法就是判断文件名中是否包含有'?'这个字符.
ListBox1->Items->Strings[ListBox1->ItemIndex].Pos("?") > 0
#7
有什么办法让播放器识别不了那首歌曲之后自动跳出到其他地方吗?
#8
晕, 插队了. 看我6楼回复即可.
#9
谢谢了,现在我的程序都写了那么多了,我想知道那个警告窗口是TMediaPlayer给的吗?怎么会一直不停啊?
#10
警告窗口是MediaPlayer弹出的. 一直不停的弹, 这个原因不明.
#11
记得以前是只弹一次而已的,现在是不是程序写到了滚动条之后受到太多定时器的影响啊,我屏蔽掉所有定时器,还是那样。。。
#12
可能是和你的代码有关系.
不过你屏蔽掉文件名异常的歌曲就行了.
不过你屏蔽掉文件名异常的歌曲就行了.
#13
void __fastcall TForm1::Timer4Timer(TObject *Sender)
{
int TheLength;
int mMinutes;
int mSeconds;
int numbe;
int time1,time2,time4,time5;
numbe=ListBox1->ItemIndex;
if(numbe==-1)
{
time1=0;
time2=0;
time4=0;
time5=0;
Label4->Caption=time1;
Label5->Caption=time2;
Label6->Caption=time4;
Label7->Caption=time5;
}
else
{
MediaPlayer1->TimeFormat=tfMilliseconds;
TheLength=MediaPlayer1->Position/1000;
//mHours=TheLength/3600;
mMinutes=(TheLength%3600)/60;
mSeconds=(TheLength%3600)%60;
time1=(mMinutes%60)/10;
time2=(mMinutes%60)%10;
time4=mSeconds/10;
time5=mSeconds%10;
Label4->Caption=time1;
Label5->Caption=time2;
Label6->Caption=time4;
Label7->Caption=time5;
MediaPlayer1->TimeFormat=tfMilliseconds;
ImageTrack->Canvas->Brush->Color=clBlack;
ImageTrack->Canvas->Rectangle(0,0,ImageTrack->Width,ImageTrack->Height);
ImageTrack->Canvas->Brush->Color=clMaroon;
ImageTrack->Canvas->Rectangle(0,0,ImageTrack->Width*(float(MediaPlayer1->Position)/float(MediaPlayer1->Length)),ImageTrack->Height);
}
}
我找出原因啦,应该是这个进度条的定时器影响,因为之前读取歌曲的时候失败了,但是这个定时器的TheLength=MediaPlayer1->Position/1000;语句一直执行,所以才会不停地弹出警告,现在只弹一次警告了,算是好多了,呵呵,谢谢妖哥,以后多多关照啊。
#14
解决了就好.
#15
哎呀,我就是想看这个警告 No MCI device open 是怎么消除的。。。。。最后还是没消除啊
#1
显示乱码的这个歌曲名字到底是什么呢?
#2
哈哈,那是一首越南歌,估计是播放器识别不了吧,其他还有一些文件名字不规则那些也放不了,我都不知道该怎么办。。。
#3
#4
ListBox里面我存的全部是歌曲路径,不懂怎么筛选出文件名。
#5
看起来, 好像是MediaPlayer不支持Unicode文件名.
2009以后的版本中可能会支持.
2009以后的版本中可能会支持.
#6
简单方法就是判断文件名中是否包含有'?'这个字符.
ListBox1->Items->Strings[ListBox1->ItemIndex].Pos("?") > 0
#7
有什么办法让播放器识别不了那首歌曲之后自动跳出到其他地方吗?
#8
晕, 插队了. 看我6楼回复即可.
#9
谢谢了,现在我的程序都写了那么多了,我想知道那个警告窗口是TMediaPlayer给的吗?怎么会一直不停啊?
#10
警告窗口是MediaPlayer弹出的. 一直不停的弹, 这个原因不明.
#11
记得以前是只弹一次而已的,现在是不是程序写到了滚动条之后受到太多定时器的影响啊,我屏蔽掉所有定时器,还是那样。。。
#12
可能是和你的代码有关系.
不过你屏蔽掉文件名异常的歌曲就行了.
不过你屏蔽掉文件名异常的歌曲就行了.
#13
void __fastcall TForm1::Timer4Timer(TObject *Sender)
{
int TheLength;
int mMinutes;
int mSeconds;
int numbe;
int time1,time2,time4,time5;
numbe=ListBox1->ItemIndex;
if(numbe==-1)
{
time1=0;
time2=0;
time4=0;
time5=0;
Label4->Caption=time1;
Label5->Caption=time2;
Label6->Caption=time4;
Label7->Caption=time5;
}
else
{
MediaPlayer1->TimeFormat=tfMilliseconds;
TheLength=MediaPlayer1->Position/1000;
//mHours=TheLength/3600;
mMinutes=(TheLength%3600)/60;
mSeconds=(TheLength%3600)%60;
time1=(mMinutes%60)/10;
time2=(mMinutes%60)%10;
time4=mSeconds/10;
time5=mSeconds%10;
Label4->Caption=time1;
Label5->Caption=time2;
Label6->Caption=time4;
Label7->Caption=time5;
MediaPlayer1->TimeFormat=tfMilliseconds;
ImageTrack->Canvas->Brush->Color=clBlack;
ImageTrack->Canvas->Rectangle(0,0,ImageTrack->Width,ImageTrack->Height);
ImageTrack->Canvas->Brush->Color=clMaroon;
ImageTrack->Canvas->Rectangle(0,0,ImageTrack->Width*(float(MediaPlayer1->Position)/float(MediaPlayer1->Length)),ImageTrack->Height);
}
}
我找出原因啦,应该是这个进度条的定时器影响,因为之前读取歌曲的时候失败了,但是这个定时器的TheLength=MediaPlayer1->Position/1000;语句一直执行,所以才会不停地弹出警告,现在只弹一次警告了,算是好多了,呵呵,谢谢妖哥,以后多多关照啊。
#14
解决了就好.
#15
哎呀,我就是想看这个警告 No MCI device open 是怎么消除的。。。。。最后还是没消除啊