小编Jim*_*myB的帖子

AudioUnit中的输入缓冲区结构

我写了一个简单的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)

c++ audio xcode buffer audiounit

5
推荐指数
1
解决办法
1196
查看次数

Cocoa应用程序将无法运行,因为Contents/MacOS/Application不是Unix可执行文件

我的应用程序在我的系统上以及其他几个上运行正常.

但是,有些人无法运行该应用程序,因为/ Contents/MacOS/ApplicationName中的文件不是Unix可执行文件.

在终端中输入以下行强制应用程序可执行,并解决问题:

chmod +x ApplicationName
Run Code Online (Sandbox Code Playgroud)

显然这是解决问题的一种非常黑客的方式,我不想告诉用户输入chmod来运行我的应用程序.我究竟做错了什么?为什么它在某些系统上显示为Unix可执行文件,而不是其他系统?这可能是权限问题......

permissions xcode chmod

1
推荐指数
1
解决办法
306
查看次数

能够实例化对象但不能访问其功能 - "未找到符号"错误

我正在使用'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

TPCircularBuffer.h

有谁知道为什么链接器/编译器找不到函数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)

我很确定我正在将正确类型的参数传递给它......

c++ circular-buffer undefined-symbol

0
推荐指数
1
解决办法
289
查看次数

NSString"预期':'之前'''令牌"错误

我的方法旨在从输入字符串中提取游戏级别的信息.输入指定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)

compiler-errors objective-c nsstring nsarray

0
推荐指数
1
解决办法
182
查看次数

指针外部内存分配时如何使用delete []?

请注意,问题已更改,不再与答案匹配

我正在尝试创建内存来保存浮动缓冲区(这里是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)

c++ pointers segmentation-fault delete-operator

-1
推荐指数
2
解决办法
1047
查看次数