我用这个:
err = channel->setVolume(someVolumeBetween0and1);
Run Code Online (Sandbox Code Playgroud)
即使错误是FMOD_OK,音量也不会改变.难道我做错了什么?有没有办法改变声音(频道)的音量?是否有其他的音量范围而不是[0,1]?
谢谢!
编辑:我在此之后使用setVolume:
err = soundSystem->playSound(FMOD_CHANNEL_FREE, sound, false, &channel);
Run Code Online (Sandbox Code Playgroud) 我正在从FMOD迁移到OpenAL,我找不到FSOUND_Sample_GetLength()函数的模拟,它返回样本中的样本长度(它不考虑频率)...我得到OpenAL缓冲区名称来自alutLoadMemoryFromFileImage(),所以我无法以这种方式得到波形数据.
请帮忙!
好的。所以我知道有很多关于如何在 exe 中嵌入 dll 的问题,但我的问题是相当不同的。(具体来说,我正在使用 fmod 库在我的程序中播放声音,并且我正在嵌入 fmod.dll,但这不是重点。)
我使用的是 Visual C++ 2010 Ultimate。我已成功将 .dll 嵌入到 .exe 中。我的 resources.h 文件包含
#define IDR_DLL1 144
Run Code Online (Sandbox Code Playgroud)
我的 .rc 文件包含
IDR_DLL1 DLL MOVEABLE PURE "data\\fmod.dll"
Run Code Online (Sandbox Code Playgroud)
我的代码中有以下函数(我完全从另一个 stackoverflow 问题中窃取了它):
bool extractResource(const HINSTANCE hInstance, WORD resourceID, LPCTSTR szFilename)
{
bool bSuccess = false;
try
{
// Find and load the resource
HRSRC hResource = FindResource(hInstance, MAKEINTRESOURCE(resourceID), L"DLL");
HGLOBAL hFileResource = LoadResource(hInstance, hResource);
// Open and map this to a disk file
LPVOID lpFile = LockResource(hFileResource);
DWORD dwSize …Run Code Online (Sandbox Code Playgroud) 有FMOD经验的人可以阻止我失去它.我不能让这些同步点表现出来.我有一些游戏音乐,包括两个部分,一个介绍和一个循环.它们是独立的声音,在介绍结束后,它开始循环部分,永远重复.我在介绍的最后设置了一个同步点来触发循环.它工作得很好,直到我尝试停止并重新启动音乐(例如当播放器死亡时).无论如何,同步点一旦重新开始介绍就会坚持触发,即使它是在介绍结束时设置的.效果是音乐的两个部分同时播放 - 而且似乎在单个频道上,因为我告诉它重用频道.这甚至可能吗?这是我的一些代码(注意系统,介绍,循环和通道是成员变量):
public void Play()
{
if (intro != null)
{
CHANNELINDEX index = (channel == null) ? CHANNELINDEX.FREE : CHANNELINDEX.REUSE;
system.playSound(index, intro, false, ref channel);
uint length = 0;
intro.getLength(ref length, TIMEUNIT.MS);
intro.addSyncPoint(length, TIMEUNIT.MS, "StartLoop", ref loopPtr);
channel.setCallback(callback);
}
else system.playSound(CHANNELINDEX.FREE, loop, false, ref channel);
Playing = true;
}
Run Code Online (Sandbox Code Playgroud)
这是同步点:
private FMOD.RESULT SyncCallback(IntPtr c, CHANNEL_CALLBACKTYPE type, IntPtr a, IntPtr b)
{
if (Playing)
{
RESULT result = intro.getSyncPoint(0, ref loopPtr);
intro.deleteSyncPoint(loopPtr);
system.playSound(CHANNELINDEX.REUSE, loop, false, ref channel);
}
return …Run Code Online (Sandbox Code Playgroud) 我认为我没有正确地包含FMOD库.我收到以下XCode错误:FMOD之前的期望说明符限定符列表
我正在使用XCode 4和最新版本的FMOD库.我进入了XCode中的"Link Binaries With Libraries"部分,并添加了libfmodex_iphonesimulator.a.
关于我可能做错的任何想法?
谢谢!
知道如何重写这个lambda函数pre c ++ 11吗?
if (maxVol != 0)
std::transform(&spec[0], &spec[sampleSize], &spec[0]
, [maxVol] (float dB) -> float { return dB / maxVol; });
Run Code Online (Sandbox Code Playgroud)
谢谢