📄 sine.cpp
字号:
/******************************************//* Example program to write N sine tones to an N channel soundfile. By default, the program will write an N channel WAV file. However, it is simple to change the file type argument in the FileWvOut constructor. By Gary P. Scavone, 2000 - 2002.*//******************************************/#include "SineWave.h"#include "FileWvOut.h"#include <stdlib.h>void usage(void) { // Error function in case of incorrect command-line // argument specifications. printf("\nuseage: sine N file time fs\n"); printf(" where N = number of channels (sines),\n"); printf(" file = the .wav file to create,\n"); printf(" time = the amount of time to record (in seconds),\n"); printf(" and fs = the sample rate (in Hz).\n\n"); exit(0);}intmain(int argc, char *argv[]){ float base_freq = 220.0; int i; // Minimal command-line checking. if ( argc != 5 ) usage(); int channels = (int) atoi(argv[1]); double time = atof(argv[3]); double srate = atof(argv[4]); // Create our object instances. FileWvOut output; SineWave **oscs = (SineWave **) malloc( channels * sizeof(SineWave *) ); for ( i=0; i<channels; i++ ) oscs[i] = 0; // If you want to change the default sample rate (set in Stk.h), do // it before instantiating any objects!! Stk::setSampleRate( srate ); // Define the sinewaves. for ( i=0; i<channels; i++ ) oscs[i] = new SineWave; // Set oscillator frequency(ies) here ... somewhat random. for ( i=0; i<channels; i++ ) oscs[i]->setFrequency( base_freq + i*(45.0) ); long nFrames = (long) ( time * Stk::sampleRate() ); StkFrames frames( nFrames, channels ); // Open the soundfile for output. Other file format options // include: FILE_SND, FILE_AIF, FILE_MAT, and FILE_RAW. Other data // type options include: STK_SINT8, STK_SINT32, StkFloat32, and // StkFloat64. try { output.openFile( argv[2], channels, FileWrite::FILE_WAV, Stk::STK_SINT16 ); } catch ( StkError & ) { goto cleanup; } // Here's the runtime code ... no loop for ( i=0; i<channels; i++ ) oscs[i]->tick( frames, i ); output.tickFrame( frames ); cleanup: for ( i=0; i<channels; i++ ) delete oscs[i]; free( oscs ); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -