======================================================
注:本文源代码点此下载
======================================================
#1楼 2011-01-19 17:40 刘鹏。
万一老师,怎么播放自己加密后的视频文件呢。。。。。。
delphi2010有directx处理的相关单元,我用的是delphi2007,在importcomponent 里找到directx 8相关接口生成单元,看了感觉就像天书啊,太复杂了。。。
回复 引用 查看
#2楼[楼主] 2011-01-19 17:52 万一
@刘鹏。
关于 directx 的难度我正在体会者; 视频相关的东西还没学到.
回复 引用 查看
#3楼 2011-01-19 18:00 巅枫
@万一
谢谢老师...实在没想到老师用directsound做读取资源的例子...把我吓坏了...我先慢慢消化...呵呵
回复 引用 查看
#4楼 2011-01-19 18:04 刘鹏。
@万一
万一老师做个开路者,我们跟在后面。。。一起学习~~
回复 引用 查看
#5楼[楼主] 2011-01-19 18:19 万一
@刘鹏。
共同学习.
回复 引用 查看
#6楼[楼主] 2011-01-19 18:20 万一
@巅枫
用这个例子播放你给我的枪声很过瘾, 谢谢了.
回复 引用 查看
#7楼 2011-01-19 19:09 巅枫
@万一 要是哪天万老师再编个游戏的例子出来,那就更过瘾了…要是我能编出来…哈…我会睡不着觉的…
回复 引用 查看
#8楼 2011-01-20 13:45 巅枫
@万一
万老师,这个例子我运行出错,程序界面如下:
http://pic002.cnblogs.com/images/2011/163244/2011012013332683.png
点击第一个按钮,出错信息如下:
http://pic002.cnblogs.com/images/2011/163244/2011012013335428.png
用d2010的资源编辑器添加wav时,如下图(没有wave这个类型):
http://pic002.cnblogs.com/images/2011/163244/2011012013345884.png
我原来就是因为这个,所以才想让万老师做个简单的例子看看,没想到这个例子也出这样的错误...希望万老师能给我解惑...
测试环境:xp,d2010
回复 引用 查看
#9楼[楼主] 2011-01-20 14:05 万一
@巅枫
1、添加资源时都指定 resource type 为 wave
2、另外测试中的三个资源的标示分别是: wav_1、wav_2、wav_3
你这两步都有问题, 再仔细看看上面的图.
回复 引用 查看
#10楼 2011-01-20 14:37 巅枫
@万一
万老师,没有wave这个类型我选择,如下图:
http://pic002.cnblogs.com/images/2011/163244/2011012014321420.png
不知道老师是用记事本添加资源那种方式还是d2010资源编辑器那种方式做的资源?
回复 引用 查看
#11楼 2011-01-20 17:37 尚文雨
看他的截图,似乎是用的delphi的资源编辑器哪种加的资源,我在delphi2010里添加资源也没有找到wave这个类型.
回复 引用 查看
#12楼[楼主] 2011-01-20 17:57 万一
@尚文雨
不用找, 输入就行.
回复 引用 查看
#13楼 2011-01-20 17:57 巅枫
@尚文雨
因为为这个,我看了不少英文网站,呵呵,可是还是没搞定...不知是怎么了。。
回复 引用 查看
#14楼[楼主] 2011-01-20 18:02 万一
@巅枫
不是大问题, 只是 delphi ide 的这个资源编辑器不是很完善;
缺什么类型, 它允许输入就够了.
回复 引用 查看
#15楼 2011-01-20 19:06 巅枫
@万一
万老师,你用是delphi什么版本啊?我按你说的做了,但修改确定后它那个类型还会变回来,这两天搞的我都没心情搞其他研究了,我真是没折了,想用记事本编rc的那种方法吧,试了后没有出错,但是却播放不出声音来(wav文件没问题),不知问题出在哪里,如果可以,老师能帮我解决这个一下这个问题吗?
回复 引用 查看
#16楼[楼主] 2011-01-20 19:17 万一
@巅枫
用记事本编 rc 应该没有问题, 可能是写得不合适.
用 ide 上的这个工具, 有个注意事项(以前博文中谈过的),
建好后先保存, 重新打开后再修改, 这是 2009 就存在的问题, 不知现在好了没有.
回复 引用 查看
#17楼[楼主] 2011-01-20 19:26 万一
@巅枫
如果再不行, 我可以给你出个录像.
回复 引用 查看
#18楼 2011-01-20 19:36 巅枫
非常感谢,如果有录像那是再好不过
回复 引用 查看
#19楼 2011-01-20 19:48 巅枫
刚刚试过,保存后也是不能修改,要令万老师费心了,谢谢
回复 引用 查看
#20楼[楼主] 2011-01-20 22:44 万一
@巅枫
http://files.cnblogs.com/del/directsound_7.rar
回复 引用 查看
#21楼 2011-01-21 10:31 尚文雨
可能是版本的问题的
delphi2010中按录像上操作确实不得行,哪个类型输入也没有用,录像上的版本是xe.空闲了升级成xe试试了.
回复 引用 查看
#22楼[楼主] 2011-01-21 10:44 万一
@尚文雨
按我说的再试试:
1、先导入几个 wav, 什么也别改, 直接 ok;
2、重新打开, 再改.
我现在没装 2010, 凭印象说的.
回复 引用 查看
#23楼 2011-11-26 17:05 yehuiyan
想在dll中使用directsound,编译能通过,使用时会内存出错,还不能发声
library readwave;
uses
windows,
system.sysutils,
system.classes,
directsound,
mmsystem;
{$r *.res}
const wavpath= 'c:\temp\test.wav'; //测试用的 wave, 须保证文件存在并注意路径权限, 且只能是 pcm 格式的 wave 文件
var
mydsound: idirectsound8;
buf: idirectsoundbuffer; //缓冲区对象
dllhandle:thandle;
{从 wave 文件中获取 twaveformatex 结构的函数}
function getwavefmt(filepath: string; var fmt: twaveformatex): boolean;
var
hfile: hmmio;
ckiriff,ckifmt: tmmckinfo;
begin
result := false;
hfile := mmioopen(pchar(filepath), nil, mmio_read);
if hfile = 0 then exit;
zeromemory(@ckiriff, sizeof(tmmckinfo));
zeromemory(@ckifmt, sizeof(tmmckinfo));
zeromemory(@fmt, sizeof(twaveformatex));
ckifmt.ckid := mmiostringtofourcc('fmt', 0);
mmiodescend(hfile, @ckiriff, nil, mmio_findriff);
if (ckiriff.ckid = fourcc_riff) and
(ckiriff.fcctype = mmiostringtofourcc('wave',0)) and
(mmiodescend(hfile, @ckifmt, @ckiriff, mmio_findchunk) = mmsyserr_noerror) then
result := (mmioread(hfile, @fmt, ckifmt.cksize) = ckifmt.cksize);
mmioclose(hfile, 0);
end;
{从 wave 文件中获取波形数据的函数}
function getwavedata(filepath: string; var stream: tmemorystream): boolean;
var
hfile: hmmio;
ckiriff,ckidata: tmmckinfo;
begin
result := false;
hfile := mmioopen(pchar(filepath), nil, mmio_read);
if hfile = 0 then exit;
zeromemory(@ckiriff, sizeof(tmmckinfo));//zeromemory要window单元的支持
zeromemory(@ckidata, sizeof(tmmckinfo));
ckidata.ckid := mmiostringtofourcc('data', 0);
mmiodescend(hfile, @ckiriff, nil, mmio_findriff);
if (ckiriff.ckid = fourcc_riff) and
(ckiriff.fcctype = mmiostringtofourcc('wave',0)) and
(mmiodescend(hfile, @ckidata, @ckiriff, mmio_findchunk) = mmsyserr_noerror) then
begin
stream.size := ckidata.cksize;
result := (mmioread(hfile, stream.memory, ckidata.cksize) = ckidata.cksize);
end;
mmioclose(hfile, 0);
end;
function cformcreate: boolean; stdcall;
begin
system.reportmemoryleaksonshutdown := true; //让程序自动报告内存泄露
end;
function cb1: boolean; stdcall;
var
bufdesc: tdsbufferdesc;//建立缓冲区需要的结构
wavformat: twaveformatex; //从 wave 中提取的结构
wavdata: tmemorystream;//从 wave 中提取的波形数据
p1: pointer;//从缓冲区获取的写指针
n1: dword;//要写入缓冲区的数据大小
begin
{从 wave 文件中读取格式与波形数据}
if not getwavefmt(wavpath, wavformat) then exit;
wavdata := tmemorystream.create;
if not getwavedata(wavpath, wavdata) then begin wavdata.free; exit; end;
{建立设备对象, 并设置写作优先级}
dllhandle:=getmodulehandle('keyboarhook.dll'); //取得dll自己的句柄
directsoundcreate8(nil, mydsound, nil);
mydsound.setcooperativelevel(dllhandle, dsscl_normal);
{填充建立缓冲区需要的结构}
zeromemory(@bufdesc, sizeof(tdsbufferdesc));
bufdesc.dwsize := sizeof(tdsbufferdesc);
bufdesc.dwflags := dsbcaps_static;//指定使用静态缓冲区
bufdesc.dwbufferbytes := wavdata.size; //数据大小
bufdesc.lpwfxformat := @wavformat;//数据格式
//bufdesc.guid3dalgorithm := ds3dalg_default; //这个暂不需要
{建立缓冲区}
mydsound.createsoundbuffer(bufdesc, buf, nil);
{锁定缓冲区内存以获取写入地址和写入大小}
buf.lock(0, 0, @p1, @n1, nil, nil, dsblock_entirebuffer);
{写入}
wavdata.position := 0;
copymemory(p1, wavdata.memory, n1);
wavdata.free;
{解锁}
buf.unlock(p1, n1, nil, 0);
{播放}
buf.play(0, 0, 0);
end;
function cb2: boolean; stdcall;
begin
buf.play(0, 0, dsbplay_looping);
end;
function cb3: boolean; stdcall;
begin
buf.stop;
end;
function cb4: boolean; stdcall;
begin
buf := nil;
mydsound := nil;
end;
exports cformcreate,cb1,cb2,cb3,cb4;
begin
end.
回复 引用 查看
注册用户登录后才能发表评论,请 登录 或 注册,返回博客园首页。
最新it新闻:
·ios 5.1 beta3文件预示未来 siri有可能支持 ipad和 ipod touch
·android平台12月广告浏览份额51.6% 超越ios
» 更多新闻...
最新知识库文章:
copyright ©2012 万一 powered by: 博客园 模板提供:沪江博客
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/