バッファの先頭アドレスを変更したい(データを追加した分先頭を削除したい)
■環境
Mac/High Sierra 10.13.6/swift4.2/xcode 10.0
iosアプリで音を取得して解析することを繰り返すアプリを作成しようと思い、
https://qiita.com/a_jike/items/68dd13879f9df5b2b7a2
上記urlサイトを参考にさせていただきました。
そこのサイトに著者のGitHub上のコードが公開されておりました。下記のURLです。
https://github.com/atsushijike/AudioService
上記ソースコードのwritePackets(inBuffer: AudioQueueBufferRef)関数の中で、バッファのコピーがおこなわれていますが、そこでmaxPacketCountよりstartingPacketCount+numPacketsが大きい場合に、書き込んだら溢れてしまう
n = startingPacketCount+numPackets-maxPacketCount
の数だけ先頭要素を削除し、後ろに要素を新たにn個要素を追加したうえで書き込みを行いたいです。
録音がずっと止まらないようにバッファ不足分だけ先頭をずらして後ろに足していくイメージです。大枠としての案は下記の2点かと思うのですが、その方法がわからず質問致しました。
■案1
直接バッファの先頭を削除し、後ろに削除した分の要素を追加する
何かの関数でバッファの特定部分を削除し、追加したい分だけ結合する?
配列のイメージで書くと以下のようになります
バッファの削除したい先頭の要素数がnの時
for _ in 0 ..< n{
b1.removeFirst()
b1.append(書き込みたいデータ)
}
■案2
バッファb2を用意し、元のバッファb1から先頭の不要部分を除いたところを先に書き込み、
今回書き込みたい分をb2に追加してからb2をb1にコピー
配列のイメージで書くと以下のようになります
バッファの削除したい先頭の要素数がnの時
for i in n ..< b1.count{
b2[i-n] = b1[i]
}
for i in b1.count-n ..< b1.count{
b2[i] = (書き込みたいデータ)
}
b1 = b2