>> 古い記事: Linux: ファイルマネージャから Timidity の ncurses インターフェイスで MIDIファイルを再生する
<< 新しい記事: 雑メモ: Krita でタブレットペンの追従が遅い時に確認すべき設定箇所

スポンサーサイト

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

libsndfile でコンプレッサもどき

やっつけ。動作説明は図とソースを見てください。以上。

2008-11-16 LADSPAプラグイン化してみました → http://docs.google.com/Doc?id=d26vnfx_10767nz53cz

/*
20081005
gcc comp-modoki.c -lsndfile -o comp-modoki
comp-modoki  file_in  file_out  lv1  lv2

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

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

void comp_proc( double* val, double lv1, double lv2 ){
//  printf( "%.4f  %.4f  %.4f  \n", *val, lv1, lv2 );
  if( *val < lv1 && -lv1 < *val ){
    *val = *val * ( lv2 / lv1 );
  }else{
    if( *val > 0 ){
      *val = ((*val-lv1) * (1-lv2) / (1-lv1)) + lv2 ;
    }else{
      *val = ((*val+lv1) * (1-lv2) / (1-lv1)) - lv2 ;
    }
  }
}

int main( int argc, char** argv ){
  char* file_in  = argv[1] ;
  char* file_out = argv[2] ;
  double lv1 = atof( argv[3] );
  double lv2 = atof( argv[4] );

  SNDFILE* sfr;
  SNDFILE* sfw;
  SF_INFO sinfo;

  sinfo.format = 0;

  // ファイル開く
  sfr = sf_open( file_in, SFM_READ, &sinfo );
  sfw = sf_open( file_out, SFM_WRITE, &sinfo );

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

  int ch;
  int a = 0;
  sf_count_t read_num;
  while(1){
    read_num = sf_readf_double(  sfr, val, count) ;
    // printf( "% 4d:  L: %0.2f  -  R: %0.2f  -  %6d \n", a/44100, val[0], val[1], (int)read_num );

    if( read_num != count ){ 
      // ファイル終端まで達したらループ抜ける
      break; 
    } else {
      // 処理して書き込む
      for( ch=0; ch<sinfo.channels; ch++ ){
        comp_proc( &val[ch], lv1, lv2 );
      }
      sf_writef_double( sfw, val, count) ;
    }

    a++;
  }

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

  return 0;
}

2008-10-05 間違ってたので一部修正。

>> 古い記事: Linux: ファイルマネージャから Timidity の ncurses インターフェイスで MIDIファイルを再生する
<< 新しい記事: 雑メモ: Krita でタブレットペンの追従が遅い時に確認すべき設定箇所
** ホームに戻る

コメント

コメントの投稿

管理者にだけ表示を許可する

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