作者tocute (小飄)
看板MacDev
標題Re: [問題] 請問iPhone有辦法將接收道的聲音直接放 …
時間Thu May 19 15:57:56 2011
請問 如果我 buffer size 設為 320
希望他每次出來的資料都是 320 byte
這樣我該在哪裡做設定呢??
因為我直接改 buffer size 出來的聲音都是noise
謝謝回覆
※ 引述《tocute (小飄)》之銘言:
: 借這個標題問個錄音問題
: 現在在做一個一邊錄音後馬上撥出的程式
: 當我sample rate 選44100時 結果是正確的
: 可是當我選 8000/16000 當我錄長音時(約10秒鐘長的連續聲音)
: 中間就會聽到中斷聲
: 可是如果我把他存成檔案再撥出 就沒事了
: 之前在android , MS 也有遇到類似的問題
: 有人有相關經驗可以分享指點嗎
: 謝謝
: ※ 引述《zonble (zonble)》之銘言:
: : 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:320這數字怎麼來的? 舉個例子給你 假設取樣為44.4K每秒 05/19 18:08
2F:→ ryanliang:又是立體聲 所以每秒的資料量是88200Bytes 像我的Buffer 05/19 18:10
3F:→ ryanliang: 上面錯了 我重算一次~ 05/19 18:14
4F:→ ryanliang:每秒資料量=44100(樣本/秒)*4(Byte/樣本)/0.5(取半秒) 05/19 18:15
5F:→ ryanliang:所以我Buffer會設為88200這個大小 以上為LPCM的錄音品質 05/19 18:17
6F:→ ryanliang:若是用AAC的Codec話 又是另一個數字了 05/19 18:17
7F:→ zonble:不太懂為什麼要把 buffer 弄這麼小… 05/19 18:35
8F:→ ryanliang:Z大 我是用你的範例去改的 你裡面設定了好像也是這個值 05/19 18:40
9F:→ ryanliang:我只是去試著了解這值怎麼來的 不大懂為什麼要設這魔小 05/19 18:41
10F:→ ryanliang:希望有更有效率的方法 我也感覺小了點 但是太大太小會有 05/19 18:43
11F:→ ryanliang:雜訊出來 不知道是甚麼樣的問題? 05/19 18:43
12F:→ tocute:因為我要作編碼 編碼的最小單位就是 16000/50 = 320 05/19 20:18
13F:→ tocute:另原因是錄音後 在撥出來 兩者時間差一秒多 猜想是buffer大 05/19 20:20
14F:→ tocute:請問有沒有使用 Audio Unit 做錄音 波音的程式呢?? 05/20 17:46