游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4584|回复: 13

关于用DSHOW播放声音的问题

[复制链接]

9

主题

36

帖子

36

积分

注册会员

Rank: 2

积分
36
发表于 2005-2-18 18:03:00 | 显示全部楼层 |阅读模式
相关代码如下:

void InitAudio()
{
        CoInitialize(NULL);
        CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC,IID_IGraphBuilder,(void**)&pGBuilder);
        pGBuilder->QueryInterface(IID_IMediaControl,(void**)&pMControl);
        pGBuilder->QueryInterface(IID_IMediaPosition,(void**)&pMPos);
        CHAR strSoundPath[MAX_PATH];
        WCHAR wstrSoundPath[MAX_PATH];
        GetCurrentDirectory(MAX_PATH,strSoundPath);
        strcat(strSoundPath,"time.mp3");
        MultiByteToWideChar(CP_ACP,0,strSoundPath,-1,wstrSoundPath,MAX_PATH);
        pGBuilder->RenderFile(wstrSoundPath,NULL);
}

int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    InitAudio();
    for(;;)
    {
        pMPos->put_CurrentPosition(0);
        pMControl->Run();
    }
}

编译可以正常通过,文件也在,但却没有声音,是怎么回事呢?

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
发表于 2005-2-19 11:19:00 | 显示全部楼层

Re:关于用DSHOW播放声音的问题

把time.mp3改为\\time.mp3

9

主题

36

帖子

36

积分

注册会员

Rank: 2

积分
36
 楼主| 发表于 2005-2-19 12:31:00 | 显示全部楼层

Re:关于用DSHOW播放声音的问题

改了,好象还是不行

9

主题

36

帖子

36

积分

注册会员

Rank: 2

积分
36
 楼主| 发表于 2005-2-19 12:55:00 | 显示全部楼层

Re:关于用DSHOW播放声音的问题

贴出完整代码,大家看看问题在哪里,谢谢
#include <windows.h>
#include <d3d9.h>
#include <d3dx9.h>
#include <dinput.h>
#include <dshow.h>

#define KEYDOWN(key)(buffer[key] & 0x80)
#define SAFE_RELEASE(p) {if(p){(p)->Release();(p)=NULL;}}

HWND hWnd;
MSG msg;
LPDIRECTINPUT8 pInput;
LPDIRECTINPUTDEVICE8 pKeyboard, pMouse;
DIMOUSESTATE mouse_stat;
char buffer[256];
IGraphBuilder* pGBuilder;
IMediaControl* pMControl;
IMediaPosition* pMPos;
bool bTemp = TRUE;

LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
        return DefWindowProc(hWnd, message, wParam, lParam);
}

static BOOL InitWindow( HINSTANCE hInstance, int nCmdShow )
{
......
}

void InitInput()
{
......
}

void InitAudio()
{
......
}

void CloseAll()
{
......
}

int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    InitWindow(hInstance, nCmdShow);
    InitInput();
    InitAudio();
    for(;;)
    {
        pKeyboard->GetDeviceState(sizeof(buffer),(LPVOID)&buffer);
        if(KEYDOWN(DIK_ESCAPE))
        {
            CloseAll();
            return 0;
        }
        if(bTemp = TRUE)
        {
        pMPos->put_CurrentPosition(0);
        pMControl->Run();
        bTemp = FALSE;
        }
    }
    return 0;
}

9

主题

36

帖子

36

积分

注册会员

Rank: 2

积分
36
 楼主| 发表于 2005-2-19 12:59:00 | 显示全部楼层

Re:关于用DSHOW播放声音的问题

啊,试出来了!加\\是对的,并且要把播放语句移到FOR循环外才可以,谁知道这是为什么啊,我在FOR循环内通过一个BOOL变量控制应该也可以啊

9

主题

36

帖子

36

积分

注册会员

Rank: 2

积分
36
 楼主| 发表于 2005-2-19 16:48:00 | 显示全部楼层

Re:关于用DSHOW播放声音的问题

进一步尝试发现
if(bTemp = TRUE)
{
    pMPos->put_CurrentPosition(0);
    pMControl->Run();
    bTemp = FALSE;
}
将pMPos->put_CurrentPosition(0);写在FOR循环外就没问题,写进IF里就不行,真奇怪啊,哪位高手来解答一下啊

15

主题

1268

帖子

1268

积分

金牌会员

Rank: 6Rank: 6

积分
1268
发表于 2005-2-20 11:42:00 | 显示全部楼层

Re:关于用DSHOW播放声音的问题

哈哈,楼主最好不要用dshow做音频播放,速度比直接用ds,dm慢,反正他也是调用的ds,dm

9

主题

36

帖子

36

积分

注册会员

Rank: 2

积分
36
 楼主| 发表于 2005-2-21 15:05:00 | 显示全部楼层

Re:关于用DSHOW播放声音的问题

晕,犯了个超级低级错误,羞愧啊!

17

主题

165

帖子

167

积分

注册会员

Rank: 2

积分
167
发表于 2005-2-21 17:02:00 | 显示全部楼层

Re:关于用DSHOW播放声音的问题

用Dm或DS怎么播放mp3呢?
而且我照抄楼主的代码怎么没声音呢?
有文件,怪事。

15

主题

1268

帖子

1268

积分

金牌会员

Rank: 6Rank: 6

积分
1268
发表于 2005-2-21 20:05:00 | 显示全部楼层

Re: Re:关于用DSHOW播放声音的问题

kyo1984: Re:关于用DSHOW播放声音的问题

用Dm或DS怎么播放mp3呢?
而且我照抄楼主的代码怎么没声音呢?
有文件,怪事。

sf_200522120521.gif
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-24 11:05

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表