DELPHI 怎么写 DirectX 的声音播放 (非高手莫进!!!) [red]答对给你双倍的分!!!![/red](200分)

  • 主题发起人 主题发起人 yangyl
  • 开始时间 开始时间
Y

yangyl

Unregistered / Unconfirmed
GUEST, unregistred user!
DELPHI 怎么写 DirectX 的声音播放 ??????
要求是用能够动态调入WAV文件的!! 要支持多音层的!!!
用DelphiX的人 如果能够动态调入WAV也行(要多音层),但不是用里面Audio控件的(因为
这控件是用来做游戏的背景音乐的,不支持多音层)

[red]如果能够解答我的问题的话,我可以再给200!!!!!!![/red]

 
为什么要用delphix啊
你找个directx 的 delphi 库文件。
用原始api看看
delphix的声音那一块封装的可能不够
 
难度的却很大!!!!!
关注!!!
 
直接用 DirectX 吧,加一个 DELPHI 的调用文件就可以直接使用了。
 
我就是像知道怎么直接用 DirectX 嘛。
请问大家有相关的资料的地址或相关的文章贴上来嘛。
真的非常感谢啊
 
(*==========================================================================;
*
* Copyright (C) 1995-1997 Microsoft Corporation. All Rights Reserved.
*
* File: dsound.h piece of ksmedia.h
* Content: DirectSound include file
*
*
* DirectX 7.0 Delphi adaptation by Erik Unger
* DirectX 8.0 Delphi adaptation by Ivo Steinmann
*
* Modified: 6-May-2001
*
* do
wnload: http://www.delphi-jedi.org/DelphiGraphics/
* E-Mail: isteinmann@bluewin.ch
*
***************************************************************************)

(*==========================================================================;
* History :
*
* 6-Aug-2001 (Tim Baumgarten) : Corrected in IDirectSoundBuffer : "GetCurrentPosition(lpdwCapturePosition, lpdwReadPosition : PDWORD)" to "GetCurrentPosition(lpdwPlayPosition, lpdwReadPosition : PDWORD)"
* 6-May-2001 (Ivo Steinmann) : Changed "SetFormat(const lpcfxFormat: TWaveFormatEx)" to "SetFormat(lpcfxFormat: PWaveFormatEx)"
* 25-Mar-2001 (Tim Baumgarten) : Changed "lpDSCFXDesc : TDSCEffectDesc" to "lpDSCFXDesc : PDSCEffectDesc" in TDSCBufferDesc_DX8
* 26-Nov-2000 (Tim Baumgarten) : Returncodes are now typecasted with HResult
*
***************************************************************************)

unit DirectSound;

{$MINENUMSIZE 4}
{$ALIGN ON}

//{$DEFINE DIRECTX6}
//{$DEFINE DIRECTX7}

interface

uses
Windows,
MMSystem,
DirectXGraphics;

var
DSoundDLL : HMODULE;
 
(*==========================================================================;
*
* Copyright (C) 1995-1997 Microsoft Corporation. All Rights Reserved.
*
* Files: dls1.h dls2.h dmdls.h dmerror.h dmksctrl.h dmplugin.h
* DMusBuff.h dmusicc.h dmusici.h dmusicf.h dmusbuff.h
* Content: DirectMusic
*
* DirectX 7.0 Delphi adaptation by Erik Unger
* DirectX 8.0 Delphi adaptation by Ivo Steinmann
*
* Modified: 26-Nov-2000
*
* do
wnload: http://www.delphi-jedi.org/DelphiGraphics/
* E-Mail: isteinmann@bluewin.ch
*
***************************************************************************)

(*==========================================================================;
* History :
*
* 26-Nov-2000 (Tim Baumgarten) : Returncodes are now typecasted with HResult
*
***************************************************************************)

{$MINENUMSIZE 4}
{$ALIGN ON}

unit DirectMusic;

interface

uses
Windows,
MMSystem,
DirectSound,
ActiveX;

function MAKE_HRESULT(sev,fac,code: DWORD) : HResult;

type
mmioFOURCC = array [0..3] of Char;
 
看到网址了吗!
 
看到了,但好像不太明白噢……[:(]
 
就是上下面的网址下载相关的文件包就行了:
http://www.delphi-jedi.org/DelphiGraphics/
 
谢谢,但我搞好了一定加你分的…… ^_^

能交个朋友吗?
 
用DelphiX也行
 
delphiX不行吖,waveList不能直接调入WAV文件,用audio就可以,但不能支持多音层同时播放噢,
请问你会用“流”吗?我想有可能调进去WaveList的噢。

还有,给各位,交个朋友好吗?我的邮箱是
yangyongl@21cn.com

 
我不是高手,可我偏要进来
 
一年前我用它写过局部网语音对讲和广播程序
delphiX很好的.

 
http://kuga.51.net/show_soft.php?id=18
 
为何如此简单问题没人答呢?
唉...
论坛越好,思考的人越少
窃取别人劳动成果的人越多了...
procedure TForm1.CaptureStreamEvent(Sender: TObject);
var
voice_buf: array[0..1023] of char;
fa_ci, fa_yu, voice_streamsize, i, j: integer;
voicestream: Tmemorystream;
novoice: char;
nosend: boolean;
begin

voicestream := Tmemorystream.Create;
voicestream.Clear;
voicestream.Position := 0;
voicestream.CopyFrom(capture, capture.filledSize);
voicestream.Position := 0;
nosend := false;
for j := 1 to voicestream.size div 2do
//静音检测
begin

novoice := chr($00);
voicestream.ReadBuffer(novoice, 1);
if (novoice <= chr($81)) and (novOice >= chr($7F)) then

nosend := true
else

begin

nosend := false;
break;
end;

end;

if nosend = true then

begin

voicestream.Clear;
voicestream.Free;
exit;
end;

voicestream.Position := 0;
voice_streamsize := voicestream.Size;
//发送语音
voice_buf := #0;
fa_ci := voice_streamsize div 1024;
fa_yu := voice_streamsize mod 1024;
for i := 1 to fa_cido

begin

voicestream.ReadBuffer(voice_buf, 1024);
SVoiceSocket.Send(@voice_buf, 1024);
end;

if fa_yu > 0 then

begin

voicestream.ReadBuffer(voice_buf, fa_yu);
SVoiceSocket.Send(@voice_buf, fa_yu);
end;


voicestream.Clear;
voicestream.Free;

end;

 
to jingtao:你是陈经滔吧?
我可真佩服你;
我想问你一下,我在delphi6中用acmdialog时为什么老是报错?
另外你不是解决了语音实时传播时的延迟问题,能告诉我是如何解决的吗?
谢谢
fjx_jwf@sina.com.cn
 
直接看我的例子吧:
用DirectX Sound同时播放两个wav文件:
http://kuga.51.net/download/files/dstest1.rar
 
后退
顶部