static void select_output(espeak_AUDIO_OUTPUT output_type) {//======================================================= my_mode = output_type; my_audio = NULL; synchronous_mode = 1; option_waveout = 1; // inhibit portaudio callback from wavegen.cpp switch(my_mode) { case AUDIO_OUTPUT_PLAYBACK: synchronous_mode = 0; #ifdef USE_ASYNC wave_init(); wave_set_callback_is_output_enabled( fifo_is_command_enabled); my_audio = wave_open("alsa"); event_init(); #endif break; case AUDIO_OUTPUT_RETRIEVAL: synchronous_mode = 0; break; case AUDIO_OUTPUT_SYNCHRONOUS: break; case AUDIO_OUTPUT_SYNCH_PLAYBACK: option_waveout = 0; WavegenInitSound(); break; } } // end of select_output
void BiorCoefTests() { wave_object obj; double epsilon = 1e-10; double t1,t2,t3,t4,t5,t6; std::vector<std::string > waveletNames; waveletNames.push_back("bior1.1"); waveletNames.push_back("bior1.3"); waveletNames.push_back("bior1.5"); waveletNames.push_back("bior2.2"); waveletNames.push_back("bior2.4"); waveletNames.push_back("bior2.6"); waveletNames.push_back("bior2.8"); waveletNames.push_back("bior3.1"); waveletNames.push_back("bior3.3"); waveletNames.push_back("bior3.5"); waveletNames.push_back("bior3.7"); waveletNames.push_back("bior3.9"); waveletNames.push_back("bior4.4"); waveletNames.push_back("bior5.5"); waveletNames.push_back("bior6.8"); for (unsigned int j = 0; j < waveletNames.size(); j++) { char * name = new char[waveletNames[j].size() + 1]; memcpy(name, waveletNames[j].c_str(), waveletNames[j].size() + 1); obj = wave_init(name);// Initialize the wavelet t1 = sum1(obj->lpr, obj->lpr_len) - sqrt(2.0); t2 = sum1(obj->lpd, obj->lpd_len) - sqrt(2.0); t3 = sum2(obj->lpr, obj->lpr_len) - 1. / sqrt(2.0); t4 = sum2(obj->lpd, obj->lpd_len) - 1. / sqrt(2.0); t5 = sum3(obj->lpr, obj->lpr_len) - 1. / sqrt(2.0); t6 = sum3(obj->lpd, obj->lpd_len) - 1. / sqrt(2.0); if (fabs(t1) > epsilon || fabs(t2) > epsilon || fabs(t3) > epsilon || fabs(t4) > epsilon || fabs(t5) > epsilon || fabs(t6) > epsilon ) { printf("\n ERROR : Bior Coefficients Unit Test Failed. Exiting. \n"); exit(-1); } wave_free(obj); delete[] name; } }
void CoifCoefTests() { wave_object obj; double epsilon = 1e-15; double t1,t2,t3,t4,t5; std::vector<std::string > waveletNames; waveletNames.resize(17); for (unsigned int i = 0; i < waveletNames.size(); i++) { waveletNames[i] = std::string("coif") + patch::to_string(i + 1); } for (unsigned int j = 0; j < waveletNames.size(); j++) { char * name = new char[waveletNames[j].size() + 1]; memcpy(name, waveletNames[j].c_str(), waveletNames[j].size() + 1); obj = wave_init(name);// Initialize the wavelet t1 = sum1(obj->lpr, obj->lpr_len) - sqrt(2.0); t2 = sum2(obj->lpr, obj->lpr_len) - 1. / sqrt(2.0); t3 = sum3(obj->lpr, obj->lpr_len) - 1. / sqrt(2.0); t4 = sum4(obj->lpr, obj->lpr_len) - 1.; if (fabs(t1) > epsilon || fabs(t2) > epsilon || fabs(t3) > epsilon || fabs(t4) > epsilon) { printf("\n ERROR : Coif Coefficients Unit Test Failed. Exiting. \n"); exit(-1); } for (int m = 1; m < (obj->lpr_len / 2) - 1;m++) { t5 = sum5(obj->lpr, obj->lpr_len, m); if (fabs(t5) > epsilon) { printf("\n ERROR : Coif Coefficients Unit Test Failed. Exiting. \n"); exit(-1); } } wave_free(obj); delete[] name; } }
static int dispatch_audio(short* outbuf, int length, espeak_EVENT* event) {//====================================================================== ENTER("dispatch_audio"); int a_wave_can_be_played = fifo_is_command_enabled(); #ifdef DEBUG_ENABLED SHOW("*** dispatch_audio > uid=%d, [write=%p (%d bytes)], sample=%d, a_wave_can_be_played = %d\n", (event) ? event->unique_identifier : 0, wave_test_get_write_buffer(), 2*length, (event) ? event->sample : 0, a_wave_can_be_played); #endif switch(my_mode) { case AUDIO_OUTPUT_PLAYBACK: { int event_type=0; if(event) { event_type = event->type; } if(event_type == espeakEVENT_SAMPLERATE) { voice_samplerate = event->id.number; if(out_samplerate != voice_samplerate) { if(out_samplerate != 0) { // sound was previously open with a different sample rate wave_close(my_audio); sleep(1); } out_samplerate = voice_samplerate; if(!wave_init(voice_samplerate)) { err = EE_INTERNAL_ERROR; return(-1); } wave_set_callback_is_output_enabled( fifo_is_command_enabled); my_audio = wave_open("alsa"); event_init(); } } if (outbuf && length && a_wave_can_be_played) { wave_write (my_audio, (char*)outbuf, 2*length); } while(a_wave_can_be_played) { // TBD: some event are filtered here but some insight might be given // TBD: in synthesise.cpp for avoiding to create WORDs with size=0. // TBD: For example sentence "or ALT)." returns three words // "or", "ALT" and "". // TBD: the last one has its size=0. if (event && (event->type == espeakEVENT_WORD) && (event->length==0)) { break; } espeak_ERROR a_error = event_declare(event); if (a_error != EE_BUFFER_FULL) { break; } SHOW_TIME("dispatch_audio > EE_BUFFER_FULL\n"); usleep(10000); a_wave_can_be_played = fifo_is_command_enabled(); } } break; case AUDIO_OUTPUT_RETRIEVAL: if (synth_callback) { synth_callback(outbuf, length, event); } break; case AUDIO_OUTPUT_SYNCHRONOUS: case AUDIO_OUTPUT_SYNCH_PLAYBACK: break; } if (!a_wave_can_be_played) { SHOW_TIME("dispatch_audio > synth must be stopped!\n"); } SHOW_TIME("LEAVE dispatch_audio\n"); return (a_wave_can_be_played==0); // 1 = stop synthesis, -1 = error }
int main() { wave_object obj; wt_object wt; double *inp,*out,*diff; int N, i,J; FILE *ifp; double temp[1200]; char *name = "db4"; obj = wave_init(name);// Initialize the wavelet ifp = fopen(FILE_SIGNAL, "r"); i = 0; if (!ifp) { printf("Cannot Open File"); exit(100); } while (!feof(ifp)) { fscanf(ifp, "%lf \n", &temp[i]); i++; } N = 256; inp = (double*)malloc(sizeof(double)* N); out = (double*)malloc(sizeof(double)* N); diff = (double*)malloc(sizeof(double)* N); //wmean = mean(temp, N); for (i = 0; i < N; ++i) { inp[i] = temp[i]; //printf("%g \n",inp[i]); } J = 3; wt = wt_init(obj, "dwt", N, J);// Initialize the wavelet transform object setDWTExtension(wt, "sym");// Options are "per" and "sym". Symmetric is the default option setWTConv(wt, "direct"); dwt(wt, inp);// Perform DWT //DWT output can be accessed using wt->output vector. Use wt_summary to find out how to extract appx and detail coefficients for (i = 0; i < wt->outlength; ++i) { // printf("%g ",wt->output[i]); } idwt(wt, out);// Perform IDWT (if needed) // Test Reconstruction for (i = 0; i < wt->siglength; ++i) { diff[i] = out[i] - inp[i]; } printf("\n MAX %g \n", absmax(diff, wt->siglength)); // If Reconstruction succeeded then the output should be a small value. wt_summary(wt);// Prints the full summary. wave_free(obj); wt_free(wt); free(inp); free(out); free(diff); return 0; }
int main(int argc, char **argv) { twolame_options *encodeOptions; char *inputfilename = argv[1]; char *outputfilename = argv[2]; FILE *outfile, *fpSrc = NULL; short int *pcmaudio; unsigned char *mp2buffer; int num_samples = 0; int mp2fill_size = 0; int frames = 0; wave_info_t *wave_info = NULL; int nReadSize = 0; if (argc != 3) usage(); /* Allocate some space for the PCM audio data */ if ((pcmaudio = (short *) calloc(AUDIOBUFSIZE, sizeof(short))) == NULL) { fprintf(stderr, "pcmaudio alloc failed\n"); exit(99); } /* Allocate some space for the encoded MP2 audio data */ if ((mp2buffer = (unsigned char *) calloc(MP2BUFSIZE, sizeof(unsigned char))) == NULL) { fprintf(stderr, "mp2buffer alloc failed\n"); exit(99); } /* grab a set of default encode options */ encodeOptions = twolame_init(); printf("Using libtwolame version %s.\n", get_twolame_version()); /* Open the wave file */ if ((wave_info = wave_init(inputfilename)) == NULL) { fprintf(stderr, "Not a recognised WAV file.\n"); exit(99); } // Use sound file to over-ride preferences for // mono/stereo and sampling-frequency twolame_set_num_channels(encodeOptions, wave_info->channels); if (wave_info->channels == 1) { twolame_set_mode(encodeOptions, TWOLAME_MONO); } else { twolame_set_mode(encodeOptions, TWOLAME_STEREO); } /* Set the input and output sample rate to the same */ twolame_set_in_samplerate(encodeOptions, wave_info->samplerate); twolame_set_out_samplerate(encodeOptions, wave_info->samplerate); /* Set the bitrate to 192 kbps */ twolame_set_bitrate(encodeOptions, 64); /* initialise twolame with this set of options */ if (twolame_init_params(encodeOptions) != 0) { fprintf(stderr, "Error: configuring libtwolame encoder failed.\n"); exit(99); } /* Open the output file for the encoded MP2 data */ if ((outfile = fopen(outputfilename, "wb")) == 0) { fprintf(stderr, "error opening output file %s\n", outputfilename); exit(99); } // Read num_samples of audio data *per channel* from the input file //while ((num_samples = wave_get_samples(wave_info, pcmaudio, AUDIOBUFSIZE/2)) != 0) { fpSrc = fopen( "a2002011001-e02.wav", "rb" ); while(1) { num_samples = fread( pcmaudio, sizeof( char ), AUDIOBUFSIZE/2, fpSrc ); // Encode the audio!2024*4 if( num_samples != AUDIOBUFSIZE/2 ) break; num_samples /= 2; mp2fill_size = twolame_encode_buffer_interleaved(encodeOptions, pcmaudio, num_samples/2, mp2buffer, MP2BUFSIZE); // Write the MPEG bitstream to the file fwrite(mp2buffer, sizeof(unsigned char), mp2fill_size, outfile); // Display the number of MPEG audio frames we have encoded frames += (num_samples / TWOLAME_SAMPLES_PER_FRAME); printf("[%04i]\r", frames); fflush(stdout); } /* flush any remaining audio. (don't send any new audio data) There should only ever be a max of 1 frame on a flush. There may be zero frames if the audio data was an exact multiple of 1152 */ mp2fill_size = twolame_encode_flush(encodeOptions, mp2buffer, MP2BUFSIZE); fwrite(mp2buffer, sizeof(unsigned char), mp2fill_size, outfile); twolame_close(&encodeOptions); free(pcmaudio); printf("\nFinished nicely.\n"); return (0); }
int main() { wave_object obj; wt_object wt; double *inp, *out, *diff; int N, i, J; FILE *ifp; double temp[1200]; char *name = "db4"; obj = wave_init(name); wave_summary(obj); ifp = fopen("signal.txt", "r"); i = 0; if (!ifp) { printf("Cannot Open File"); exit(100); } while (!feof(ifp)) { fscanf(ifp, "%lf \n", &temp[i]); i++; } N = 177; fclose(ifp); inp = (double*)malloc(sizeof(double)* N); out = (double*)malloc(sizeof(double)* N); diff = (double*)malloc(sizeof(double)* N); //wmean = mean(temp, N); for (i = 0; i < N; ++i) { inp[i] = temp[i]; //printf("%g \n",inp[i]); } J = 2; wt = wt_init(obj, "modwt", N, J);// Initialize the wavelet transform object modwt(wt, inp);// Perform MODWT //MODWT output can be accessed using wt->output vector. Use wt_summary to find out how to extract appx and detail coefficients for (i = 0; i < wt->outlength; ++i) { printf("%g ",wt->output[i]); } imodwt(wt, out);// Perform ISWT (if needed) // Test Reconstruction for (i = 0; i < wt->siglength; ++i) { diff[i] = out[i] - inp[i]; } printf("\n MAX %g \n", absmax(diff, wt->siglength));// If Reconstruction succeeded then the output should be a small value. wt_summary(wt);// Prints the full summary. wave_free(obj); wt_free(wt); free(inp); free(out); free(diff); return 0; }
void DWPTReconstructionTest() { wave_object obj; wpt_object wt; double *inp,*out; int N, i,J; double epsilon = 1e-8; N = 79926; //N = 256; inp = (double*)malloc(sizeof(double)* N); out = (double*)malloc(sizeof(double)* N); //wmean = mean(temp, N); for (i = 0; i < N; ++i) { inp[i] = (rand() / (double)(RAND_MAX)); } std::vector<std::string > waveletNames; for (unsigned int j = 0; j < 36; j++) { waveletNames.push_back(std::string("db") + patch::to_string(j + 1)); } for (unsigned int j = 0; j < 17; j++) { waveletNames.push_back(std::string("coif") + patch::to_string(j + 1)); } for (unsigned int j = 1; j < 20; j++) { waveletNames.push_back(std::string("sym") + patch::to_string(j + 1)); } waveletNames.push_back("bior1.1"); waveletNames.push_back("bior1.3"); waveletNames.push_back("bior1.5"); waveletNames.push_back("bior2.2"); waveletNames.push_back("bior2.4"); waveletNames.push_back("bior2.6"); waveletNames.push_back("bior2.8"); waveletNames.push_back("bior3.1"); waveletNames.push_back("bior3.3"); waveletNames.push_back("bior3.5"); waveletNames.push_back("bior3.7"); waveletNames.push_back("bior3.9"); waveletNames.push_back("bior4.4"); waveletNames.push_back("bior5.5"); waveletNames.push_back("bior6.8"); waveletNames.push_back("rbior1.1"); waveletNames.push_back("rbior1.3"); waveletNames.push_back("rbior1.5"); waveletNames.push_back("rbior2.2"); waveletNames.push_back("rbior2.4"); waveletNames.push_back("rbior2.6"); waveletNames.push_back("rbior2.8"); waveletNames.push_back("rbior3.1"); waveletNames.push_back("rbior3.3"); waveletNames.push_back("rbior3.5"); waveletNames.push_back("rbior3.7"); waveletNames.push_back("rbior3.9"); waveletNames.push_back("rbior4.4"); waveletNames.push_back("rbior5.5"); waveletNames.push_back("rbior6.8"); for (unsigned int ent = 0; ent < 2; ent++) { for (unsigned int sym_per = 0; sym_per < 2; sym_per++) { for (unsigned int j = 0; j < waveletNames.size(); j++) { char * name = new char[waveletNames[j].size() + 1]; memcpy(name, waveletNames[j].c_str(), waveletNames[j].size() + 1); obj = wave_init(name);// Initialize the wavelet for (J = 1; J < 3; J++) { //J = 3; wt = wpt_init(obj, N, J);// Initialize the wavelet transform object if (sym_per == 0) setDWPTExtension(wt, (char*) "sym");// Options are "per" and "sym". Symmetric is the default option else setDWPTExtension(wt, (char*) "per"); if (ent == 0) setDWPTEntropy(wt, (char*) "shannon",0); else setDWPTEntropy(wt, (char*) "logenergy",0); dwpt(wt, inp);// Perform DWT idwpt(wt, out);// Perform IDWT (if needed) // Test Reconstruction //BOOST_CHECK_SMALL(RMS_Error(out, inp, wt->siglength), epsilon); // If Reconstruction succeeded then the output should be a small value. //printf("%s %g \n",name,RMS_Error(out, inp, wt->siglength)); if (RMS_Error(out, inp, wt->siglength) > epsilon) { printf("\n ERROR : DWPT Reconstruction Unit Test Failed. Exiting. \n"); exit(-1); } wpt_free(wt); } wave_free(obj); delete[] name; } } } free(out); free(inp); }
void tone_init() { wave_init(); }