| 次のページ >>

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

雑メモ: オレオレフィードリーダ(書きかけ)

■LDRに落ち着かなかった理由:
自分のフィードチェックのスタイルは
「決まった時間に集中してまとめて全部目を通す」
ではなく、
「作業の合間などヒマなときにちょこちょことチェックする」
なので、表示(読み込み)に時間がかかると見るのが億劫になる
(これはGoogle Reader も同じ)。

モニタとキーボードに張り付いて能動的に
操作しないといけないのが面倒。

あるフィードを全部見てから
次のフィードに移る、という動作がだるい。
どうせ全部消化できない。

「見逃したくないもの」以外は
可能な限り受動的に受け取りたい。

参考: 2007-08-10 増井俊之の「界面潮流」 第7回 受動的インタフェース

■ ティッカー型

動くものは気が散るのでダメ。
ポップアップが出るのも気が散るのでダメ。


■ LDR や Googleリーダーなどのオンラインリーダー

ローカルのフィードが見れない。



■ オレオレ案

(1) バックグラウンドで取得プログラムを定期実行しフィード取得

(2) 各エントリの見出し、更新日時、
description 冒頭の140字を抜き出したテキスト、
description 内の画像または enclosure の画像の URI
をフィード毎にJSONとしてローカルにキャッシュ。
(全文ではなく文字数を制限しているのは
  表示領域内になるべく多くの item を表示させるため。
  キー操作よりも視線移動の方がラクだし、
  画像ならたとえば画面内に20枚表示していっぺんに見ることができるのに、
  キーボードで送り操作する場合は20回キーを押さなければいけない。
  140字なのはなんとなく twitter に合わせてみただけ。
)

(3a) Firefox で twitter, tumblr などのページを開いた際に
Greasemonkey でランダムに適当な数のエントリをページ内に挿入。
ページの表示切り替えにフックして表示されているエントリが切り替わる。

(3b) すべてのエントリをランダムに表示する all.html を生成。
Firefox で見てもいいし、Prism でアプリ化してもいい。
まとめて全エントリ見たい時はこっちを見る。

未読・既読管理はしない。
ブラウザの訪問済み履歴管理(リンクの色)で十分。
既読のものも表示されるが気にしない。
完璧でなくても「広く薄くだいたい全体に目を通せてるような感じ」があればOK?

全文は不要。
記事タイトルと descriptioin 冒頭の 140字で読むか読まないか判断する。
それだけ見て何の記事かよく分からない場合は
「読まなくても問題ない」
「読者に読んでもらおうという気がない」と判断してスルーする。

暇つぶし・息抜きしている時にちらっと視界に入る程度でいい。
というかその程度が良い。
そのようにする。
逆に、何か目的があって作業している時は視界に入らないようにする。
たとえば、検索エンジンで検索している場合は
目的をもって作業しているので見えないようにする。

直近n日以内のエントリだけ抜き出す。

Greasemonkey で表示する方法の良くないところは、
リファラが変になる点。
→ これは JavaScript で対処できた。

見落としたくないフィードについては別のフィードリーダなども利用する。

audio, video 要素を使って
ポッドキャスト、ビデオキャストなども統合したい。
スポンサーサイト

雑メモ: libsndfile を使ってみた

まあ、いろいろと適当ですけど…… いやほんと適当なのでちゃんとやりたい人は The libsndfile API とかを見てください。


Ubuntu Linux の場合は
  $ sudo apt-get install  libsndfile1-dev


16bit の場合

---- 32767
∫
----  1
----  0
---- -1
∫
---- -32767

指定されたフレーム数だけ読み込んで値を表示

/*
gcc snd-003.c -lsndfile -o snd-003.exe
snd-003.exe wav_file_name frames_to_display

frames_to_display で指定されたフレーム数だけ読み込んで値を表示。
入力ファイルのフォーマットは 16bit, ステレオ(チャンネル数=2)。
*/

#include <stdio.h>
#include <sndfile.h>

int main( int argc, char** argv ){

  // ファイル名
  char* file_in =  argv[1] ;
  // 読み込むフレーム数
  int frames_to_read = atoi( argv[2] );

  // ファイルハンドラ
  SNDFILE* sf;
  // チャンネル数、サンプリング周波数などを持つ構造体
  SF_INFO sinfo;

  // sf_open の前に 0 にしておく
  sinfo.format = 0;

  // ファイル開く
  sf = sf_open( file_in, SFM_READ, &sinfo );

  printf( "%s\n", argv[1] );
  printf( "--------\n" );

  // 読み込むフレーム数
  sf_count_t count = 1;

  // 読み込んだ値を入れる配列
  short val[2];

  // 1フレームずつ読み込んで値を表示
  int a;
  for( a = 0; a < frames_to_read; a++ ){
    sf_readf_short( sf, val, count) ;

    printf( "% 4d:  L: % 6d  -  R: % 6d \n", a, val[0], val[1] );
  }

  // ファイル閉じる
  sf_close( sf );

  return 0;
}

読んでそのまま書き込み

/*
20080914
gcc snd-004.c -lsndfile -o snd-004.exe
snd-004.exe file_in file_out

file_in を読み込んで 1フレームずつ読み、file_out に移し替える
入力ファイルのフォーマットは 16bit, ステレオ(チャンネル数=2)とする。
*/

#include <stdio.h>
#include <sndfile.h>

int main( int argc, char** argv ){
  char* file_in  = argv[1] ;
  char* file_out = argv[2] ;

  SNDFILE* sfr;
  SNDFILE* sfw;
  // チャンネル数、サンプリング周波数などを持つ構造体
  SF_INFO sinfo;

  sinfo.format = 0;

  // ファイル開く
  // 入力
  sfr = sf_open( file_in, SFM_READ, &sinfo );
  // 出力 - 入力ファイルと同じフォーマットなので、sinfo をそのまま渡す
  sfw = sf_open( file_out, SFM_WRITE, &sinfo );

  printf( "sinfo.frames   = %d  \n", sinfo.frames   );
  printf( "sinfo.format   = 0x%x\n", sinfo.format   );
  printf( "sinfo.channels = %d  \n", sinfo.channels );
  printf( "sinfo.sections = %d  \n", sinfo.sections );
  printf( "sinfo.seekable = %d  \n", sinfo.seekable );

  printf( "--------\n" );

  sf_count_t count = 1;
  short val[ (int)count * sinfo.channels ];

  int a = 0;
  sf_count_t read_num;
  while(1){
    // これ以上データがないという場合には count と異なる値が返ってくる
    read_num = sf_readf_short(  sfr, val, count) ;
    printf( "% 4d:  L: % 6d  -  R: % 6d  -  %6d \n", a, val[0], val[1], read_num );

    if( read_num != count ){ 
      // ファイル終端まで達したらループ抜ける
      break; 
    } else {
      // 読み込みに成功していれば書き込む
      sf_writef_short( sfw, val, count) ;
    }

    a++;
  }

  // ファイル閉じる
  sf_close( sfr );
  sf_close( sfw );

  return 0;
}

サイン波を書き出す

参考: TaptAudio: sample.cpp Source File / unpaid_p10l: Parser/Reader for Korg KMP and KSF Files

/*
20080915
gcc snd-006.c -lsndfile -o snd-006.exe
snd-006.exe file_out frequency length_sec

周波数(Hz)、長さ(秒)を指定してサイン波を書き出す。
出力ファイルのフォーマットは 16bit, モノラル(チャンネル数=1)とする。
*/

#include <stdio.h>
#include <stdlib.h> // atof
#include <math.h> // atan, pow
#include <sndfile.h>

#define PI ( 4*atan(1.0) )

#define SAMPLE_RATE 44100
#define BIT_DEPTH 16

// 16bit のとき 2^15 - 1 = 32767
#define AMP_MAX (pow(2,(BIT_DEPTH-1)) - 1)

short frame2sine( int frame, double freq){
  //  double sec = (double)(frame % SAMPLE_RATE) / SAMPLE_RATE;
  double sec = (double)frame / SAMPLE_RATE;
  return (short)( sin( sec * 2 * PI * freq ) * AMP_MAX );
}

int main( int argc, char** argv ){
  char* file_out = argv[1] ;
  double freq = atof(argv[2]) ;
  double length_sec = atof(argv[3]) ;

  SNDFILE* sfw;
  SF_INFO sfinfo;

  // .wav の場合最低限この3つは指定しないといけないっぽい
  sfinfo.samplerate = SAMPLE_RATE;
  sfinfo.channels = 1;
  sfinfo.format = SF_FORMAT_WAV | SF_FORMAT_PCM_16;

  // 書き込み用に sf_open() する前にフォーマットをチェック
  if( sf_format_check( &sfinfo ) == 0 ){
    printf( "invalid format: %d\n", sf_format_check( &sfinfo ) );
    exit(1);
  }

  sfw = sf_open( file_out, SFM_WRITE, &sfinfo );

  sf_count_t frames = 1;
  short val[ (int)frames * sfinfo.channels ];

  int a = 0;
  sf_count_t write_num;
  for( a=0; a < (int)(SAMPLE_RATE * length_sec); a++ ){
    val[0] = frame2sine(a, freq);
    write_num = sf_writef_short( sfw, val, frames ) ;
  }

  sf_close( sfw );

  return 0;
}

参考

[雑メモ] ffmpeg で 1枚の静止画から動画作成(ニコニコ動画向け)

後でまたやる時のための。
Windows ムービーメーカーがインストールできないので苦肉の策というか…… たぶんもっと要領のいいやり方があると思います。

それと、自分の環境ではこの方法だと映像が音声に対して約1秒遅れますのでその対策 (音声の先頭を1秒延ばすとか…)も必要です。

[追記 20090203] 5分だったか10分だったか忘れましたが、短いものなら ニコニコムービーメーカー を使う方が断然楽だと思います。 ちなみにこの記事はNMMが出る前に書きました。

[雑メモ] フォルダ内の画像を順に表示させて手動リネームを繰り返す、をキーボード操作だけで行う

XnView と IrfanView で共通です。


  1. 対象となるフォルダの中にある画像を表示させます。 どれでもいいのですが、ファイル名が一番若いものを選ぶといいでしょう。
  2. [F2] を押してファイル名を変更し、[Enter] で確定。
  3. [PageDown] を押して次の画像へ。
    (前の画像へ戻る場合は [PageUp] )
  4. 上記の手順をくりかえし。



** ホームに戻る

| 次のページ >>
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。