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