表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
47/61

5. シーク機能で意外に苦戦

MPEG フレームのサイズは計算で得られるから、ちょろいちょろい。

と思って実装を始めたら全然合わない。計算してシークした先がMPEGフレームの先頭に一致しない。フレームの構造をよく見ると、ときおりフレームサイズが1バイト増えている。確かに padding の有無を示すビットがヘッダにあるけれど。bitrateに正確に合わせるためか?


仕方がないので、MPEGのフレーム開始位置に正確に飛ぶのはあきらめて、ビットレートと飛び先の秒数からファイル位置を計算し、そこにシークしてから、MPEGフレームの検索処理に任せることにした。


雑な処理のわりに調子よく動いてるな。と思いつつ、キーを押すと10秒飛ばす処理で試してたら、たまにMP3のデコードがエラーになる。


エラー発生時のデータをダンプしてみてみると、ヘッダのデータが微妙におかしい。

どうやら、使ってるデコーダのMPEGフレーム検索処理は「きちんと処理できている」のが前提で、ファイルの途中から正しいフレームを検索する目的には使えないようだ。まぁそりゃそうか。


原因さえわかれば検索処理を作り直すだけだ!とか思ったが、デコードエラーが起きたら次のフレームを探して再生。を繰り返せばそのうち正常に戻るんでは?と気が付いた。


ちょっと気持ち悪いが、動くようになったんでヨシ!

まぁ、動画にした場合に音ズレ起こしそうだけど。。。

評価をするにはログインしてください。
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

↑ページトップへ