/*
 *  lib_madタスク
 */
void
mad_decode(void *h) ←MAD_TASKが起動するとmad_decode関数を呼び出す．処理終了で関数を抜けた後，タスクは終了する
{
    MUSIC_TRANS *mtrans = h;
    MUSIC_INFO  *minfo = mtrans->minfo;
    struct mad_decoder decoder;
    int result;

    /* configure input, output, and error functions */

    minfo->status |= AUDIO_DECODE;
    mad_decoder_init(&decoder, mtrans,  ←libmadの初期化関数，実行部の実行関数を設定する
       input, 0 /* header */, 0 /* filter */, output,
       error, 0 /* message */);

    /* start decoding */

    result = mad_decoder_run(&decoder,
                             MAD_DECODER_MODE_SYNC); ←libmadのMP3デコード関数
実行中，input，output，error関数を呼び出す


    /* release the decoder */

    mad_decoder_finish(&decoder);   ←libmadの終了関数
    if(result != 0 && (minfo->status & AUDIO_STOP)
                      == 0)
        syslog(LOG_ERROR, "mad error(%d) !", result);
    minfo->status &= ~AUDIO_DECODE;
}
