protected override int MyAITalkProcTextBuf(AITalkEventReasonCode reasonCode, int jobID, IntPtr userData) { uint size = 0; uint pos = 0; string kana = ""; if ((reasonCode == AITalkEventReasonCode.AITALKEVENT_TEXTBUF_FLUSH) || (reasonCode == AITalkEventReasonCode.AITALKEVENT_TEXTBUF_FULL)) { AITalkResultCode errorCode = AITalkAPI.GetKana(jobID, this._jobInfo.KanaBuffer, (uint)this._jobInfo.KanaBuffer.Capacity, out size, out pos); base.OnWriteLog(string.Concat(new object[] { "[AITalkAPI_GetKana] ", errorCode, " : ", size })); if (errorCode != AITalkResultCode.AITALKERR_SUCCESS) { this.InvokeUserEventHandler <ErrorEventArgs>(new EventInVoker <ErrorEventArgs>(this.OnErrorOccured), new ErrorEventArgs("GetKana", errorCode, "")); } kana = this._jobInfo.KanaBuffer.ToString(); JobInfo.TextBlock textBlock = this._jobInfo.AddTextBlock((int)pos, kana); this._jobInfo.GrowTextProcessingProgress(textBlock); int textProcessingProgressPercentage = this._jobInfo.GetTextProcessingProgressPercentage(); TextProcessingEventArgs e = new TextProcessingEventArgs(textBlock.Pos, textBlock.Text, kana, textProcessingProgressPercentage); this.InvokeUserEventHandler <TextProcessingEventArgs>(new EventInVoker <TextProcessingEventArgs>(this.OnTextProcessingProgress), e); } else if (reasonCode == AITalkEventReasonCode.AITALKEVENT_TEXTBUF_CLOSE) { TextProcessingEventArgs args2 = new TextProcessingEventArgs(0, "", "", 100); this.InvokeUserEventHandler <TextProcessingEventArgs>(new EventInVoker <TextProcessingEventArgs>(this.OnTextProcessingComplete), args2); this._jobInfo.TextProcessingDone = true; base.OnWriteLog("[JobInfo] " + this._jobInfo.ToString()); } base.OnWriteLog(string.Concat(new object[] { "Callback [AITalkProcTextBuf] ", jobID, " : ", reasonCode.ToString(), " : ", (int)userData, " : ", kana })); return(0); }
protected virtual int MyAITalkProcTextBuf(AITalkEventReasonCode reasonCode, int jobID, IntPtr userData) { uint size = 0; uint pos = 0; string str = ""; if ((reasonCode == AITalkEventReasonCode.AITALKEVENT_TEXTBUF_FLUSH) || (reasonCode == AITalkEventReasonCode.AITALKEVENT_TEXTBUF_FULL)) { AITalkResultCode code = AITalkAPI.GetKana(jobID, this._kanaBuf, (uint)this._kanaBuf.Capacity, out size, out pos); this.OnWriteLog(string.Concat(new object[] { "[AITalkAPI_GetKana] ", code, " : ", size })); str = this._kanaBuf.ToString(); } this.OnWriteLog(string.Concat(new object[] { "Callback [AITalkProcTextBuf] ", jobID, " : ", reasonCode.ToString(), " : ", (int)userData, " : ", str })); return(0); }
public AITalkResultCode SynthSync(ref AITalk_TJobParam jobparam, string text, out string kana, out short[] wave) { int num; AITalkStatusCode code3; kana = null; wave = null; if (this._busy) { return(AITalkResultCode.AITALKERR_TOO_MANY_JOBS); } this._busy = true; AITalk_TTtsParam param = new AITalk_TTtsParam(); AITalkResultCode status = this.GetParam(ref param); this.OnWriteLog("[AITalkAPI_GetParam] " + status); if (status != AITalkResultCode.AITALKERR_SUCCESS) { this._busy = false; return(status); } param.procTextBuf = null; param.procRawBuf = null; param.procEventTts = null; status = this.SetParam(ref param); this.OnWriteLog("[AITalkAPI_SetParam] " + status); if (status != AITalkResultCode.AITALKERR_SUCCESS) { this._busy = false; return(status); } if ((jobparam.modeInOut == AITalkJobInOut.AITALKIOMODE_PLAIN_TO_AIKANA) || (jobparam.modeInOut == AITalkJobInOut.AITALKIOMODE_AIKANA_TO_JEITA)) { status = AITalkAPI.TextToKana(out num, ref jobparam, text); this.OnWriteLog(string.Concat(new object[] { "[AITalkAPI_TextToKana] ", status, " : ", num })); } else { status = AITalkAPI.TextToSpeech(out num, ref jobparam, text); this.OnWriteLog(string.Concat(new object[] { "[AITalkAPI_TextToSpeech] ", status, " : ", num })); } if (status != AITalkResultCode.AITALKERR_SUCCESS) { this._busy = false; return(status); } StringBuilder textBuf = new StringBuilder((int)param.lenTextBufBytes); short[] rawBuf = new short[param.lenRawBufBytes / 2]; List <short[]> list = new List <short[]>(); AITalkResultCode code2 = AITalkResultCode.AITALKERR_SUCCESS; Label_0166: Thread.Sleep(this.GetStatusInterval); status = AITalkAPI.GetStatus(num, out code3); if (status != AITalkResultCode.AITALKERR_SUCCESS) { code2 = status; } else { switch (code3) { case AITalkStatusCode.AITALKSTAT_WRONG_STATE: code2 = status; goto Label_02F4; case AITalkStatusCode.AITALKSTAT_INPROGRESS: goto Label_0166; } uint size = 0; uint num3 = 0; if (((jobparam.modeInOut == AITalkJobInOut.AITALKIOMODE_PLAIN_TO_WAVE) || (jobparam.modeInOut == AITalkJobInOut.AITALKIOMODE_PLAIN_TO_AIKANA)) || (jobparam.modeInOut == AITalkJobInOut.AITALKIOMODE_AIKANA_TO_JEITA)) { uint num4; status = AITalkAPI.GetKana(num, textBuf, (uint)textBuf.Capacity, out size, out num4); this.OnWriteLog(string.Concat(new object[] { "[AITalkAPI_GetKana] ", status, " : ", size })); if ((status != AITalkResultCode.AITALKERR_NOMORE_DATA) && (status != AITalkResultCode.AITALKERR_SUCCESS)) { code2 = status; goto Label_02F4; } if (size > 0) { if (kana == null) { kana = textBuf.ToString(); } else { kana = kana + textBuf.ToString(); } } } if (((jobparam.modeInOut == AITalkJobInOut.AITALKIOMODE_PLAIN_TO_WAVE) || (jobparam.modeInOut == AITalkJobInOut.AITALKIOMODE_AIKANA_TO_WAVE)) || (jobparam.modeInOut == AITalkJobInOut.AITALKIOMODE_JEITA_TO_WAVE)) { status = AITalkAPI.GetData(num, rawBuf, (uint)rawBuf.Length, out num3); this.OnWriteLog(string.Concat(new object[] { "[AITalkAPI_GetData] ", status, " : ", num3 })); if (status == AITalkResultCode.AITALKERR_NOMORE_DATA) { goto Label_02F4; } if (status != AITalkResultCode.AITALKERR_SUCCESS) { code2 = status; goto Label_02F4; } short[] dst = new short[num3]; Buffer.BlockCopy(rawBuf, 0, dst, 0, (int)(num3 * 2)); list.Add(dst); } if (((code3 != AITalkStatusCode.AITALKSTAT_DONE) || (size != 0)) || (num3 != 0)) { goto Label_0166; } } Label_02F4: if ((jobparam.modeInOut == AITalkJobInOut.AITALKIOMODE_PLAIN_TO_AIKANA) || (jobparam.modeInOut == AITalkJobInOut.AITALKIOMODE_AIKANA_TO_JEITA)) { status = AITalkAPI.CloseKana(num, 0); this.OnWriteLog("[AITalkAPI_CloseKana] " + status); } else { status = AITalkAPI.CloseSpeech(num, 0); this.OnWriteLog("[AITalkAPI_CloseSpeech] " + status); } if (list.Count > 0) { int num5 = 0; foreach (short[] numArray3 in list) { num5 += numArray3.Length; } wave = new short[num5]; int dstOffset = 0; foreach (short[] numArray4 in list) { Buffer.BlockCopy(numArray4, 0, wave, dstOffset, numArray4.Length * 2); dstOffset += numArray4.Length * 2; } } this._busy = false; if (code2 == AITalkResultCode.AITALKERR_SUCCESS) { return(status); } return(code2); }