我写了一个简单的audiounit,它应该交换立体声源的左右声道.对于使用BASS库的命令行程序,此代码的移植版本在C中运行良好,但是我无法在Xcode中使用相同的代码来进行音频处理.
对于例如{1,2,3,4,5,6}的缓冲器输入,我预期立体声反转为{2,1,4,3,6,5}.
我的代码以这种方式正确地反转了样本,但我听到的只是某种低通滤波,而不是样本的立体反转.
输入缓冲区中的前4个值为:0.000104 0.000101 0.000080 0.000113
输出为:0.000101 0.000104 0.000113 0.000080
我是否误解了输入/输出缓冲区的结构方式?
void First::FirstKernel::Process( const Float32 *inSourceP,
Float32 *inDestP,
UInt32 inSamplesToProcess,
UInt32 inNumChannels,
bool &ioSilence )
{
if (!ioSilence) {
const Float32 *sourceP = inSourceP;
Float32 *destP = inDestP;
for (int i = inSamplesToProcess/2; i>0; --i) {
*(destP+1) = *sourceP;
*destP = *(sourceP+1);
sourceP = sourceP +2;
destP = destP +2;
}
}
}
Run Code Online (Sandbox Code Playgroud) 我的应用程序在我的系统上以及其他几个上运行正常.
但是,有些人无法运行该应用程序,因为/ Contents/MacOS/ApplicationName中的文件不是Unix可执行文件.
在终端中输入以下行强制应用程序可执行,并解决问题:
chmod +x ApplicationName
Run Code Online (Sandbox Code Playgroud)
显然这是解决问题的一种非常黑客的方式,我不想告诉用户输入chmod来运行我的应用程序.我究竟做错了什么?为什么它在某些系统上显示为Unix可执行文件,而不是其他系统?这可能是权限问题......
我正在使用'TPCircularBuffer'类来创建一个循环缓冲区对象,来自这个网站.这是我目前的代码:
TPCircularBufferRecord bufferRecord; //1
TPCircularBufferInit(&bufferRecord, kBufferLength); //2
Run Code Online (Sandbox Code Playgroud)
第1行工作正常,这意味着链接器已找到该类的.cpp和.h文件.但是,第2行没有编译,错误如下:
Undefined symbols:
"TPCircularBufferInit(TPCircularBufferRecord*, int)", referenced from:
StereoEffect3::StereoEffect3(ComponentInstanceRecord*)in StereoEffect3-1DB483EC8D75827.o
StereoEffect3::StereoEffect3(ComponentInstanceRecord*)in StereoEffect3-1DB483EC8D75827.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
我不认为这是原始源代码的问题,但无论如何我都会在这里包含它: TPCircularBuffer.c
有谁知道为什么链接器/编译器找不到函数TPCircularBufferInit?TPCircularBufferInit函数如下:
inline void TPCircularBufferInit(TPCircularBufferRecord *record, int length) {
record->head = record->tail = record->fillCount = 0;
record->length = length;
}
Run Code Online (Sandbox Code Playgroud)
我很确定我正在将正确类型的参数传递给它......
我的方法旨在从输入字符串中提取游戏级别的信息.输入指定2D阵列播放区域的大小,以及2D阵列中的哪些点处存在的项目.
例如,"4,3.a,b,c.d,e,f.g,h,i,j,k,l"将包含4列和3行,看起来像这样(没有连字符):
一个--- --- d ---克Ĵ
B ---电Ë---高---ķ
Ç--- F --- I ---升
代码工作正常,直到最后一行,我得到错误:"预期':'之前'''令牌".
我一直试图解决这个问题,所以如果我错过了一些愚蠢的事情,我会很尴尬!任何帮助将非常感激.
-(void)readLevelDataFromString:(NSString*)inputString {
//remove spaces from the input
NSString *tempString = [inputString stringByReplacingOccurrencesOfString:@" " withString:@""];
//make mutable
NSMutableString *levelDataString = [NSMutableString stringWithString:tempString];
//trim first 4 characters, which we don't need
[levelDataString deleteCharactersInRange:NSMakeRange(0, 4)];
//separate whole string into an array of strings, each of which contains information on the particular column
NSArray *levelDataStringColumns = [levelDataString componentsSeparatedByString:@"."];
NSAssert([levelDataStringColumns count] == numColumns, @"In the level data string, the number …Run Code Online (Sandbox Code Playgroud) 请注意,问题已更改,不再与答案匹配
我正在尝试创建内存来保存浮动缓冲区(这里是4个浮点数).我已经分配了内存,内存中的所有4个值都是零.
当然循环迭代4次,但是第4次将ptr移动到我分配的内存之外.所以在循环结束时我将ptr移回我分配内存的地方,然后使用delete[].
我的问题是:我打电话时是否删除了整个4浮点缓冲区delete[]?(这显然是我需要的!)
int inFramesToProcess = 4;
float *ptr = new float[inFramesToProcess]();
for(UInt32 i = 0; i < inFramesToProcess; ++i) {
ptr++;
}
ptr -= inFramesToProcess;
delete[] ptr;
Run Code Online (Sandbox Code Playgroud)