作者tocute (小飘)
看板MacDev
标题Re: [问题] 请问iPhone有办法将接收道的声音直接放 …
时间Fri May 13 10:45:11 2011
借这个标题问个录音问题
现在在做一个一边录音後马上拨出的程式
当我sample rate 选44100时 结果是正确的
可是当我选 8000/16000 当我录长音时(约10秒钟长的连续声音)
中间就会听到中断声
可是如果我把他存成档案再拨出 就没事了
之前在android , MS 也有遇到类似的问题
有人有相关经验可以分享指点吗
谢谢
※ 引述《zonble (zonble)》之铭言:
: ※ 引述《tocute (小飘)》之铭言:
: : 刚好也需要类似的功能
: : 谢谢Z大提供的AudioStudy 教学
: : 因为是研究之初 所以有些地方看不懂想请教一下各位板友
: : 我最大的疑惑是
: : 我找到的范例 几乎都是在
: : AudioQueueNewOutput 的 callback function 读档
: : 根据我以前在ms, android 的经验
: : audio data 不是应该在 callback function 传进来的参数吗
: : ex :AudioQueueBufferRef inBuffer
: : 在callback function 内再把 audio data: inBuffer 传给 speaker
: : 而Z大提供的AudioStudy 里面的OutptBufferHandler
: : 似乎只有做 NSLog 这动作
: : 即使注解掉 也能跑
: audio queue 的 callback function 是在目前的 audio queue
: 资料已经放完之後,才会去触发。所以,你一般看到的范例在做
: 的事情是,因为目前的资料已经放完了,需要继续要资料,可能
: 是去读档案,或是已经在记忆体的 data,所以会在 callback
: function 中继续读资料。
: 但是这个范例的状况是,由於是把录音进来的资料直接放出来,
: 所以,在放出声音之後,就没去做这件继续读资料的事情,反正
: Input 有什麽资料,就往 Output 送。
: 实际上在把声音丢到 Output 工作的,就是 88 到 94 行这段,
: 把 Input 进来的 buffer,用 memcpy 把资料直接复制到新的
: buffer,然後在 94 行的 AudioQueueEnqueueBuffer,丢到
: Output queue 去。
: 比较需要注意的是,Input Queue 在一直不断重复使用同一个
: buffer,然後每次都产生新的 buffer 给 output queue。
: 这个范例写得比较随便 :p
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.220.52.43
1F:推 ryanliang:很有可能你的Buffer大小不够大 导致Context Switch增加 05/17 12:35
2F:→ ryanliang:就感觉会有间断声(即时监听时)存档听不会是因有缓冲过了 05/17 12:36