编辑:嗯......这很有趣.我将设置设置为指针并传递给它.工作得很漂亮.所以,这就解决了.对于那些对答案好奇的人,我会保持开放.
我在从内存流中在FMod中创建声音时遇到问题.我查看了FMod附带的loadfrommemory示例,然后进行了操作.首先,我正在使用的代码......
CSFX::CSFX(CFileData *fileData)
{
FMOD_RESULT result;
FMOD_CREATESOUNDEXINFO settings;
settings.cbsize = sizeof(FMOD_CREATESOUNDEXINFO);
settings.length = fileData->getSize();
_Sound = 0;
std::string temp = "";
for (int i = 0; i < fileData->getSize(); i++)
temp += fileData->getData()[i];
result = tempSys->createSound(temp.c_str(), FMOD_SOFTWARE | FMOD_OPENMEMORY, &settings, &_Sound);
}
Run Code Online (Sandbox Code Playgroud)
就像这样,我在tempSys-> createSound()上遇到访问冲突.我已经确认tempSys有效,因为它在从文件创建声音时起作用.我还通过将内容写入文件来确认我的数据的char*是有效的,然后我可以在Media Player中打开该文件.我觉得设置有问题.如果我将该参数更改为0,程序不会爆炸,我最终得到结果= FMOD_ERR_INVALID_HANDLE(考虑到第3个参数为0,这是有意义的).知道我做错了什么吗?
另外,请忽略std :: string的使用,我将其用于某些测试目的.
鉴于:
#include <iostream>
#include <cmath>
#include <limits>
using namespace std;
int main() {
// your code goes here
double h = .1;
double x = 1;
int nSteps = abs(x / h);
double rem = fmod(x, h);
cout<<"fmod output is "<<rem<<endl;
if(abs(rem)<std::numeric_limits<double>::epsilon())
cout<<"fmod output is almost near 0"<<endl;
rem = remainder(x,h);
cout<<"remainder output is "<<rem<<endl;
if(abs(rem)<std::numeric_limits<double>::epsilon())
cout<<"remainder output is almost near 0"<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
鉴于int(x/h) == 10,我本来希望fmod()结果接近 0,但我得到的是 .0999999999。这是一个显着的差异。余数()的结果似乎仍然可以接受。可以在http://ideone.com/9wBlva尝试代码
为什么 fmod() 结果存在显着差异?
我知道对于无符号整数,如果除数是 2 的幂,我可以用位掩码替换模运算。对于浮点数,是否有任何数字具有类似的属性?也就是说,是否有任何数字n可以f mod n比一般情况更有效地计算,而不必使用位掩码?
当然,除了一个。 脑部衰竭
编辑:澄清一下,f是任何浮点数(在运行时确定),
n是任何格式的任何编译时常量,我希望结果是浮点数。
我在 Unity Scene 中添加了音频源组件,但无法在其中添加音频剪辑。它抛出以下错误:
Errors during import of AudioClip Assets/sound1.ogg:
FSBTool ERROR: The format of the source file is invalid, see output for details.
FSBTool ERROR: Internal error from FMOD sub-system.
UnityEditorInternal.InternalEditorUtility:ProjectWindowDrag(HierarchyProperty, Boolean)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)
Run Code Online (Sandbox Code Playgroud)
我正在使用 Unity 版本 2019.3.14f1。我尝试了不同的声源格式(mp3 和 wav),但它产生了相同的错误。如何解决这个问题?
我听说FMOD是桌面应用程序(如游戏)中最受欢迎的音频引擎之一.我已经阅读了它的文档,但我感觉不到它们比Apple的音频单元的API有任何好处.它具有许多强大的功能,但它在iPhone等移动设备上看起来并不可用,因为处理能力太弱.
然而,这可能是由于我的浅薄知识和经验造成的.我可以使用什么功能(或属性)来计算FMOD的好处而不是Apple的API?(不仅是FMOD,还有其他声音系统,如果你知道的话)
我尝试构建时遇到此错误:
"重复符号__Z8ERRCHECK11FMOD_RESULT:
/Users/codemenmini2012-2/Library/Developer/Xcode/DerivedData/MagicSleepFullVersion-agxulkdijnxbqmbuigucmrczufyw/Build/Intermediates/MagicSleepFullVersion.build/Debug-iphonesimulator/MagicSleepFullVersion.build/Objects-normal/i386/MagicSleepViewController.o
/Users/codemenmini2012-2/Library/Developer/Xcode/DerivedData/MagicSleepFullVersion-agxulkdijnxbqmbuigucmrczufyw/Build/Intermediates/MagicSleepFullVersion.build/Debug-iphonesimulator/MagicSleepFullVersion.build/Objects-normal/i386/MagicSleepViewControllerIpad.o
Run Code Online (Sandbox Code Playgroud)
ld:1个用于体系结构i386 clang的重复符号:错误:链接器命令失败,退出代码为1(使用-v查看调用)
怎么解决这个家伙?
如果不是8字节的倍数,我如何填充0的向量?在下面的代码中,我计算出偏移量并添加到向量中以确保它总是有8个值.我想用0来填充它,我想知道什么是最有效的方法.
例如:
输入:4444
填充: 4444000000000000
我到目前为止的代码是:
if ((vector1.size() % 8) != 0)
{
for (std::vector<unsigned char>::iterator itr = vector1.begin(); itr != vector1.end(); itr ++)
{
vector1.push_back(fmod(vector1.size(), 8));
if(vector1.size() == 8)
break;
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试开始使用FMOD,但我在编写本教程中的示例代码时遇到了一些问题:
http://www.gamedev.net/reference/articles/article2098.asp
我正在使用MinGW,我将libfmodex.a文件放在MinGW的include文件夹中(我也尝试直接链接到文件名),但它不起作用.这是输出.
C:\>g++ -o test1.exe test1.cpp -lfmodex
test1.cpp:4:1: error: 'FSOUND_SAMPLE' does not name a type
test1.cpp: In function 'int main()':
test1.cpp:9:29: error: 'FSOUND_Init' was not declared in this scope
test1.cpp:12:4: error: 'handle' was not declared in this scope
test1.cpp:12:53: error: 'FSOUND_Sample_Load' was not declared in this scope
test1.cpp:13:30: error: 'FSOUND_PlaySound' was not declared in this scope
test1.cpp:21:30: error: 'FSOUND_Sample_Free' was not declared in this scope
test1.cpp:22:17: error: 'FSOUND_Close' was not declared in this scope
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的特定示例:
#include <conio.h>
#include "inc/fmod.h" …Run Code Online (Sandbox Code Playgroud) 我开始使用FMOD API,我有声音播放的问题.我使用过这个网站的教程:http://glasnost.itcarlow.ie/~powerk/audio/AddFMODtoaproject.html,只觉得我的声音很破解.
这是我在OpenGL初始化函数中使用的代码:
FMOD::System_Create(&system);// create an instance of the game engine
system->init(32, FMOD_INIT_NORMAL, 0);
system->createSound("sound.wav", FMOD_HARDWARE, 0, &sound1);
sound1->setMode(FMOD_LOOP_OFF);
system->playSound(FMOD_CHANNEL_FREE, sound1, false, 0);
Run Code Online (Sandbox Code Playgroud)
有谁知道什么是错的?或者也许还有另一种方式.
你好StackOverflow大师.这是我在这里的第一个问题所以我很高兴能够直接进入.
我试图更好地理解iOS数组,我已经碰到了一堵砖墙.我正在制作一个使用FMOD的声音应用.我有一切工作完美,但我有9个按钮,所有都执行几乎完全相同的事情,除了每个按下播放不同的.wav文件然后发布停止声音.我想将它放入一个数组中,简化并缩短我的代码,这就是我迷失的地方.我删除了代码以显示我目前正在进行的操作.有任何想法吗?
.H
@interface {
FMOD::Sound *sound1;
FMOD::Sound *sound2;
FMOD::Sound *sound3;
FMOD::Sound *sound4;
FMOD::Sound *sound5;
FMOD::Sound *sound6;
FMOD::Sound *sound7;
FMOD::Sound *sound8;
FMOD::Sound *sound9;
}
- (IBAction)playSound1:(id)sender;
- (IBAction)stopSound1:(id)sender;
- (IBAction)playSound2:(id)sender;
- (IBAction)stopSound2:(id)sender;
- (IBAction)playSound3:(id)sender;
- (IBAction)stopSound3:(id)sender;
- (IBAction)playSound4:(id)sender;
- (IBAction)stopSound4:(id)sender;
- (IBAction)playSound5:(id)sender;
- (IBAction)stopSound5:(id)sender;
- (IBAction)playSound6:(id)sender;
- (IBAction)stopSound6:(id)sender;
- (IBAction)playSound7:(id)sender;
- (IBAction)stopSound7:(id)sender;
- (IBAction)playSound8:(id)sender;
- (IBAction)stopSound8:(id)sender;
- (IBAction)playSound9:(id)sender;
- (IBAction)stopSound9:(id)sender;
Run Code Online (Sandbox Code Playgroud)
米
- (void)viewWillAppear:(BOOL)animated {
[[NSString stringWithFormat:@"%@/sound1.wav", [[NSBundle mainBundle] resourcePath]] getCString:buffer maxLength:200 encoding:NSASCIIStringEncoding];
result = system->createSound(buffer, FMOD_SOFTWARE | FMOD_LOOP_NORMAL, NULL, &sound1); …Run Code Online (Sandbox Code Playgroud)