/*
* Audio Library for Linux and Windows
* ===================================
* Author: DJ0ABR
*
* Author: Kurt Moraw, Ham radio: DJ0ABR, github: dj0abr
* License: GPL-3
*
* compilation:
* Windows ... Visual Studio
* Linux ... make
* 
* Documentation see: libkmaudio.h
* Usage Example: see main() in this file
*
*   This program is free software; you can redistribute it and/or modify
*   it under the terms of the GNU General Public License as published by
*   the Free Software Foundation; either version 2 of the License, or
*   (at your option) any later version.
*
*   This program is distributed in the hope that it will be useful,
*   but WITHOUT ANY WARRANTY; without even the implied warranty of
*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*   GNU General Public License for more details.
*
*   You should have received a copy of the GNU General Public License
*   along with this program; if not, write to the Free Software
*   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* libkmaudio.cpp ... main() for test purposes only
* usually this library is linked to another program, in this case
* comment-out #define LIBTEST
*
*/

#include "libkmaudio.h"

int kmaudio_getDeviceList_test();

int keeprunning = 1;

/*
* main()
* for testing purposes only
* for library generation comment out: LIBTEST
*/


#define LIBTEST

#ifdef LIBTEST
int main()
{
    // initialize sound system
    // must be called once after program start
    // if called during program run, this will reset the sound system, so better don't do it
	kmaudio_init();
	
    // read list of devices
    // call as often as needed
    // if a user pluggs-in an USB device on the fly then the running stream may
    // be redirected by the OS. In this case closing/opening the stream
    // may be required.
	kmaudio_getDeviceList();
    
    // start capture and/or playback streams
    // Parameter: the device name and the sample rate (44100 or 48000 are supported)
    // these function return the fifo-index, which is used to access the data in the
    // coresponding fifo

	int capidx = kmaudio_startCapture((char *)"Line 2 (Virtual Audio Cable)", 48000);
    int pbidx = kmaudio_startPlayback((char *)"Line 2 (Virtual Audio Cable)", 48000);

    float f[1100];
    while (1)
    {
        // make a loop: record from Mic and play to Speaker

        int done = 0;
        // read samples from the capture fifo
        int anz = kmaudio_readsamples(capidx, f, 1000, 1.0f, 0);
        if (anz > 0)
        {
            // if samples are available, send them to playback fifo
            //printf("write %d samples from %d to %d\n", anz, capidx, pbidx);
            kmaudio_playsamples(pbidx, f, anz,1.0f);
            done = 1;
        }
    }

    // free resources. This will never happen in this example
    // but should be done in the final program
	kmaudio_close();
	return 0;
}
#endif // LIBTEST
