100 likes | 185 Views
タイムスタンプ付ストリーム I/O による音の実時間処理. 学籍番号 98-0997-3 栗田 亮 指導教官 千葉 滋 講師. 音のサンプリングの仕組み. サンプリング・・・音をデジタル変換し記録する技術 Linux カーネルにおける音の録音 サウンドデバイスにアクセスして行う ADC・・・ アナログ・デジタル変換器 割り込み・・・カーネルバッファにデジタルデータが格納される read()・・・ カーネルバッファからアプリケーションバッファへサウンドデータをコピー. kernel. application. アナログデータ. buffer. buffer.
E N D
タイムスタンプ付ストリームI/Oによる音の実時間処理タイムスタンプ付ストリームI/Oによる音の実時間処理 学籍番号 98-0997-3 栗田 亮 指導教官 千葉 滋 講師
音のサンプリングの仕組み • サンプリング・・・音をデジタル変換し記録する技術 • Linuxカーネルにおける音の録音 • サウンドデバイスにアクセスして行う • ADC・・・アナログ・デジタル変換器 • 割り込み・・・カーネルバッファにデジタルデータが格納される • read()・・・カーネルバッファからアプリケーションバッファへサウンドデータをコピー kernel application アナログデータ buffer buffer ADC
音飛び • サンプリングでの問題 ー 音飛び • 音飛びが生じると・・・一部のデータが抜け落ち、抜け落ちた分余計に記録してしまう • 原因1:割り込み処理の遅れ • 実際に高負荷をかけたが確認されなかった • 原因2:アプリケーションの遅れ • カーネルバッファが一杯になり、後からきたデータが破棄されて失われてしまう • サンプリングと同時に複数のアプリケーションを実行させていると、マシンに負荷がかかり生じる
リアルタイムOSによる対処 • 既存の汎用リアルタイムOS • RT-Linux • 割り込み処理を高速化する機能を提供 • 音飛びの問題ではあまり重要ではない • プログラミングが複雑 • ART-Linux • 非リアルタイム処理が遅くなる • まだ研究レベル
提案するシステムTS-I/O (Time Stamp - I/O) • 入出力(I/O)のタイムスタンプを記録するシステム • I/Oデータがバッファに正常に格納された始まりの時刻と終わりの時刻を記録する size=10 時刻 0 4 6 10秒 音飛び kernel buffer application buffer size=8 サウンド データ buf tsize タイム スタンプ 0..4 6..10 tbuf
TS-I/Oの利用 • ソフトリアルタイムのI/O処理が可能に • ソフトリアルタイム・・・音飛びに対処 • 音飛びの発生をアプリケーションに通知 • メディアストリーム処理では、応答性よりも時間軸に沿ったI/O管理が重要 • 複数のメディアとの同期 e.g. 自動伴奏、カラオケ • I/Oのみなので、システムはシンプル • タイムスタンプを元にリカバリー処理が可能 e.g. 無音データを挿入することで実時間に沿った再生が可能
追加したシステムコール • read_gettbuf(fd,buf,tbuf,size,tsize) • read(fd,buf,size)+タイムスタンプの取り出し • tbuf・・・タイムスタンプを格納するバッファ • tsize・・・タイムスタンプのサイズ kernel buffer application buffer size サウンド データ buf tsize タイム スタンプ 0..4 6..10 tbuf
TS-I/Oの実装 • 対象にしたデバイス・ドライバ • Linux2.2.19,linux/drivers/sound/es1371.c • es1371_read()・・・カーネルバッファにたまったサウンドデータをアプリケーションバッファへコピーする関数 • es1371_interrupt()・・・カーネルバッファにI/Oデータが格納された際に呼ばれる割り込み処理関数 • es1371_interrupt()が呼ばれた時刻を監視し、音飛びのタイムスタンプをカーネルに記録する • es1371_read()処理後、アプリケーションにタイムスタンプを渡す • es1371_read()で音飛びした分の無音データを挿入できる
デモ • 音飛びを検出して無音区間を挿入するアプリケーション • 音飛びに対して無音を入れたデータ、音源データ、音飛びしてしまったデータの比較 • 比較方法 • 波形をみる • 実際に聞いてみる
まとめ • TS-I/Oを提案 • LinuxにおけるI/Oレベルでのソフトリアルタイム処理を可能にする機能 • タイムスタンプを利用した音飛びの通知 • 課題 • 出力もTS-I/O • 音以外のI/Oデータ (例 動画) に対して TS-I/Oを適応