/* MMDAgent_chdir: change current directory */ bool MMDAgent_chdir(const char *dir) { #ifdef _WIN32 return SetCurrentDirectoryA(dir) != 0 ? true : false; #else bool result; char *path; path = MMDAgent_pathdup(dir); result = chdir(path) == 0 ? true : false; free(path); return result; #endif /* _WIN32 */ }
static bool Audio_openAndStart(Audio *audio, const char *alias, char *file) { UInt32 size; OSStatus err1; OSErr err2; ComponentResult err3; char *buff; FSRef path; AudioStreamBasicDescription format; ComponentDescription findComp; Component comp; AURenderCallbackStruct input; buff = MMDAgent_pathdup(file); /* convert file name */ err1 = FSPathMakeRef ((const UInt8 *) buff, &path, NULL); free(buff); if(err1) { return false; } /* open audio file */ err1 = ExtAudioFileOpen(&path, &audio->file); if(err1) { return false; } /* get audio file format */ size = sizeof(AudioStreamBasicDescription); err1 = ExtAudioFileGetProperty(audio->file, kExtAudioFileProperty_FileDataFormat, &size, &format); if(err1) { ExtAudioFileDispose(audio->file); return false; } /* convert audio format to pcm (32bit stereo with the same sampling rate) */ format.mSampleRate = format.mSampleRate; format.mFormatID = kAudioFormatLinearPCM; format.mFormatFlags = kAudioFormatFlagsNativeFloatPacked; format.mBytesPerPacket = 4 * 2; format.mFramesPerPacket = 1; format.mBytesPerFrame = 4 * 2; format.mChannelsPerFrame = 2; format.mBitsPerChannel = 32; format.mReserved = format.mReserved; size = sizeof(AudioStreamBasicDescription); err1 = ExtAudioFileSetProperty(audio->file, kExtAudioFileProperty_ClientDataFormat, size, &format); if(err1) { ExtAudioFileDispose(audio->file); return false; } /* open audio device */ findComp.componentType = kAudioUnitType_Output; findComp.componentSubType = kAudioUnitSubType_DefaultOutput; findComp.componentManufacturer = kAudioUnitManufacturer_Apple; findComp.componentFlags = 0; findComp.componentFlagsMask = 0; comp = FindNextComponent(NULL, &findComp); if(comp == 0) { ExtAudioFileDispose(audio->file); return false; } err2 = OpenAComponent(comp, &audio->device); if(err2) { ExtAudioFileDispose(audio->file); return false; } /* set callback func. */ input.inputProc = renderCallback; input.inputProcRefCon = audio; size = sizeof(AURenderCallbackStruct); err3 = AudioUnitSetProperty(audio->device, kAudioUnitProperty_SetRenderCallback, kAudioUnitScope_Input, 0, &input, size); if(err3) { CloseComponent(audio->device); ExtAudioFileDispose(audio->file); return false; } /* prepare audio device */ err3 = AudioUnitInitialize(audio->device); if(err3) { CloseComponent(audio->device); ExtAudioFileDispose(audio->file); return false; } /* start */ err3 = AudioOutputUnitStart(audio->device); if(err3) { AudioUnitUninitialize(audio->device); CloseComponent(audio->device); ExtAudioFileDispose(audio->file); return false; } return true; }
/* Julius_Thread::run: main loop */ void Julius_Thread::run() { char *tmp; char buff[MMDAGENT_MAXBUFLEN]; FILE *fp; if(m_jconf != NULL || m_recog != NULL || m_mmdagent == NULL || m_thread < 0 || m_languageModel == 0 || m_dictionary == 0 || m_acousticModel == 0 || m_triphoneList == 0 || m_configFile == 0) return; /* set latency */ sprintf(buff, "PA_MIN_LATENCY_MSEC=%d", JULIUSTHREAD_LATENCY); putenv(buff); sprintf(buff, "LATENCY_MSEC=%d", JULIUSTHREAD_LATENCY); putenv(buff); /* turn off log */ jlog_set_output(NULL); /* load models */ tmp = MMDAgent_pathdup(m_languageModel); sprintf(buff, "-d \"%s\"", tmp); free(tmp); m_jconf = j_config_load_string_new(buff); if (m_jconf == NULL) { return; } tmp = MMDAgent_pathdup(m_dictionary); sprintf(buff, "-v \"%s\"", tmp); free(tmp); if(j_config_load_string(m_jconf, buff) < 0) { return; } tmp = MMDAgent_pathdup(m_acousticModel); sprintf(buff, "-h \"%s\"", tmp); free(tmp); if(j_config_load_string(m_jconf, buff) < 0) { return; } tmp = MMDAgent_pathdup(m_triphoneList); sprintf(buff, "-hlist \"%s\"", tmp); free(tmp); if(j_config_load_string(m_jconf, buff) < 0) { return; } /* load config file */ tmp = MMDAgent_pathdup(m_configFile); if(j_config_load_file(m_jconf, tmp) < 0) { free(tmp); return; } free(tmp); /* load user dictionary */ fp = MMDAgent_fopen(m_userDictionary, "r"); if(fp != NULL) { fclose(fp); tmp = MMDAgent_pathdup(m_userDictionary); j_add_dict(m_jconf->lm_root, tmp); free(tmp); } /* create instance */ m_recog = j_create_instance_from_jconf(m_jconf); if (m_recog == NULL) { return; } /* register callback functions */ callback_add(m_recog, CALLBACK_EVENT_RECOGNITION_BEGIN, callbackRecogBegin, this); callback_add(m_recog, CALLBACK_RESULT, callbackRecogResult, this); if (!j_adin_init(m_recog)) { return; } if (j_open_stream(m_recog, NULL) != 0) { return; } /* setup logger */ m_logger.setup(m_recog); /* start logger */ m_logger.setActiveFlag(true); /* start recognize */ j_recognize_stream(m_recog); }