Files
stk/projects/examples/tcpIn.cpp
Gary Scavone a6381b9d38 Version 4.2.0
2013-09-29 23:06:14 +02:00

90 lines
2.2 KiB
C++

/******************************************/
/*
Example program to read N channels of audio
data that are streamed over a TCP network
connection.
by Gary P. Scavone, 2000
NOTE: This program makes use of blocking audio
input/output routines. On systems where the
underlying audio API is based on a callback scheme
(Macintosh OS-X, Windows ASIO, and Linux JACK), these
routines are not fully robust (over/underruns can
happen with some frequency). See the STK tutorial
for example programs using callback schemes and/or
visit the RtAudio tutorial page
(http://music.mcgill.ca/~gary/rtaudio/) for more
information.
This program is currently written to play
the input data in realtime. However, it
is simple to replace the instance of
RtWvOut with WvOut for writing to a
soundfile.
The streamed data format is assumed to be
signed 16-bit integers. However, both
TcpWvIn and TcpWvOut can be initialized
to read/write any of the defined StkFormats.
The class TcpWvIn sets up a socket server
and waits for a connection. Therefore,
this program needs to be started before
the streaming client. This program will
terminate when the socket connection is
closed.
*/
/******************************************/
#include "TcpWvIn.h"
#include "RtWvOut.h"
void usage(void) {
// Error function in case of incorrect command-line
// argument specifications.
printf("\nuseage: tcpIn N fs \n");
printf(" where N = number of channels,\n");
printf(" and fs = the data sample rate.\n\n");
exit(0);
}
int main(int argc, char *argv[])
{
// Minimal command-line checking.
if (argc != 3) usage();
Stk::setSampleRate( atof(argv[2]) );
int channels = (int) atoi(argv[1]);
// Initialize the object pointers.
RtWvOut *output = 0;
TcpWvIn *input = 0;
// Instantiate the TcpWvIn object.
try {
input = new TcpWvIn();
input->listen( channels, Stk::STK_SINT16 );
}
catch (StkError &) {
goto cleanup;
}
// Open the realtime output device.
try {
output = new RtWvOut(channels);
}
catch (StkError &) {
goto cleanup;
}
// Here's the runtime loop.
while ( input->isConnected() )
output->tickFrame( input->tickFrame() );
cleanup:
delete input;
delete output;
return 0;
}