游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4953|回复: 12

请问:我用 IDirectSoundBuffer8::Play() 放不出声音?

[复制链接]

1

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2009-6-5 20:54:00 | 显示全部楼层 |阅读模式
[em24]

我的代码:


// 创建次缓冲区

BOOL
MyDirectSound::CreateSecondaryBuffer( const char* const pSoundData,        // 声音数据的指针
                                          DWORD SoundDataSize )                //  声音数据的大小
{
    if( NULL == pSoundData )
    {
          ::MessageBox( NULL, _T("声音数据为空"), _T(""), MB_OK );
          return FALSE;
    }

WAVEFORMATEX WaveFormat;
::ZeroMemory( &WaveFormat, sizeof( WAVEFORMATEX ) );

WaveFormat.wFormatTag = WAVE_FORMAT_PCM;
WaveFormat.nChannels = 2;
WaveFormat.nSamplesPerSec = 22050;
WaveFormat.wBitsPerSample = 16;
WaveFormat.nBlockAlign = 4;
WaveFormat.nAvgBytesPerSec = ( WaveFormat.nSamplesPerSec ) * ( WaveFormat.nBlockAlign );

DSBUFFERDESC BufferDesc;                                          // 缓冲区描述
::ZeroMemory( &BufferDesc, sizeof( DSBUFFERDESC ) );

BufferDesc.dwSize = sizeof( DSBUFFERDESC );
BufferDesc.dwFlags = DSBCAPS_CTRLVOLUME | DSBCAPS_GLOBALFOCUS | DSBCAPS_STATIC; // 缓冲区可设置
BufferDesc.dwBufferBytes = SoundDataSize;         
BufferDesc.lpwfxFormat = &WaveFormat;

  
LPDIRECTSOUNDBUFFER pSoundBuffer;                                              // 次缓冲区指针

if ( FAILED( DSoundObject->CreateSoundBuffer( &BufferDesc, &pSoundBuffer, NULL ) ) )
{
    ::MessageBox( NULL, _T(" DSoundObject->CreateSoundBuffer() 失败 "), _T(""), MB_OK );

    return FALSE;
}


// 获取 IDrictSoundBuffer8 缓冲区接口给 Buffer8InterFace( 类型为 LPDIRECTSOUNDBUFFER8 )


if( FAILED( pSoundBuffer->QueryInterface( IID_IDirectSoundBuffer8,
                                          ( LPVOID* )&Buffer8InterFace )  ) )
{
    pSoundBuffer->Release();              

    ::MessageBox( NULL, _T(" pSoundBuffer->QueryInterface() 失败 "), _T(""), MB_OK );
  
    return FALSE;
}


pSoundBuffer->Release();            


LPVOID BufferPointer = NULL;                // 缓冲区的位置指针
DWORD LumpSize = 0;                        // 锁定块的大小

if( FAILED( Buffer8InterFace->Lock( 0, 0, &BufferPointer, &LumpSize,
                                    NULL, 0, DSBLOCK_ENTIREBUFFER ) ) )      // 锁定缓冲区
{
    ::MessageBox( NULL, _T(" Buffer8InterFace->Lock() 失败 "), _T(""), MB_OK );

    return FALSE;
}


::CopyMemory( BufferPointer, pSoundData, LumpSize );      // 向缓冲区的锁定块写入数据


if( FAILED( Buffer8InterFace->Unlock( BufferPointer, LumpSize, NULL, 0 ) ) )      // 解锁缓冲区
{
      ::MessageBox( NULL, _T(" Buffer8InterFace->Unlock() 失败 "), _T(""), MB_OK );

      return FALSE;
}


Buffer8InterFace->SetCurrentPosition( 0 );


if( FAILED( Buffer8InterFace-&gtlay( 0, 0, NULL ) ) )  
{
    ::MessageBox( NULL, _T(" Buffer8InterFace->Play() 失败 "), _T(""), MB_OK );

    return FALSE;
}


return TRUE;
}


以上的代码,前面执行时没发现问题,

执行到 if( FAILED( Buffer8InterFace->Play( 0, 0, NULL ) ) )  时出现问题。

::MessageBox( NULL, _T(" Buffer8InterFace->Play() 失败 "), _T(""), MB_OK );

被调用。


请问是何原因?


2万

主题

2万

帖子

6万

积分

论坛元老

Rank: 8Rank: 8

积分
66489
QQ
发表于 2009-6-5 23:04:00 | 显示全部楼层

Re:请问:我用 IDirectSoundBuffer8::Play() 放不出声音?

你可以试试这个

http://www.hyzgame.com.cn/middleware/OpenALEE/openalee.htm

1

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
 楼主| 发表于 2009-6-6 00:15:00 | 显示全部楼层

Re: Re:请问:我用 IDirectSoundBuffer8::Play() 放不出声音?

hyzboy: Re:请问:我用 IDirectSoundBuffer8:lay() 放不出声音?

你可以试试这个

http://www.hyzgame.com.cn/middleware/OpenALEE/openalee.htm


我想用 DirectSound 来做,楼上的好意心领了。 [em2]

59

主题

404

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
发表于 2009-6-6 10:22:00 | 显示全部楼层

Re:请问:我用 IDirectSoundBuffer8::Play() 放不出声音?

我也有用Dsound的意向..因为我的绘图是用的D3D, 感觉用一套directX更好些.

1

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
 楼主| 发表于 2009-6-6 15:33:00 | 显示全部楼层

Re: Re:请问:我用 IDirectSoundBuffer8::Play() 放不出声音?

flyue: Re:请问:我用 IDirectSoundBuffer8:lay() 放不出声音?

我也有用Dsound的意向..因为我的绘图是用的D3D, 感觉用一套directX更好些.


多多交流啊 [em3]

59

主题

404

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
发表于 2009-6-6 16:31:00 | 显示全部楼层

Re:请问:我用 IDirectSoundBuffer8::Play() 放不出声音?

好啊. 你的qq号多少?

1

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
 楼主| 发表于 2009-6-6 19:24:00 | 显示全部楼层

Re: Re:请问:我用 IDirectSoundBuffer8::Play() 放不出声音?

flyue: Re:请问:我用 IDirectSoundBuffer8:lay() 放不出声音?

好啊. 你的qq号多少?


QQ:470214308

我和老婆共用一个 QQ,所以请注明是找我的。

我很少用 QQ,喜欢在论坛。

1

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
 楼主| 发表于 2009-6-7 09:41:00 | 显示全部楼层

Re:请问:我用 IDirectSoundBuffer8::Play() 放不出声音?

help me  [em19]

1

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
 楼主| 发表于 2009-6-7 20:25:00 | 显示全部楼层

Re:请问:我用 IDirectSoundBuffer8::Play() 放不出声音?

d

1

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
 楼主| 发表于 2009-6-8 19:54:00 | 显示全部楼层

Re:请问:我用 IDirectSoundBuffer8::Play() 放不出声音?

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

本版积分规则

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

GMT+8, 2025-12-17 02:44

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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