SndPlaySound播放的声音不正常(20分)

  • 主题发起人 主题发起人 6ysnow
  • 开始时间 开始时间
6

6ysnow

Unregistered / Unconfirmed
GUEST, unregistred user!
各位,我想在系统发生告警的时候播放指定的文件,看到大家都说用SndPlaySound这个函数.
我也尝试了一下.可是播放的声音怎么是奇怪的嗒嗒的声音,没有音乐.
我是这样调用的:
SndPlaySound('c/a82.wav',SND_ASYNC or SND_LOOP);
难道说这样做不行?还有别的办法吗?
希望指点!!!!!
 
你确认你引用的声音文件不是发这种声音吗
 
播放自定义的声音
  如果你要播放基本的系统声音,则要用适当的参数调用MessageBeep。如果你要用扬声器发声,就调用MessageBeep(-1);。

  要播放一个WAV声音,你可以使用对象TmediaPlayer,但如果你要快速播放,最简单的方法是调用API函数sndPlaySound(在mmsystem单元中声明)。
  
  例如:
procedure TForm1.Button1Click(Sender: TObject);
begin

sndPlaySound('C:/Windows/Media/Tada.wav',
SND_NODEFAULT Or SND_ASYNC Or SND_LOOP);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin

sndPlaySound(nil, 0);
//停止发音
end;

如果你要经常播放一种声音,就应该考虑把文件载入内存并从内存中播放:
var
tada: string;
procedure TForm1.Button1Click(Sender: TObject);
begin

sndPlaySound(Pointer(tada), SND_MEMORY
Or SND_NODEFAULT Or SND_ASYNC);
end;

initialization
tada := LoadFile('C:/Windows/Media/Tada.wav');
finalization
tada := ';
//释放字符串占用的内存。
end.
 
你可以把一个或多个wave文件嵌入可执行文件中,并从文件中播放。首先建立一个资源文件(.RES)。要做到这点,就要建立一个.RC文件,例如一个叫做sounds.rc的文件:
tada wave c:/windows/media/tada.wav
chimes wave c:/windows/media/chimes.wav

  然后用资源编译器进行编译(Delphi/Bin directory中的BRCC32.EXE),然后就得到一个名为sounds.res的文件,你可以用指令把它装入项目中。使用SND_RESOURCE标志,调用PlaySound(而不是sndPlaySound),就可以从可执行文件中播放声音。
{$R sounds.res}
procedure TForm1.Button1Click(Sender: TObject);
begin

PlaySound('chimes', hInstance, SND_RESOURCE or SND_SYNC);
PlaySound('tada', hInstance, SND_RESOURCE or SND_ASYNC);
end;


  同样,如果你要经常播放一种声音,就应该考虑把文件装入内存并从内存中播放:
{$R sounds.res}
var
tada: Pointer;
procedure TForm1.Button1Click(Sender: TObject);
begin

sndPlaySound(tada, SND_MEMORY
or SND_NODEFAULT or SND_ASYNC);
end;

initialization
// 此处我们使用类型转换从而避免使用另一个变量
tada := Pointer(FindResource(hInstance, 'tada', 'wave'));
if tada <> nil then
begin

tada := Pointer(LoadResource(hInstance, HRSRC(tada)));
if tada <> nil then
tada := LockResource(HGLOBAL(tada));
end;

end.
 
SiWeiLiuLang:我确认我的文件是没有问题的,关键是我怎么听不到正常的声音??
你说了那么多,对我意义不大啊,!
 
SndPlaySound('c/a82.wav',SND_ASYNC);试下
 
当然前面路径要写对啊
 
SndPlaySound('c/a82.wav',SND_ASYNC);的话,就只是嗒一下.不循环嗒了!!!!
 
你先用播放器打开这个文件听下
 
按道理调用没问题的
 
我听过了的啊.要不你帮我做一个demo发给我???
我的邮箱:liuzuofei@126.com!
谢谢(或者:QQ:110317867)
 
我也用这个函数试过了,就是循环播放的时候会发生不正常,如果只播放一次,基本不会有什么问题的.
 
还是没有解决啊! 好奇怪的问题,网上帖子多的很,多是这么说,为什么我就不能成功??
大家都没有尝试过??
还有:用下面的函数可以播放mid文件.,可是其余的为啥不行?和文件格式有关???
MCISendString('OPEN C:/v3.mp3 TYPE SEQUENCER ALIAS NN', '', 0, 0);
MCISendString('PLAY NN FROM 0', '', 0, 0);
MCISendString('CLOSE ANIMATION', '', 0, 0);
 
帮顶!

http://www.source520.com

站长开发推广同盟 站长朋友的终极驿站
同时拥有海量源码电子经典书籍下载

http://www.source520.com/search/search.asp

&quot;编程.站长&quot;论坛搜索引擎-----为中国站长注入动力!
 
后退
顶部