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);
        }
Beispiel #2
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);
        }
Beispiel #3
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);
        }