/*
	scanclr: Estimate length (sample count) of a mpeg file and compare to length from exact scan.

	copyright 2009 by the mpg123 project - free software under the terms of the LGPL 2.1
	see COPYING and AUTHORS files in distribution or http://mpg123.org

    CLR example initially written by Malcolm Boczek
    Based on scan.c example initially written by Thomas Orgis
*/

/* Note the lack of error checking here.
   While it would be nicer to inform the user about troubles, libmpg123 is designed _not_ to bite you on operations with invalid handles , etc.
  You just jet invalid results on invalid operations... */
/* Ditto for mpg123clr (MB) */

/*
	1.9.0.0 24-Sep-09	Function names harmonized with libmpg123 (mb)
*/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using mpg123clr;

namespace scanclr
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length < 1)
            {
                Console.WriteLine("\nI will give you the estimated and exact sample lengths of MPEG audio files.\n");
                Console.WriteLine("\nUsage: scanclr <mpeg audio file list>\n\n");
                Console.WriteLine("Press any key to exit:");
                while (Console.Read() == 0) ;

                return;
            }


            mpg123clr.mpg.ErrorCode err;

            err = mpg123.mpg123_init();

            mpg123 mp = new mpg123();
            err = mp.mpg123_new();

            mp.mpg123_param(mpg123clr.mpg.parms.resync_limit, -1, 0);

            foreach (string name in args)
            {

                err = mp.mpg123_open(name);

                long a, b;

                a = mp.mpg123_length();

                mp.mpg123_scan();

                b = mp.mpg123_length();

                mp.mpg123_close();

                Console.WriteLine(string.Format("File {0}: estimated {1} vs. scanned {2}", name, a, b));
            }

            Console.WriteLine("\nPress any key to exit:");
            while (Console.Read() == 0) ;

            mp.Dispose();

            mpg123.mpg123_exit();
        }
    }
}
