mirror of
https://github.com/thestk/stk
synced 2026-01-12 04:21:52 +00:00
74 lines
1.7 KiB
C++
74 lines
1.7 KiB
C++
/******************************************/
|
|
/*
|
|
Example program to output N channels of audio
|
|
data over an ethernet socket connection.
|
|
|
|
by Gary P. Scavone, 2000
|
|
|
|
This program is currently written to load
|
|
a WAV file for streaming. However, it is
|
|
simple to replace the instance of WavWvIn
|
|
with any other WvIn subclass.
|
|
|
|
The class StrmWvOut first attempts to
|
|
establish a socket connection to a socket
|
|
server running on port 2005. Thus, this
|
|
program needs to be started after the
|
|
streaming server.
|
|
*/
|
|
/******************************************/
|
|
|
|
#include "WavWvIn.h"
|
|
#include "StrmWvOut.h"
|
|
|
|
void usage(void) {
|
|
/* Error function in case of incorrect command-line
|
|
argument specifications
|
|
*/
|
|
printf("\nuseage: streamOutN N file host fs \n");
|
|
printf(" where N = number of channels,\n");
|
|
printf(" file = the .wav file to load,\n");
|
|
printf(" host = the hostname of the receiving app,\n");
|
|
printf(" and fs = the sample rate.\n\n");
|
|
exit(0);
|
|
}
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
// minimal command-line checking
|
|
if (argc != 5) usage();
|
|
|
|
int chans = (int) atoi(argv[1]);
|
|
|
|
// Define and load the SND soundfile
|
|
WvIn *input;
|
|
try {
|
|
input = new WavWvIn((char *)argv[2], "oneshot");
|
|
}
|
|
catch (StkError& m) {
|
|
m.printMessage();
|
|
exit(0);
|
|
}
|
|
// Set playback rate here
|
|
input->setRate(atof(argv[4])/SRATE);
|
|
|
|
// Define and open the realtime output device
|
|
WvOut *output;
|
|
try {
|
|
output = new StrmWvOut(2005, (char *)argv[3], chans);
|
|
}
|
|
catch (StkError& m) {
|
|
m.printMessage();
|
|
exit(0);
|
|
}
|
|
|
|
// Here's the runtime loop
|
|
while (!input->isFinished()) {
|
|
output->mtick(input->mtick());
|
|
}
|
|
|
|
// Clean up
|
|
delete input;
|
|
delete output;
|
|
}
|