Files
stk/projects/examples/tcpOut.cpp
Gary Scavone 2f09fcd019 Version 4.1
2013-09-29 23:04:59 +02:00

87 lines
2.2 KiB
C++

/******************************************/
/*
Example program to output N channels of audio
data over a TCP network socket connection.
by Gary P. Scavone, 2000
This program will load a specified WAV,
SND, AIFF, STK RAW, or MAT-file formatted
file. The output data format is set for
signed 16-bit integers. However, it is
easy to change the TcpWvOut setting to
any of the other defined STK_FORMATs.
If using tcpIn, it will be necessary to
change the expected data format there
as well.
The class StrmWvOut first attempts to
establish a socket connection to a socket
server running on port 2006. Therefore,
this program needs to be started AFTER the
streaming server.
*/
/******************************************/
#include "WvIn.h"
#include "TcpWvOut.h"
#include <stdlib.h>
void usage(void) {
// Error function in case of incorrect command-line
// argument specifications.
printf("\nuseage: tcpOut file host <rate>\n");
printf(" where file = the file to load,\n");
printf(" host = the hostname where the receiving\n");
printf(" application is running.\n");
printf(" and rate = an optional playback rate for the file.\n");
printf(" (default = 1.0, can be negative)\n\n");
exit(0);
}
int main(int argc, char *argv[])
{
// Minimal command-line checking.
if (argc < 3 || argc > 4) usage();
// Initialize the object pointers.
TcpWvOut *output = 0;
WvIn *input = 0;
// Load the file.
try {
input = new WvIn( (char *)argv[1] );
}
catch (StkError &) {
exit(0);
}
// Set the global STK sample rate to the file rate.
Stk::setSampleRate( input->getFileRate() );
// Set input read rate.
double rate = 1.0;
if ( argc == 4 ) rate = atof(argv[3]);
input->setRate( rate );
// Find out how many channels we have.
int channels = input->getChannels();
// Define and open the output device
try {
output = new TcpWvOut(2006, (char *)argv[2], channels, Stk::STK_SINT16);
}
catch (StkError &) {
goto cleanup;
}
// Here's the runtime loop
while ( !input->isFinished() )
output->tickFrame( input->tickFrame() );
cleanup:
delete input;
delete output;
return 0;
}