论坛风格切换切换到宽版
  • 4740阅读
  • 9回复

[求助]DirectMusic和DirectSound疑问 [复制链接]

上一主题 下一主题
离线上帝之手
 
发帖
64
樱饼
0
博丽神社的喝茶券(威望)
0
春度
0
交易币
0
只看楼主 倒序阅读 楼主  发表于: 2009-09-17
大家好,在制作音乐和音效的时候,发生了点小问题,请大家看看,是什么问题:

1。背景音乐我使用的播放MP3,这个基本没什么问题,就是音乐切换的时候,会停止的很快,然后进行以后音乐的播放。我的代码如下:

MP3初始化:

// MP3播放变量
IGraphBuilder* m_pGraph;                        // 过滤器图表管理器
IMediaControl* m_pMediaControl;                        // 媒体控制器
IMediaPosition* m_pMediaPosition;                    // 媒体定位器

// MP3播放初始化
VOID SHWCGameMusic::InitialiseMP3() {
    CoInitialize(NULL);
    // 初始化过滤器图表管理器
    CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_IGraphBuilder, (VOID**)&m_pGraph);
    // 初始化媒体控制器
    m_pGraph->QueryInterface(IID_IMediaControl, (VOID**)&m_pMediaControl);
    // 初始化媒体定位器
    m_pGraph->QueryInterface(IID_IMediaPosition, (VOID**)&m_pMediaPosition);
}

// MP3播放函数
VOID SHWCGameMusic::MP3Player(char* filename) {
                         // 转换文件名为Unicode
    MultiByteToWideChar(CP_ACP, 0, filename, -1, wstrSoundPath, 100);
    // 播放MP3
    m_pGraph->RenderFile(wstrSoundPath, NULL);
    m_pMediaPosition->put_CurrentPosition(0);
    m_pMediaControl->Run();
}



2。音效方面问题比较大,我采用的是DirectSound音效,但是有个问题,就是每次主缓冲区里好像只能播放一个音效,我现在采用了生成多个对象来对应每个怪的爆炸音效。不过这样有点浪费资源,有什么办法用一个主缓冲区播放多个音效。我的代码如下:

// 音效变量
LPDIRECTSOUND pDS;        
LPDIRECTSOUNDBUFFER pPBuf;  
LPDIRECTSOUNDBUFFER pSBuf;
LPDIRECTSOUND3DBUFFER   Buffer3D;
LPDIRECTSOUND3DLISTENER Listener;
WAVEFORMATEX pwfmt;      
WAVEFORMATEX swfmt;    
DSBUFFERDESC dsdesc;      
MMCKINFO      ckRiff;    
MMCKINFO      ckInfo;    
MMRESULT      mmresult;  
HMMIO hmmio;            
DWORD size;            
HRESULT result;        
LPVOID pAudio;
DWORD bytesAudio;

// 初始化音效变量
// ---------------------------------------------------
               // 这里就是普通的初始化,代码比较长,就不放了^^
// ---------------------------------------------------

// 音效播放函数
VOID SHWCGameMusic::SEPlayer() {
              pSBuf->Play(0,0,0);    // 播放一次
       // pSBuf->Play(0,0,1); // 循环播放
}


3.那里能找到点东方的音效。呵呵,这个问题不是主要的。


麻烦大家看看,谢谢!!!
挑选中……
发帖
42
樱饼
0
博丽神社的喝茶券(威望)
0
春度
0
交易币
0
只看该作者 1楼 发表于: 2009-09-17
第一个问题,用淡出(音量从100%逐渐降到0%)效果会好些吧?
第二个咱不懂。
第三个问题见http://www.doujinstg.cn/bbs/read.php?tid=250 至于怎么提取咱也不知道,等h5吧。
N/A
离线同意注册
发帖
1271
樱饼
0
博丽神社的喝茶券(威望)
0
春度
8
交易币
0
只看该作者 2楼 发表于: 2009-09-17
提音效的话你应该用得到,其实咱也才用过没多久,提过th10,th12的音效,挺有趣的。
http://bbs.thproject.org/read.php?tid=68451&fpage=3
离线h5nc
发帖
2724
樱饼
0
博丽神社的喝茶券(威望)
2
春度
738
交易币
0
只看该作者 3楼 发表于: 2009-09-17
每个播放轨道存储一种音效,不应该在游戏过程中直接播放音效,应该积累播放音效的位置和数量,在帧行动完成后统一播放所有轨道的音效
如果下一帧后还有上一帧未完成的同种新音效被积累,则应该设置该轨道存在的音效位置为音效起始位置
你只有在初始化的时候才进行轨道新建,否则永远用同一个轨道

你不是商业用途的话,考虑使用BASS等非商业Free的第三方库

0x073《東方弾置場》开发版即将问世
【Leah】引擎问世
同人STG《叛境东方游》已经腰斩
《叛之境界无双篇》已死
离线上帝之手
发帖
64
樱饼
0
博丽神社的喝茶券(威望)
0
春度
0
交易币
0
只看该作者 4楼 发表于: 2009-09-17

第一个问题,用淡出(音量从100%逐渐降到0%)效果会好些吧?
第二个咱不懂。
第三个问题见http://www.doujinstg.cn/bbs/read.php?tid=250 至于怎么提取咱也不知道,等h5吧。

谢谢你的回答,第一个是我用IGraphBuilder管理的,里面好像没有设置音量。请问该那里设置?


提音效的话你应该用得到,其实咱也才用过没多久,提过th10,th12的音效,挺有趣的。  
http://bbs.thproject.org/read.php?tid=68451&fpage=3

谢谢啊,我好像看到很多wav的波形文件了,可是提取出来好像都不能播放,是否需要经过什么处理?


每个播放轨道存储一种音效,不应该在游戏过程中直接播放音效,应该积累播放音效的位置和数量,在帧行动完成后统一播放所有轨道的音效
如果下一帧后还有上一帧未完成的同种新音效被积累,则应该设置该轨道存在的音效位置为音效起始位置
你只有在初始化的时候才进行轨道新建,否则永远用同一个轨道

你不是商业用途的话,考虑使用BASS等非商业Free的第三方库

非常感谢,我之后试过为每个怪物生成一个music类对象,然后进行播放,虽然可以播放很多,但是很浪费资源。后来我用了DirectMusic中的WAV播放,这样可以多个同步播放了,不过就是没有3D音效的感觉了。这个只是学习用的,谢谢,以后再看看有没有其他的方法。
挑选中……
离线同意注册
发帖
1271
樱饼
0
博丽神社的喝茶券(威望)
0
春度
8
交易币
0
只看该作者 5楼 发表于: 2009-09-17
你提的哪个版本的没有提出来?我只提过两个。别的没试过呢。
不过文件不大,如果需要可以PM我,留下你的信箱,发过去。
离线h5nc
发帖
2724
樱饼
0
博丽神社的喝茶券(威望)
2
春度
738
交易币
0
只看该作者 6楼 发表于: 2009-09-17
积累位置信息……同时发生的音效多个在不同位置可以通过数学运算使一个vol、pitch、pan都可控的音效模拟而成……因为声卡就可以如此做,只是软件处理的资源浪费而已……

忽然发现貌似不是在说弹幕游戏?是要怪在不同地方有可能有延迟的重叠播放?这个似乎就不是有啥特别有效的方法了……
顺便我说的貌似不是实现层面的。。。

0x073《東方弾置場》开发版即将问世
【Leah】引擎问世
同人STG《叛境东方游》已经腰斩
《叛之境界无双篇》已死
离线上帝之手
发帖
64
樱饼
0
博丽神社的喝茶券(威望)
0
春度
0
交易币
0
只看该作者 7楼 发表于: 2009-09-18
回 5楼(同意注册) 的帖子

你提的哪个版本的没有提出来?我只提过两个。别的没试过呢。
不过文件不大,如果需要可以PM我,留下你的信箱,发过去。


谢谢。我的邮箱:sunhuiwei_sh@163.com


积累位置信息……同时发生的音效多个在不同位置可以通过数学运算使一个vol、pitch、pan都可控的音效模拟而成……因为声卡就可以如此做,只是软件处理的资源浪费而已……

忽然发现貌似不是在说弹幕游戏?是要怪在不同地方有可能有延迟的重叠播放?这个似乎就不是有啥特别有效的方法了……
顺便我说的貌似不是实现层面的。。。

呵呵,是弹幕游戏,这个问题我以后再研究下吧,谢谢!
挑选中……
离线同意注册
发帖
1271
樱饼
0
博丽神社的喝茶券(威望)
0
春度
8
交易币
0
只看该作者 8楼 发表于: 2009-09-18
已经发送,请注意查收~~~(bingbong)
离线上帝之手
发帖
64
樱饼
0
博丽神社的喝茶券(威望)
0
春度
0
交易币
0
只看该作者 9楼 发表于: 2009-09-19
回 8楼(同意注册) 的帖子
谢谢,已经收到,这样的话,更要好好的研究下声音了,不能浪费了宝贵的资源啊
挑选中……
快速回复
限100 字节
 
上一个 下一个