iphone/iPad 搞定Audio Unit 2012/05/13
2012-05-13 09:31
435 查看
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:
* 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 和以前肯定有什么区别了!
* 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]; |
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 和以前肯定有什么区别了!
相关文章推荐
- iPhone/iPad搞定Audio Unit声音 2012/05/15
- UC故事与iPhone/iPad Audio Unit 2012/05/16
- iPhone/iPad Audio Unit 2012/05/19
- iPhone/iPad 2012/05/14 take care of Audio Unit
- iPhone/iPad Audio Unit声音播放
- iPhone/iPad开发札记2012/03/11 -2 Audio Unit
- UC故事+iPhone/iPad Audio Unit 2012/05/17
- IPhone开发 用子类搞定不同的设备(iphone和ipad)
- iPhone/iPad 2012/05/12 搞定Audio Unit
- iPhone/iPad开发扎记 2012/02/11 - 玩转iOS Audio Service
- iPhone/iPad Unit Test in xcode 4.3
- 如何判断 ios设备的类型(iphone,ipod,ipad)
- 关于iPhone和iPad的图标的思考(来自cocoachina 苹果开发中文网站)
- 精美的 ( Android, iPhone, iPad ) 手机界面设计素材和线框图设计工具
- 《iPhone与iPad开发实战》——苹果公司应该将本书作为官方的iPhone和iPad开发图书
- 承接iphone 、ipad、android、软件、游戏,微信公众平台开发
- (iPhone/iPad开发)详解UIView的center属性
- How to find crash logs for iPhone, iPod Touch or iPad applications
- 利用笔记本热点AP功能实现在没有越狱的iPad/iPhone抓包
- iPhone与iPad开发实战——精通iOS开发(更新完毕)