エンベデッドシステムスペシャリスト 2016年 午後1 問01
カーオーディオシステムに関する次の記述を読んで、設問1~3に答えよ。
A社は、ハイレゾリューション(以下、ハイレゾという)オーディオに対応したカーオーディオシステム(以下、システムという)の開発を行っている。システムでは、USBメモリ内の圧縮された音楽ファイル(以下、圧縮音楽ファイルという)の再生及びスマートフォンで再生した音楽の出力を行う。
〔システムの構成〕
システムのハードウェア構成を図1に示す。メインMCUは、内蔵USBホスト回路を使用して、USBメモリとスマートフォンの制御を行う。メインMCUとUSB通信の動作クロックは、USB用発振子から生成する。また、メインMCUは、ダイレクトメモリアクセスコントローラ(以下、DMACという)を使用し、シリアルI/F(以下、SIOという)2を介してD/Aコンバータ(以下、DACという)にデータを送信する(以下、DAC送信という)。再生する音楽のサンプリング周波数と量子化ビット数を基に、オーディオ用発振子のクロックを分周し、SIO2の転送クロックとする。
サブMCUは、再生する音楽の選択を行う操作キーの入力、及び再生中の圧縮音楽ファイル名、再生経過時間などの表示制御を行う。
〔対応するハイレゾオーディオのフォーマット〕
対応するハイレゾオーディオのフォーマットは次のとおりである。
・アナログ音声データを最大サンプリング周波数192kHz、量子化ビット数32ビット、2チャネル(ステレオ)で、ディジタル変換する。
・ディジタル変換したデータをPCMデータといい、2チャネル分を同時サンプリングして、1サンプル分のデータとする。
〔再生動作〕
USBメモリ内の圧縮音楽ファイル再生動作及びスマートフォンの音楽再生動作のデータフローを、図2に示す。(1) USBメモリ内の圧縮音楽ファイル再生動作
USBメモリの接続検出後、メインMCUは、USBメモリ内の再生可能な圧縮音楽ファイルを検索し、検索順に再生を開始する。また、再生する圧縮音楽ファイルを操作キーで選択することもできる。メインMCUには、1,000サンプル分のPCMデータを蓄積するバッファが四つあり、四つのバッファがFIFOを構成している。1回の伸張処理ごとに1,000サンプル分のPCMデータを生成し、バッファに蓄積する。4段目のバッファまでPCMデータを蓄積し終えると、DAC送信を開始する。
DAC送信は、バッファ1段ごとに行い、1段分のDAC送信が完了すると、自動的に次段のDAC送信を開始し、メインMCUは、次の伸張処理を行う。
(2) スマートフォンの音楽再生動作
メインMCUは、スマートフォンの音楽再生用アプリケーション(以下、音楽再生アプリという)を、内蔵USBホスト回路を介して制御する。メインMCUは、音楽再生アプリで選択した音楽のサンプリング周波数などの情報を取得し、PCMデータを実際の再生速度で受信する。メインMCUは、スマートフォンの音楽再生に使用できるバッファを四つもち、受信したPCMデータをバッファに蓄積し、DAC送信を行う。音楽再生アプリは、メインMCUからの再生開始コマンドによって音楽の再生を開始し、1曲ごとに再生を停止する。
〔メインMCUのソフトウェア構成〕
メインMCUのOSには、リアルタイムOSを使用する。メインMCUの主なタスク構成を図3に、USBメモリ内の圧縮音楽ファイル再生時に動作する主なタスクの処理概要を表1に、それぞれ示す。
設問1:システムの仕様について、(1)、(2)に答えよ。
設問1(1)
問題文を見るUSBメモリの接続検出後、一定時間内にスピーカから音声を出力させたい。システムの処理時間として、バッファがどのような状態になるまでの時間を考慮しなければならないか。25字以内で述べよ。ここで、PCMデータの転送時間は無視できるものとする。
模範解答
バッファ4段目までPCMデータを蓄積する時間
解説
解答の導き方
-
問われているのは、USBメモリの接続検出後、スピーカから最初の音声が出るまでの処理時間を見積もる際に、バッファがどの状態になるまでを考慮するかです。
-
本文には、メインMCUに「1,000サンプル分のPCMデータを蓄積するバッファが四つあり、四つのバッファがFIFOを構成している」とあります。したがって、再生開始前に複数のバッファへPCMデータを蓄積する構成です。
-
さらに、「4段目のバッファまでPCMデータを蓄積し終えると、DAC送信を開始する」とあります。つまり、最初のバッファにデータが入った時点ではなく、4段目までの蓄積が終わってから音声出力が始まります。
-
したがって、接続検出後からスピーカ出力までの処理時間を考えるときは、バッファ4段目までPCMデータを蓄積する時間を考慮します。PCMデータの転送時間は無視する条件なので、DAC送信に要する時間を加える必要はありません。
誤りやすいポイント
- バッファ1段目にPCMデータが入った時点でDAC送信が始まると考えることです。本文では、4段目まで蓄積した後にDAC送信を開始します。
- 4段目までの蓄積時間ではなく、4段分のDAC送信が完了するまでの時間を考えることです。この設問では、PCMデータの転送時間は無視します。
- USBメモリの接続検出から再生開始までの処理時間を問われているのに、バッファの段数ではなく、音楽全体の再生時間を考えることです。
FAQ
Q: なぜバッファ1段目の蓄積だけでは足りないのですか?
A: DAC送信は、バッファ4段目までPCMデータを蓄積し終えた後に開始するためです。
A: DAC送信は、バッファ4段目までPCMデータを蓄積し終えた後に開始するためです。
Q: DAC送信が完了するまでの時間も含めますか?
A: いいえ。設問ではPCMデータの転送時間を無視する条件なので、バッファ4段目まで蓄積する時間を考慮します。
A: いいえ。設問ではPCMデータの転送時間を無視する条件なので、バッファ4段目まで蓄積する時間を考慮します。
関連キーワード: バッファリング、PCMデータ、FIFO、伸張処理、DAC送信
設問1(2)
問題文を見るUSBコネクタ部への車体の振動及び外来ノイズの影響によって、USB通信のエラーリトライ処理が発生し、伸張完了までの処理が一時的に遅延する可能性がある。この点を考慮して、伸張処理後のPCMデータをバッファに蓄積している。
(a) PCMデータをバッファに蓄積しない場合、再生音にどのような問題が発生するか。10字以内で述べよ。
(b) 許容できる遅延は、最大でバッファ何段分の再生時間か。
模範解答
(a):再生音が途切れる。
(b):3
解説
解答の導き方
(a) USBコネクタ部の振動や外来ノイズによってUSB通信のエラーリトライが起きると、圧縮音楽ファイルの読出しや伸張処理が遅れることがあります。PCMデータをバッファに蓄積していなければ、DACへ送るデータが間に合わず、音声を連続して出力できません。その結果、再生音が途切れます。
(b) 本文では、四つのバッファにPCMデータを蓄積してからDAC送信を開始し、「1段分のDAC送信が完了すると、自動的に次段のDAC送信を開始し、メインMCUは、次の伸張処理を行う」とあります。
つまり、最初の1段分を送信し終えた時点で、残りの3段分に蓄積されたデータを再生している間に、次の伸張処理を行います。この処理がUSB通信のエラーリトライで遅れても、残りの3段分を再生する時間内に処理が完了すれば、再生音は途切れません。したがって、許容できる遅延はバッファ3段分の再生時間です。
誤りやすいポイント
- バッファが四つあるため、許容できる遅延も四段分だと考えてしまうことです。次の伸張処理を行う時点では、最初の1段分はすでに送信済みなので、遅延を吸収するために残っているのは3段分です。
- バッファがあれば、どれだけ処理が遅れても再生が続くと考えてしまうことです。蓄積されたPCMデータを使い切る前に次のデータが用意できなければ、再生音は途切れます。
- (a)を単に「処理が遅くなる」とすることです。問われているのは、PCMデータを蓄積しない場合に再生音に現れる問題です。
FAQ
Q: バッファにPCMデータを蓄積する目的は何ですか?
A: USB通信や伸張処理に一時的な遅れが生じても、蓄積済みのデータを再生し、その間に次のデータを用意できるようにするためです。
A: USB通信や伸張処理に一時的な遅れが生じても、蓄積済みのデータを再生し、その間に次のデータを用意できるようにするためです。
Q: バッファ3段分を超える遅延が起きると、どうなりますか?
A: 蓄積済みのPCMデータを使い切り、次にDACへ送るデータが間に合わなくなるため、再生音が途切れます。
A: 蓄積済みのPCMデータを使い切り、次にDACへ送るデータが間に合わなくなるため、再生音が途切れます。
関連キーワード: バッファリング、PCMデータ、FIFO、データアンダーラン
設問2:メインMCUのソフトウェア動作について、(1)、(2)に答えよ。
設問2(1)
問題文を見るいずれかのタスクに異常が発生し、システム監視タスクが一定時間内にWDTをクリアできない場合は、WDTがメインMCUをリセットする。
(a) 優先度が低いシステム監視タスクでWDTをクリアする設計にしているのは、どのような状態を検出するためか。50字以内で述べよ。
(b) システム監視タスクで、WDTをクリアするだけでは、タスクの待ち状態が解除されない異常を検出できない。そこで、タスクが動作したことを示すフラグをタスクごとに用意し、動作すべきタスクのフラグが全てセットされているときだけWDTをクリアすることにした。スマートフォンの音楽再生中にフラグをチェックすべきタスクを、図3中から全て答えよ。
模範解答
(a):優先度の高いタスクが、WDTのカウント時間以上に連続して動作していることを検出するため
(b):メインタスク、PCMデータ受信タスク、音声出力タスク
解説
解答の導き方
この小問では、WDTを使って検出できる異常と、スマートフォンの音楽再生中に実行状況を確認すべきタスクを考えます。
(a)
図3の注記には、タスクの優先度は「値が小さいほど高い」とあります。したがって、優先度の高いタスクが実行可能な状態で動き続けると、優先度の低いタスクは実行の機会を得られないことがあります。
図3の注記には、タスクの優先度は「値が小さいほど高い」とあります。したがって、優先度の高いタスクが実行可能な状態で動き続けると、優先度の低いタスクは実行の機会を得られないことがあります。
システム監視タスクは優先度が低く、表1には「バックグラウンドタスクとして動作し、WDTをクリアする」とあります。正常時には、ほかのタスクの処理の合間に実行され、WDTをクリアできます。一方、優先度の高いタスクが異常によって動き続け、WDTのカウント時間以上にシステム監視タスクが実行されなければ、WDTはクリアされず、メインMCUがリセットされます。
つまり、低優先度のシステム監視タスクでWDTをクリアする設計は、優先度の高いタスクがCPUを占有し続ける状態を検出するためです。
(b)
タスクごとのフラグを調べる目的は、システム監視タスク自体は実行できていても、必要なタスクが待ち状態などから復帰せず、動作していない異常を見つけることです。そのため、再生方式に応じて、動作すべきタスクを選びます。
タスクごとのフラグを調べる目的は、システム監視タスク自体は実行できていても、必要なタスクが待ち状態などから復帰せず、動作していない異常を見つけることです。そのため、再生方式に応じて、動作すべきタスクを選びます。
スマートフォンの音楽再生では、メインMCUがスマートフォンの音楽再生アプリを制御し、PCMデータ受信タスクがPCMデータを受信し、音声出力タスクが受信したデータをバッファに蓄積してDAC送信を行います。したがって、この再生経路を構成する「メイン」「PCMデータ受信」「音声出力」の動作フラグを確認します。
一方、「ファイル管理」と「伸張」は、USBメモリ内の圧縮音楽ファイルを扱う処理に必要なタスクであり、スマートフォンの音楽再生では使いません。また、「システム監視」はフラグを確認してWDTをクリアする側のタスクなので、確認対象には含めません。
誤りやすいポイント
- WDTを低優先度タスクでクリアする目的を、「システム監視タスク自身の異常を検出するため」と考えないようにします。高優先度タスクが動き続け、低優先度タスクが実行されない状態を検出する設計です。
- WDTをクリアするだけでは、実行されるべきタスクが待ち状態のままでも、システム監視タスクが動いていれば異常を見逃すことがあります。そのため、タスクごとのフラグも確認します。
- スマートフォンの音楽再生では、USBメモリ内の圧縮音楽ファイルを検索・伸張するタスクは使いません。再生方式ごとに必要なタスクを選びます。
- システム監視タスクは実行状況を確認する側であり、スマートフォンの音楽データを処理するタスクとは役割が異なります。
FAQ
Q: 優先度の高いタスクが一時的に実行されるだけでも、WDTによるリセットが起きますか?
A: 一時的に実行されるだけなら、システム監視タスクが後から実行されてWDTをクリアできます。問題となるのは、WDTのカウント時間以上にシステム監視タスクが実行されない状態です。
A: 一時的に実行されるだけなら、システム監視タスクが後から実行されてWDTをクリアできます。問題となるのは、WDTのカウント時間以上にシステム監視タスクが実行されない状態です。
Q: スマートフォンの音楽再生中は、図3にあるすべてのタスクのフラグを確認すればよいのですか?
A: いいえ。実行されないタスクのフラグはセットされないため、再生方式に応じて動作すべきタスクを選びます。
A: いいえ。実行されないタスクのフラグはセットされないため、再生方式に応じて動作すべきタスクを選びます。
Q: なぜシステム監視タスク自身のフラグを確認対象にしないのですか?
A: システム監視タスクはフラグを確認してWDTをクリアする役割です。ここで確認するのは、再生に必要なほかのタスクが動作したことを示すフラグです。
A: システム監視タスクはフラグを確認してWDTをクリアする役割です。ここで確認するのは、再生に必要なほかのタスクが動作したことを示すフラグです。
関連キーワード: リアルタイムOS、タスク優先度、ウォッチドッグタイマ、タスク監視、タスク飢餓
設問2(2)
問題文を見るUSBメモリ内の圧縮音楽ファイル再生動作について、(a)~(c)に答えよ。
(a) 表1中のaに入れる適切な処理内容を、35字以内で述べよ。
(b) 表1中のb~dに入れる適切な字句を答えよ。
(c) 表1中の下線①の情報を、二つ答えよ。
模範解答
a:検索結果の圧縮音楽ファイル名をメインタスクに通知する
b:1,000サンプル
c:4段目
d:メインタスク
①:・再生経過時間
②:・圧縮音楽ファイル名
解説
解答の導き方
表1の空欄は、各タスクがどの処理を担当し、どのタスクに処理結果を渡すかを追うと判断できます。
まず、ファイル管理タスクは、検索要求を受け取ってUSBメモリ内を検索し、再生する圧縮音楽ファイルを決定します。決定したファイルを実際に再生するには、そのファイル名をメインタスクに知らせる必要があります。したがって、aには、検索結果の圧縮音楽ファイル名をメインタスクに通知する処理が入ります。
次に、伸張タスクは、圧縮音楽データを読み出してPCMデータに変換します。問題文では「1回の伸張処理ごとに1,000サンプル分のPCMデータを生成」するとあります。表1の「PCMデータで b 分の圧縮音楽データを読み出し」という箇所も、この1回の伸張処理で生成する量を示すので、bは「1,000サンプル」です。
音声出力タスクがDAC送信を始めるタイミングは、再生動作の記述から分かります。圧縮音楽ファイルの再生では、「4段目のバッファまでPCMデータを蓄積し終えると、DAC送信を開始」します。したがって、cは「4段目」です。
DAC送信の完了後、音声出力タスクは再生経過時間を算出します。また、バッファが全て空になったときには曲の終了を通知します。表1では、メインタスクが曲の終了通知を受け取って次の圧縮音楽ファイルの検索を要求する役割を担っています。このように、再生の進行や曲の終了を受けて後続の処理を進めるのはメインタスクなので、音声出力タスクが通知する相手のdも「メインタスク」です。
最後に、下線①は、メインタスクからSIO1を使ってサブMCUへ送る情報です。サブMCUは「再生中の圧縮音楽ファイル名、再生経過時間などの表示制御」を行います。その表示に必要な情報として、圧縮音楽ファイル名と再生経過時間を挙げられます。
誤りやすいポイント
- aは、ファイル管理タスクが検索結果を自分の中に保持する処理ではなく、後続の伸張処理に必要なファイル名をメインタスクへ通知する処理です。
- bは、圧縮音楽データの読出し量を問うています。伸張処理1回で生成するPCMデータの量に合わせて「1,000サンプル」と判断します。
- cは、バッファの空き段数やDAC送信に使う段数ではありません。DAC送信を開始する条件として示された、PCMデータを蓄積し終える段数です。
- dは、再生経過時間や曲の終了を通知する相手です。曲の終了後にファイル検索を要求するタスクがメインタスクであることから、通知先もメインタスクと分かります。
- 下線①の情報は、圧縮音楽ファイルの再生に関する制御情報と、表示に必要な情報を区別して考えます。サブMCUは表示を担当するため、ファイル名と再生経過時間が該当します。
FAQ
Q: なぜDAC送信を始める前に、バッファの4段目まで蓄積するのですか?
A: 再生開始直後にPCMデータをある程度蓄積しておくことで、後続の伸張処理が遅れても、すぐに再生データが不足する事態を避けやすくするためです。
A: 再生開始直後にPCMデータをある程度蓄積しておくことで、後続の伸張処理が遅れても、すぐに再生データが不足する事態を避けやすくするためです。
Q: 「1,000サンプル分」は、左右のチャネルを別々に数えるのですか?
A: 本文では、2チャネル分を同時サンプリングして1サンプル分のデータとしています。そのため、「1,000サンプル分」はステレオのサンプルを1,000回分まとめた量です。
A: 本文では、2チャネル分を同時サンプリングして1サンプル分のデータとしています。そのため、「1,000サンプル分」はステレオのサンプルを1,000回分まとめた量です。
Q: 再生経過時間は、どの処理を基に算出しますか?
A: 表1では、音声出力タスクがDAC送信の完了後に再生経過時間を算出すると示されています。したがって、圧縮音楽ファイルの読出しや伸張の完了ではなく、DAC送信の完了が算出の契機です。
A: 表1では、音声出力タスクがDAC送信の完了後に再生経過時間を算出すると示されています。したがって、圧縮音楽ファイルの読出しや伸張の完了ではなく、DAC送信の完了が算出の契機です。
関連キーワード: タスク間通信、FIFOバッファ、PCMデータ、データ伸張、DMA転送
設問3:音楽の再生機能について、(1)、(2)に答えよ。
設問3(1)
問題文を見るスマートフォンの音楽再生に関する次の記述中のe~gに入れる適切な字句又は数値を答えよ。
USB通信クロックとDACへの転送クロックは、生成の基になる発振子が異なるので周波数差がある。そのため、受信したPCMデータのバッファリングを行わないと、データのe又はfが発生する。そこで、図2の四つのバッファを使用し、バッファ2段目までPCMデータを蓄積したところでDAC送信を開始することによって、1曲ごとに周波数差を吸収している。
周波数差が最大0.01%の場合、5分間の音楽を再生するために必要なバッファ1段当たりのサイズは、最小gバイトである。ここで、DAC送信中のバッファに書込みできるものとする。(e, fは順不同)
模範解答
e:オーバフロー
f:アンダフロー
g:23,040
解説
解答の導き方
-
クロック差によって、データの過不足が起きることを確認します。
本文では、USB通信クロックとDACへの転送クロックは「生成の基になる発振子が異なるので周波数差がある」と説明されています。受信側のクロックが速ければPCMデータがバッファにたまり続け、バッファがあふれるオーバフローが起きます。反対に、DACへの転送側のクロックが速ければ、送信するデータが不足してアンダフローが起きます。したがって、eとfはこの二つの現象です。 -
5分間に生じるデータ量の差を求めます。
対応するフォーマットでは、1サンプル分のPCMデータは2チャネル分を同時にサンプリングしたものです。最大のサンプリング周波数を使って計算すると、1サンプル分のデータ量は次のとおりです。したがって、1秒当たりのデータ量は次のとおりです。5分間は300秒であり、クロック差の最大値である0.01%はです。この間に生じるデータ量の差は、次のように求められます。 -
バッファ1段当たりに必要なサイズを求めます。
本文では「バッファ2段目までPCMデータを蓄積したところでDAC送信を開始」します。つまり、開始時点では2段分のデータが入っています。受信が速い場合は残り2段分が空き容量となり、DACへの転送が速い場合は最初の2段分が不足を補うデータ量になります。どちらの方向でも、クロック差を吸収する余裕はバッファ2段分です。バッファ1段当たりのサイズをバイトとすると、が46,080バイト以上必要です。よって、1段当たりの最小サイズは23,040バイトです。なお、「DAC送信中のバッファに書込みできる」条件も、送信と受信を並行して進める前提です。
誤りやすいポイント
- クロック差があるとき、データが増える場合だけでなく、データが減る場合も考えます。受信が速いとオーバフロー、DACへの転送が速いとアンダフローです。
- 2チャネル分を同時サンプリングするため、1サンプル当たりのデータ量は32ビット分ではなく、2チャネル分の64ビット、つまり8バイトです。
- クロック差によるデータ量の差を、そのまま1段分のサイズにはできません。開始時に2段分が蓄積されているため、過不足を吸収する余裕は2段分です。
FAQ
Q: 受信とDACへの転送のどちらが速いかは、問題文だけで決められますか?
A: 決められません。差の向きによってオーバフローとアンダフローのどちらが起きるかが変わるため、両方を答えます。
A: 決められません。差の向きによってオーバフローとアンダフローのどちらが起きるかが変わるため、両方を答えます。
Q: なぜ周波数差によるデータ量の差を2段分で割るのですか?
A: 再生開始時点で2段分が使用中です。受信が速い場合には残り2段分の空きがあり、DACへの転送が速い場合には使用中の2段分が不足を補うので、許容できる差は2段分です。
A: 再生開始時点で2段分が使用中です。受信が速い場合には残り2段分の空きがあり、DACへの転送が速い場合には使用中の2段分が不足を補うので、許容できる差は2段分です。
関連キーワード: PCMデータ、サンプリング周波数、量子化ビット数、バッファリング、オーバフロー、アンダフロー
設問3(2)
問題文を見るUSBメモリ内の圧縮音楽ファイルの再生時、伸張処理以外の処理負荷を考慮し、表1の伸張タスクのCPU占有率を50%以下にしたい。そのためには、伸張処理1回当たりの伸張タスクの処理時間は何ミリ秒以下でなければならないか。答えは小数第3位を四捨五入して、小数第2位まで求めよ。ここで、サンプリング周波数192kHzのサイクル時間は、5.20マイクロ秒とする。
模範解答
2.60
解説
解答の導き方
-
表1の処理概要には、伸張タスクが「1回の伸張処理ごとに1,000サンプル分」のPCMデータを扱うことが示されています。したがって、伸張処理1回分のPCMデータが再生される時間を求めます。
-
サンプリング周波数192kHzのサイクル時間は5.20マイクロ秒です。問題文では2チャネル分を同時サンプリングしたものを1サンプル分としているので、チャネル数を別に掛ける必要はありません。
よって、1回分の伸張処理は、PCMデータの再生時間である5.20ミリ秒ごとに必要になります。 -
CPU占有率は、伸張処理にかかる時間を、その処理が必要となる間隔で割ったものです。占有率を50%以下にするには、伸張処理時間を5.20ミリ秒の半分以下にします。
誤りやすいポイント
- 192kHzをそのまま処理時間として扱わず、1サンプル当たりの時間である5.20マイクロ秒を使います。
- 2チャネル分を別々に数えて2倍にしないようにします。問題文では、2チャネル分を同時サンプリングして1サンプル分としています。
- バッファが四つあることを理由に、処理時間の間隔を4倍にしないようにします。連続再生中は、1,000サンプル分のPCMデータが5.20ミリ秒で再生されるため、伸張処理もその周期で必要です。
FAQ
Q: 5.20ミリ秒は何を表していますか。
A: 伸張処理1回で生成する1,000サンプル分のPCMデータを、192kHzで再生するのにかかる時間です。
A: 伸張処理1回で生成する1,000サンプル分のPCMデータを、192kHzで再生するのにかかる時間です。
Q: CPU占有率50%以下という条件は、どのように時間に置き換えますか。
A: 1回分の処理が必要となる間隔の50%以下にします。この場合は、5.20ミリ秒の50%である2.60ミリ秒以下です。
A: 1回分の処理が必要となる間隔の50%以下にします。この場合は、5.20ミリ秒の50%である2.60ミリ秒以下です。
Q: バッファにPCMデータを蓄積する目的は、この計算に影響しますか。
A: バッファはデータの一時的な蓄積に使いますが、連続再生に必要な伸張処理の周期は変わりません。そのため、CPU占有率は1,000サンプル分の再生時間を基準に考えます。
A: バッファはデータの一時的な蓄積に使いますが、連続再生に必要な伸張処理の周期は変わりません。そのため、CPU占有率は1,000サンプル分の再生時間を基準に考えます。
関連キーワード: CPU占有率、サンプリング周波数、PCMデータ、バッファリング、リアルタイム処理






