Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。10.0iosアプリで音を取得して解析することを繰り返すアプリを作成しようと思い、https://qiita.com/a_jike/items/68dd13879f9df5b2b7a2上記urlサイトを参考にさせていただきました。そこのサイトに著者のGitHub上のコードが公開されておりました。startingPacketCount+numPackets-maxPacketCountの数だけ先頭要素を削除し、後ろに要素を新たにn個要素を追加したうえで書き込みを行いたいです。録音がずっと止まらないようにバッファ不足分だけ先頭をずらして後ろに足していくイメージです。大枠としての案は下記の2点かと思うのですが、その方法がわからず質問致しました。append()のような操作はできません。Array型の内部では、案2に相当する操作を実際に行なっています。やろうと思えばできますし、buffer全体の大きさが実は変わらないなら、「バッファb2」なんて用意しなくても、元のbufferの中で残す部分を順に前に詰めていけば実現できます。オススメしたくない書き方です。=960000で、約1MBあります。数KBのデータが届くたびに1MBのバッファを全体を操作すると言うのはあまりにも非効率です。最近の高速なCPUなら一応動きはするでしょうが、データを右から左までずらすためだけにとんでもないCPUパワーを食うことになり、信号解析に使える余地は大きく減るでしょう。14:53と言うわけでリングバッファを使うようなやり方を提案したいところですが、それをやると元コードのかなりの部分を書き換えることになるでしょう。その後「音を取得して解析することを繰り返す」ことができるようになるまでにも課題は山積みですが...。言うわけでこの先どのように課題を解決していくのか方向性が見えないと「(あなたにとって)これがベスト」とはなかなか言いにくい内容です。現在参考になさっているコードがほとんど使えなくなる、なんてことになっても、「(私にとって)これがベスト」と言う回答に付き合ってみる気はおありでしょうか。目的までの近道ということであれば、他のサンプルコードを探してもらった方が早いかもしれません。15:20ありがとうございます。リングバッファについて大変興味があります。swiftのバッファの扱い、ポインタの扱い、そしてAudioToolBoxの扱いが難しいです。やりたいことについて後半の解析部分についてはできており、課題として残っているのはこの部分のみになります。やりたいことは上記の通りで、最初に決めたバッファサイズを大きくすることなく録音されたデータを録音用のバッファからバッファへ詰めていき、サイズがいっぱいのところで先頭を消して、後ろに詰めるということができれば自分の目的はほぼ達成できます。OOPerさんのご回答におつきあいさせていただきたいです。票0見てみたいと言うコメントをいただいたので、回答として示させてもらいます。300行近い長いコードですが、ほぼ全面的に修正しているので全行そのまま掲載します。その前にざっとリングバッファの説明だけ。->||xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|現在入っているデータの先頭と、次に書き込むべきデータの位置を保持することにより、このバッファの一部だけを使用していることを記録しておきます。startingSampleIndex(xxxxは未使用領域。)空いている場所に書き込むだけなら、場所をずらさずに続きに書き込んでいきます。startingSampleIndex(書き込んだ分usingSampleCountを増やす。)もういらなくなったデータがあれば、前に詰めるのではなく、2つの情報をちょっと書き換えるだけです。startingSampleIndex(usingSampleCountは減らす。startingSampleIndexは増やす。)領域がバッファの終端を跨いだらどうなるのか、ちょっと面倒くさくなりますが、雰囲気は掴んでもらえると思います。以上の内容をコードにしたのがこちら。原則として元のAudioServiceクラスと同じ構成になるようにしていますが、プロパティ名やメソッド名を見直しNSDataをDataに変更bufferをUnsafeMutableRawPointerからUnsafeMutablePointer<Int16>にと、リングバッファ化と合わせ中身は大幅に変わっているので、クラス名もAudioServiceからMyAudioServiceに変更してあります。「余分なデータを削除してしまう」と言う処理の必要なwriteSamples(inBuffer:)メソッドには少し細かめのコメントをつけておいたので確認してみてください。}}関連して、元プロジェクトの他の場所でも幾らかの修正が必要になります。別質問のコメントに書かれていたようにNSDataからの標本データの読み取りが間違っているようなので、そちらも修正した方がいいでしょう。ご自分で修正された版を持っていると思いますが、私が書くならこんな感じということで。}}書き換え部分がかなり大きくなったので、つまらないミスが入っているかもしれません。お気付きの点があればご質問ともどもお知らせください。ちなみに解析処理はもう書かれているということですが、それとうまくつながるようになんてことは一切考えていません。ご自身のコードは今どのようなものになっているのでしょうか?参考サイトの元プロジェクトからは解析処理の追加などを含め、色々変更されているかと思います。ご質問を書かれるときに肝心なところはご質問そのものに含めていただいていると思いますが、思わぬ部分に影響が出ることもあります。出来ればご自身のリポジトリをGithub等に持たれて、ご質問本文には入れていないコードも見られるようにしてもらった方が良いかもしれません。個の銅バッジありがとうございます。時間がかかってしまうと思いますが、じっくり読んで落とし込みたいと思います。いつもOOPerさんの回答は大変勉強になります。Githubについて確かに持っておいた方が良いと自分でも思いました。機会を見て持ちたいと思います。12:43Data型から値を取得しようとしたのですが、できませんでした。)このようにコピーできるかと試してみましたが、うまくいきませんでした。どのように取得すればよろしいでしょうか。8:59このように取得してみました。あっておりますでしょうか。最終的にarrが欲しい配列[Int16]の想定です。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。