⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sine.cpp

📁 产生双声道音频信号!
💻 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 + -