/* close file */ static boolean close_files() { size = sizeof(SP16) * speechlen; if (writing_file) { if (use_raw) { if (close(fd) != 0) { perror("adinrec"); return FALSE; } } else { if (wrwav_close(fp) == FALSE) { fprintf(stderr, "adinrec: failed to close file\n"); return FALSE; } } printf("%s: %d samples (%.2f sec.) [%6d (%5.2fs) - %6d (%5.2fs)]\n", outpath, speechlen, (float)speechlen / (float)sfreq, trigger_sample, (float)trigger_sample / (float)sfreq, trigger_sample + speechlen, (float)(trigger_sample + speechlen) / (float)sfreq); writing_file = FALSE; } return TRUE; }
//認識結果の一部を waveで保存する. void JuliusPlus::WaveCutter(Recog *recog,int all_frame,int startfream,int endfream,const std::string& filename) const { if (startfream == 0 && endfream == 0) {//all endfream = this->WaveFileData.size(); } else { if (endfream < startfream) { return ; } } int allsize = this->WaveFileData.size(); int of_fream = allsize / all_frame; startfream *= of_fream; endfream *= of_fream; //recog->jconf->input.framesize; FILE *recfile_fp = wrwav_open( (char*) filename.c_str(), recog->jconf->input.sfreq); if(recfile_fp) { wrwav_data(recfile_fp,(SP16*) ((&this->WaveFileData[0]) + startfream), endfream - startfream); wrwav_close(recfile_fp); } }
/* close file */ static void close_file() { size = sizeof(SP16) * speechlen; if (use_raw) { if (fd >= 0) { if (close(fd) != 0) { perror("adinrec"); } } } else { if (fp != NULL) { if (wrwav_close(fp) == FALSE) { j_printerr("adinrec: failed to close file\n"); } } } fprintf(stderr, "\n%d samples (%d bytes, %.2f sec.) recorded\n", speechlen, size, (float)speechlen / (float)sfreq); }