タイムスタンプ付ストリーム i/o による音の実時間処理

10
1 タタタタタタタタタタタタタ I/O タタタタタ タタタタタ 学学学学 98-0997-3 学学 学 学学学学 学学 学 学学

Upload: chandler-ewing

Post on 30-Dec-2015

31 views

Category:

Documents


0 download

DESCRIPTION

タイムスタンプ付ストリーム I/O による音の実時間処理. 学籍番号 98-0997-3 栗田 亮 指導教官 千葉 滋 講師. 音のサンプリングの仕組み. サンプリング・・・音をデジタル変換し記録する技術 Linux カーネルにおける音の録音 サウンドデバイスにアクセスして行う ADC・・・ アナログ・デジタル変換器 割り込み・・・カーネルバッファにデジタルデータが格納される read()・・・ カーネルバッファからアプリケーションバッファへサウンドデータをコピー. kernel. application. アナログデータ. buffer. buffer. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: タイムスタンプ付ストリーム I/O による音の実時間処理

1

タイムスタンプ付ストリームI/O による音の実時間処理

学籍番号 98-0997-3栗田 亮指導教官 千葉 滋 講師

Page 2: タイムスタンプ付ストリーム I/O による音の実時間処理

2

音のサンプリングの仕組み サンプリング・・・音をデジタル変換し記録する技術 Linux カーネルにおける音の録音

サウンドデバイスにアクセスして行う ADC ・・・アナログ・デジタル変換器 割り込み・・・カーネルバッファにデジタルデータが格納さ

れる read() ・・・カーネルバッファからアプリケーションバッ

ファへサウンドデータをコピー

ADC

buffer buffer

kernel application

アナログデータ

Page 3: タイムスタンプ付ストリーム I/O による音の実時間処理

3

音飛び サンプリングでの問題 ー 音飛び

音飛びが生じると・・・一部のデータが抜け落ち、抜け落ちた分余計に記録してしまう

原因1:割り込み処理の遅れ• 実際に高負荷をかけたが確認されなかった

原因2:アプリケーションの遅れ• カーネルバッファが一杯になり、後からきたデータが破棄

されて失われてしまう• サンプリングと同時に複数のアプリケーションを実行させ

ていると、マシンに負荷がかかり生じる

Page 4: タイムスタンプ付ストリーム I/O による音の実時間処理

4

リアルタイム OS による対処 既存の汎用リアルタイム OS

RT-Linux• 割り込み処理を高速化する機能を提供• 音飛びの問題ではあまり重要ではない• プログラミングが複雑

ART-Linux• 非リアルタイム処理が遅くなる• まだ研究レベル

Page 5: タイムスタンプ付ストリーム I/O による音の実時間処理

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

Page 6: タイムスタンプ付ストリーム I/O による音の実時間処理

6

TS-I/O の利用 ソフトリアルタイムの I/O 処理が可能に

ソフトリアルタイム・・・音飛びに対処 音飛びの発生をアプリケーションに通知 メディアストリーム処理では、応答性よりも時間軸

に沿った I/O 管理が重要• 複数のメディアとの同期 e.g. 自動伴奏、カラオケ

I/O のみなので、システムはシンプル タイムスタンプを元にリカバリー処理が可能

  e.g. 無音データを挿入することで実時間に沿った再生が可能

Page 7: タイムスタンプ付ストリーム I/O による音の実時間処理

7

追加したシステムコール read_gettbuf(fd,buf,tbuf,size,tsize)

read(fd,buf,size)+ タイムスタンプの取り出し• tbuf ・・・タイムスタンプを格納するバッファ• tsize ・・・タイムスタンプのサイズ

0..46..10

タイムスタンプ

サウンドデータ

kernelbuffer

applicationbuffer

buf

tbuf

size

tsize

Page 8: タイムスタンプ付ストリーム I/O による音の実時間処理

8

TS-I/O の実装 対象にしたデバイス・ドライバ

• Linux2.2.19,linux/drivers/sound/es1371.c• es1371_read() ・・・カーネルバッファにたまったサウ

ンドデータをアプリケーションバッファへコピーする関数• es1371_interrupt() ・・・カーネルバッファに I/O デー

タが格納された際に呼ばれる割り込み処理関数 es1371_interrupt() が呼ばれた時刻を監視し、音飛びのタイ

ムスタンプをカーネルに記録する es1371_read() 処理後、アプリケーションにタイムスタンプ

を渡す es1371_read() で音飛びした分の無音データを挿入できる

Page 9: タイムスタンプ付ストリーム I/O による音の実時間処理

9

デモ 音飛びを検出して無音区間を挿入するア

プリケーション 音飛びに対して無音を入れたデータ、音源

データ、音飛びしてしまったデータの比較 比較方法

• 波形をみる• 実際に聞いてみる

Page 10: タイムスタンプ付ストリーム I/O による音の実時間処理

10

まとめ TS-I/O を提案

Linux における I/O レベルでのソフトリアルタイム処理を可能にする機能

タイムスタンプを利用した音飛びの通知 課題

出力も TS-I/O 音以外の I/O データ ( 例 動画 ) に対して

TS-I/O を適応