iphone/iPad 搞定Audio Unit 2012/05/13


1. 研究MixherHost 

* render callback呼叫duration = 11 ms 

2012-05-13 09:27:32.884 MixerHost[1576:7c03] into render callback: bus no = 0

2012-05-13 09:27:32.884 MixerHost[1576:7c03] into render callback: bus no = 1

2012-05-13 09:27:32.895 MixerHost[1576:7c03] into render callback: bus no = 0

2012-05-13 09:27:32.896 MixerHost[1576:7c03] into render callback: bus no = 1

2012-05-13 09:27:32.907 MixerHost[1576:7c03] into render callback: bus no = 0


* audio data list 

inBusNumber=0,  inNumberFrames=512, ioData.mNumberBufers=2 ( stereo ) , ioData.mBuffers[0].mDataByteSize=2048,  

inBusNumber=1,  inNumberFrames=512, ioData.mNumberBufers=1 ( mono ) , ioData.mBuffers[0].mDataByteSize=2048, 


* how to understand ?

    result =AUGraphConnectNodeInput (

                 processingGraph,

                 mixerNode,        // source node

                 0,                 // source node output bus number

                 iONode,           // destination node

                0                 // desintation node input bus number

                                                         ^ should beoutput bus ( butinput scope ) !!!

             );



2. 读以前的笔记

Q:可以在Audio Session中设置buffer size ???


 configure Audio Session: ioBufferDuration

There’s one other hardware characteristic you may want to configure: audio hardware I/O buffer duration. The default duration is about 23 ms at a 44.1 kHz sample rate, equivalent to a slice size of 1,024 samples. If I/O latency is critical in your app, you can request a smaller duration, down to about 0.005 ms (equivalent to 256 samples), as shown here:

self.ioBufferDuration = 0.005;


[mySession setPreferredIOBufferDuration: ioBufferDuration


error: &audioSessionError];



* audio unit最近期的进展

http://blog.csdn.net/printf1998/article/details/7341628

对音量进行控制


3. 调试conference

## 使用MixherHost


*  issue :  ( 3:00 PM,耗时2小时)

Q: why callback render function not called after starting AUGraph ?????? 13:30 

但机器狂转,感觉callback仍在执行???


跟踪发现以下语句未执行成功,从而造成Audio Unit未能成功启动:国

//    NSLog (@"Setting stereo stream format for mixer unit \"guitar\" input bus");

    result =AudioUnitSetProperty (

 mixerUnit,

 kAudioUnitProperty_StreamFormat,

 kAudioUnitScope_Input,

  guitarBus,

  &monoStreamFormat,              // frnk.zou 03/14/2012 changed to mono as well.

 sizeof (monoStreamFormat)

  );

   if (noErr != result) {[selfprintErrorMessage:@"AudioUnitSetProperty (set mixer unit guitar input bus stream format)"withStatus: result];return;}


注:这里result=10868


检查setupMonoStreamFormat方法,发现参数设置错误:

    //monoStreamFormat.mBitsPerChannel    = BITS_PER_CHANNEL;    // 03/30/2012, sound quality seems better.

monoStreamFormat.mBitsPerChannel =8 * bytesPerSample;    // 03/29/2012


注:正确的应该为8*bytesPerSample=32,不能设为BITS_PER_CHANNEL=16 ( 这是我们的数据源的宽度,似乎不应该是这里用???)

Q:应该是16还是32?


4. conference audio unit总结 (使用MixerHost)

* callback render 可以调用了,但仍然没有声音

* 可能原因:音量太小?没有声音数据(不太可能,readAudioData的buf中明显有数据的。)

* 下一步行动

再检查一下音量控制的代码

检查一下AudioSession方面的东东



Q:突然发现没有为 AudioIO定义property

Q:单步跟踪,最后发现在一个网络thread中收到 EXC_BAD_ACCESS,同时,PC端已经见ipad退出

估计是因为调试时间太长,主动断掉


5. 读以前笔记

* 2012/3/15 

3:00 PM,总结一下播放的状态

大约12ms callback被呼叫一次,每次要求512 frame数据

          ^ 与播放的audio data参数有对应关系吗? 2012/03/15 

          ^ 512 frames可能是指缓冲区最大长度,不代表一定要这么多。可能没有填充的部分iOS就忽略了。2012/03/15

如果每次只读160B,并发给audio unit,

        声音不对

        但声音的时长是对的,并且似乎随不同的声音,出来的声音会有变化


Q:以前是512 frames,现在是168 frames,到底什么东东变了?


* 2012/3/29

# 搞定混音

从12:00 - 13:30,一直没有声音。

其间,对bits-per-packet进行了调整,变成8*4=32,仍然没有声音。


注:这说明当时16/32都可以试,并不会引起AUGrauph初始化错误,考虑到inNumberFrames大小不同,可能stream format的设置还有区别或问题。


* 2012/03/30

#状态回顾

完全无声:通过设置输入、输出音量 ,已经有声

感觉:音调降低了,并且声音不饱满

怀疑:取音频数据320B,未能填满buffer,造成声音断续及拉长。

            AudioUnit OUTPUT sample rate不正确


Q: 两个bus可以共用一个ASDB吗?


#最新状态

在对output sample rate值进行修改后(从44.1k改成16k),声音基本能听到了,但音质不太好。

多路音频也没有问题了

但是:在真机上,声音和播放和采集不能同时使用,但在模拟器上没有问题

(Q:以前的程序在模拟器上有问题吗?)


注:音量控制改变后就有声音了,sample rate改16K就基本能听见话音,虽然音质并不太好。


结论:目前的  stream format 和以前肯定有什么区别了!




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值