小编Eri*_*sen的帖子

通过AVAssetReader读取音频样本

你如何通过AVAssetReader读取音频样本?我找到了使用AVAssetReader进行复制或混合的示例,但这些循环始终由AVAssetWriter循环控制.是否可以创建一个AVAssetReader并读取它,获取每个样本并将每个音频样本的int32抛入一个数组?

谢谢.

iphone cocoa-touch objective-c avfoundation

16
推荐指数
3
解决办法
2万
查看次数

通过AVAssetReader读取样本

你如何通过AVAssetReader读取样本?我找到了使用AVAssetReader进行复制或混合的示例,但这些循环始终由AVAssetWriter循环控制.是否可以只创建一个AVAssetReader并通读它,获取每个样本?

谢谢.

iphone cocoa-touch objective-c avfoundation avassetreader

10
推荐指数
1
解决办法
2万
查看次数

如何跟踪AVAssetWriter写作的进度?

如何计算AVAssetWriter进程的进度?所以,如果我有类似的东西:

[assetWriterInput requestMediaDataWhenReadyOnQueue:queue usingBlock:^{
  while (1){
    if ([assetWriterInput isReadyForMoreMediaData]) {
      CMSampleBufferRef sampleBuffer = [audioMixOutput copyNextSampleBuffer];
      if (sampleBuffer) {
        [assetWriterInput appendSampleBuffer:sampleBuffer];
        CFRelease(sampleBuffer);
      } else {
        [assetWriterInput markAsFinished];
        break;
      }
    }
  }
}];
Run Code Online (Sandbox Code Playgroud)

我可以在循环中拉动(或轮询)以确定我完成了多少x?

谢谢.

iphone cocoa objective-c avfoundation avassetwriter

8
推荐指数
2
解决办法
3654
查看次数

使用AudioQueue读取音频缓冲区数据

我试图通过AudioQueue读取音频数据.当我这样做时,我可以验证文件的位深度是16位.但是当我得到实际的样本数据时,我只看到-128到128的值.但我也看到了可疑的交错数据,这让我非常确定我只是没有正确读取数据.

首先,我可以验证源文件是44100,16位单声道wav文件.

我的缓冲区是这样分配的:

char *buffer= NULL;
buffer = malloc(BUFFER_SIZE);
assert(buffer);

所有相关值均已设置并用于:

AudioFileReadPackets(inAudioFile,false,&bytesRead,NULL,packetNum,&numPackets,buffer);       

作为测试,只是为了让我可以看到检索到的数据,我运行:

for(int i=0;i<BUFFER_SIZE;i++){
  NSLog(@"%i", buffer[i]);
}

现在,我知道我的源文件到处都是峰值,但是我看到的值只有最大值为-128和128.由于这是一个16位文件,我希望这些值代之以-32768到32768.

此外,数据中似乎有两种模式.以下是返回数据的示例:

70
-13
31
-11
-118
-9
-15
-7
116
-4
31
-1
28
1
84
2
-123
3
-97
4
110
5
54
6
126

现在看一下从第二行开始的每一行:-13.看看它是如何增加的,而不是均匀的,但至少是顺利的?奇数行并不接近那些平滑的行.

我的第一个想法是这是交错的立体声数据,但不是,它只是一个通道,所以不应该有任何交错,对吧?

我最好的猜测是我只是错误地读取数据,因此样本数据跨越两个返回.知道如何正确阅读吗?

感谢您阅读整个问题,以及您可以提供的任何见解.

iphone cocoa objective-c core-audio audioqueueservices

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

实例方法调用类方法调用实例方法

总之,怎么样?

我有一个视图控制器,可以创建一些自定义对象.其中一个对象需要在控制器中调用一个方法.该对象看起来好像要在控制器中调用一个类方法,这可能没问题,除了控制器中的类需要调用控制器中的实例方法,并且它似乎不想这样做.那有意义吗?

如果没有,这是伪代码:


ViewController.m

#import "customObj.h"
-(void)viewDidLoad{
  foobar=@"string";//declared in ViewController.h
}
-(void)createObj{
  foobar=@"different string";
  customObj *customObjInstance=[[customObj alloc] init];
}

---

customObj.m

#import "ViewController.h"
-(void)callBack{
  [ViewController createObj];
}
Run Code Online (Sandbox Code Playgroud)

好吧,所以当callBack运行时,它会出错,说它正在寻找+ createObj(而不是-createObj).我可以将createObj更改为类方法,但是设置foobar时出现问题,因为foobar在-viewDidLoad中初始化,我无法将其更改为+ viewDidLoad.我可以将foobar移到一个类方法中,但那我该怎么称呼呢?而不是自我,我指的是[ViewController ...]?我觉得这不行.

我的猜测是我错过了一些基本的概念,并不像我正在做的那样困难.我感激任何能够理顺我的人.

非常感谢.

iphone objective-c

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

必须有一种更简单的方法来处理数组!

为了优化瓶颈,我将大型NSArray的创建转换为c风格的数组.(由此产生的创作是原始NSArray版本的1/8.是的!)但是一旦它被创建,速度不再是一个问题,所以我宁愿再次受益于它是一个NSArray.

然而,将c风格的数组转换为NSArray似乎是荒谬的(除非我缺少一些神奇的initWithArrayWrapElementsInObjects方法.)

正如我现在理解的那样,我首先必须创建一个NSMutableArray,迭代通过c样式数组将每个元素(在我的情况下浮动)转换为对象,将每个对象添加到NSMutableArray,然后使用NSMutableArray创建NSArray.

是对的吗?必须有一个更好的方法.

并且将不胜感激.

谢谢!

iphone optimization objective-c

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

测试类类型

当我将对象发送到NSLog时,我得到一个包含三个属性的字符串.第一个是对象的类,第二个是对象的框架,第三个是对象的CALayer.第二个和第三个属性标题为(例如layer =),因此我可以通过标题调用它们(例如myObject.layer).

第一个不是.我如何测试类类型?

谢谢!

iphone objective-c

4
推荐指数
2
解决办法
1387
查看次数

这个循环可以优化吗?

我正在使用iPhone应用程序进行调试/优化阶段.我还有一个瓶颈 - 程序有明显滞后的唯一地方,它在下面的循环中:(顺便说一句,我已经用字母和类型重命名了变量.(实名更加人性化)在实际的应用程序中,但在上下文中没有任何意义,所以我希望这很清楚.)这是循环:

for(i=0;i<xLong; i+=yFloat*zShort){
  aFloat=0.0;
  for(int j=i;j<i+yFloat*zShort;j++){
    aFloat=hArray[j]/kFloat;
  }
  bNSNumber = [NSNumber numberWithFloat:aFloat]; 
  [cNSMutableArray addObject:bNSNumber];
}
Run Code Online (Sandbox Code Playgroud)

所有异议创建和清理都在此循环之外.

(这应该是非常直接的,这里发生了什么,但基本上我有一个非常大的数组(数以百万计),我在yFloat*zShort长度的块中经历该数组,添加该块中的所有元素,并且将最终总和插入到另一个数组中.因此,如果hArray长度为百万个元素,并且我的块长度为200,我将对前200个元素求和,在cNSMutableArray中插入该总数,然后转到hArray中的下两个元素.最后,cNSMutableArray将长达5000个元素.)

当外环大约为25k且内环大约为200时,此代码运行大约需要4秒.我肯定希望尽可能地降低这一点,因为在现实世界中,外环可能会更大一些.

任何想法如何加快这一点?

感谢您的任何想法!

iphone optimization cocoa objective-c

3
推荐指数
2
解决办法
309
查看次数

无符号长浮动?

如何在 Objective-C 中将无符号长数转换为浮点数?

objective-c

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