Example #1
0
        public AITalkResultCode VoiceLoad(string voiceName)
        {
            AITalkResultCode code = AITalkAPI.VoiceLoad(voiceName);

            this.OnWriteLog("[AITalkAPI_VoiceLoad] " + code);
            return(code);
        }
Example #2
0
        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);
        }
Example #3
0
        public AITalkResultCode VoiceClear()
        {
            AITalkResultCode code = AITalkAPI.VoiceClear();

            this.OnWriteLog("[AITalkAPI_VoiceClear] " + code);
            return(code);
        }
Example #4
0
        public AITalkResultCode BLoadWordDic()
        {
            AITalkResultCode code = AITalkAPI.BLoadWordDic();

            this.OnWriteLog("[AITalkAPI_BLoadWordDic] " + code);
            return(code);
        }
Example #5
0
        protected virtual int MyAITalkProcRawBuf(AITalkEventReasonCode reasonCode, int jobID, ulong tick, IntPtr userData)
        {
            short[] wave = null;
            uint    size = 0;

            if ((reasonCode == AITalkEventReasonCode.AITALKEVENT_RAWBUF_FLUSH) || (reasonCode == AITalkEventReasonCode.AITALKEVENT_RAWBUF_FULL))
            {
                AITalkResultCode code = AITalkAPI.GetData(jobID, this._waveBuf, (uint)this._waveBuf.Length, out size);
                this.OnWriteLog(string.Concat(new object[] { "[AITalkAPI_GetData] ", code, " : ", size }));
                if ((code == AITalkResultCode.AITALKERR_SUCCESS) && (size > 0))
                {
                    wave = this._waveBuf;
                    if (reasonCode == AITalkEventReasonCode.AITALKEVENT_RAWBUF_FLUSH)
                    {
                        this.PushEvent(tick, (IntPtr)2L);
                    }
                    this.PushData(wave, (int)size, 0);
                }
            }
            else if (reasonCode == AITalkEventReasonCode.AITALKEVENT_RAWBUF_CLOSE)
            {
                this.PushEvent(tick, (IntPtr)3L);
                this.PushData(new short[0], 0, 1);
            }
            this.OnWriteLog(string.Concat(new object[] { "Callback [AITalkProcRawBuf] ", jobID, " : ", reasonCode.ToString(), " : ", tick, " : ", (int)userData, " : ", (wave != null) ? ((size * 2)).ToString() : "NODATA" }));
            return(0);
        }
Example #6
0
        public AITalkResultCode ReloadWordDic(string pathDic)
        {
            AITalkResultCode code = AITalkAPI.ReloadWordDic(pathDic);

            this.OnWriteLog("[AITalkAPI_ReloadWordDic] " + code);
            return(code);
        }
Example #7
0
        public AITalkResultCode LangLoad(string dirLang)
        {
            AITalkResultCode code = AITalkAPI.LangLoad(dirLang);

            this.OnWriteLog("[AITalkAPI_LangLoad] " + code);
            return(code);
        }
Example #8
0
        public AITalkResultCode LangClear()
        {
            AITalkResultCode code = AITalkAPI.LangClear();

            this.OnWriteLog("[AITalkAPI_LangClear] " + code);
            return(code);
        }
Example #9
0
        public AITalkResultCode End()
        {
            AITalkResultCode code = AITalkAPI.End();

            this.OnWriteLog("[AITalkAPI_End] " + code);
            this._busy    = false;
            this._playing = false;
            return(code);
        }
Example #10
0
        public virtual AITalkResultCode SynthAsync(ref AITalk_TJobParam jobparam, string text)
        {
            int jobID;

            if (this._busy || this._playing)
            {
                return(AITalkResultCode.AITALKERR_TOO_MANY_JOBS);
            }
            this._busy    = true;
            this._playing = true;
            AITalk_TTtsParam param = new AITalk_TTtsParam();
            AITalkResultCode res   = this.GetParam(ref param);

            this.OnWriteLog("[AITalkAPI_GetParam] " + res);
            if (res != AITalkResultCode.AITALKERR_SUCCESS)
            {
                this._busy    = false;
                this._playing = false;
                return(res);
            }
            param.procTextBuf  = this._AITalkProcTextBuf;
            param.procRawBuf   = this._AITalkProcRawBuf;
            param.procEventTts = this._AITalkProcEventTTS;
            res = this.SetParam(ref param);
            this.OnWriteLog("[AITalkAPI_SetParam] " + res);
            if (res != AITalkResultCode.AITALKERR_SUCCESS)
            {
                this._busy    = false;
                this._playing = false;
                return(res);
            }
            this.OnWriteLog("[AIAuidoAPI_ClearData] " + AIAudioAPI.ClearData());
            res = AITalkAPI.TextToSpeech(out jobID, ref jobparam, text);
            this.OnWriteLog("[AITalkAPI_TextToSpeech] " + res);
            if (res != AITalkResultCode.AITALKERR_SUCCESS)
            {
                this._busy    = false;
                this._playing = false;
                return(res);
            }
            new Thread(delegate {
                AITalkStatusCode code;
                do
                {
                    Thread.Sleep(this.GetStatusInterval);
                    res = this.GetStatus(jobID, out code);
                }while ((this._playing && (res == AITalkResultCode.AITALKERR_SUCCESS)) && (code != AITalkStatusCode.AITALKSTAT_DONE));
                AITalkAPI.CloseSpeech(jobID, 0);
                this.OnWriteLog("[AITalkAPI_CloseSpeech] " + res);
                this._busy = false;
            })
            {
                IsBackground = true
            }.Start();
            return(res);
        }
Example #11
0
        protected void DoJob()
        {
            AITalkResultCode errorCode = AITalkResultCode.AITALKERR_SUCCESS;
            AITalkStatusCode status    = AITalkStatusCode.AITALKSTAT_DONE;

Label_0005:
            Thread.Sleep(base.GetStatusInterval);
            errorCode = base.GetStatus(this._jobInfo.JobID, out status);
            if ((errorCode != AITalkResultCode.AITALKERR_SUCCESS) || (status == AITalkStatusCode.AITALKSTAT_WRONG_STATE))
            {
                this.InvokeUserEventHandler <ErrorEventArgs>(new EventInVoker <ErrorEventArgs>(this.OnErrorOccured), new ErrorEventArgs("GetStatus", errorCode, ""));
            }
            else if (!this._jobInfo.Aborted)
            {
                if (this._jobInfo.TextProcessingDone && (this._jobInfo.TextBlockList.Count == 0))
                {
                    if (base._playing)
                    {
                        AudioEventArgs e = new AudioEventArgs(0, "", "", 0L);
                        this.InvokeUserEventHandler <AudioEventArgs>(new EventInVoker <AudioEventArgs>(this.OnPlayComplete), e);
                        base._playing = false;
                    }
                }
                else if ((((this.SynthMode & AITalk.SynthMode.Play) != AITalk.SynthMode.Play) || base._playing) && (((this.SynthMode & AITalk.SynthMode.Play) == AITalk.SynthMode.Play) || (status != AITalkStatusCode.AITALKSTAT_DONE)))
                {
                    goto Label_0005;
                }
            }
            if ((this.SynthMode & AITalk.SynthMode.Synthesize) != AITalk.SynthMode.Synthesize)
            {
                AITalkResultCode code3 = AITalkAPI.CloseKana(this._jobInfo.JobID, 0);
                base.OnWriteLog("[AITalkAPI_CloseKana] " + code3);
                if (code3 != AITalkResultCode.AITALKERR_SUCCESS)
                {
                    this.InvokeUserEventHandler <ErrorEventArgs>(new EventInVoker <ErrorEventArgs>(this.OnErrorOccured), new ErrorEventArgs("CloseKana", code3, ""));
                }
            }
            else
            {
                AITalkResultCode code4 = AITalkAPI.CloseSpeech(this._jobInfo.JobID, 0);
                base.OnWriteLog("[AITalkAPI_CloseSpeech] " + code4);
                if (code4 != AITalkResultCode.AITALKERR_SUCCESS)
                {
                    this.InvokeUserEventHandler <ErrorEventArgs>(new EventInVoker <ErrorEventArgs>(this.OnErrorOccured), new ErrorEventArgs("CloseSpeech", code4, ""));
                }
            }
            if (base._playing)
            {
                base.StopAudio();
                base._playing = false;
            }
            this._jobInfo = null;
            base._busy    = false;
            this.InvokeUserEventHandler <EventArgs>(new EventInVoker <EventArgs>(this.OnJobComplete), new EventArgs());
        }
Example #12
0
        public AITalkResultCode VersionInfo(int verbose, out string str)
        {
            uint             num2;
            int              capacity = 0x400;
            StringBuilder    sjis     = new StringBuilder(capacity);
            AITalkResultCode code     = AITalkAPI.VersionInfo(verbose, sjis, (uint)capacity, out num2);

            this.OnWriteLog("[AITalkAPI_VersionInfo] " + code);
            str = sjis.ToString();
            return(code);
        }
Example #13
0
        public AITalkResultCode Init(AITalk_TConfig config)
        {
            AITalkResultCode code = AITalkAPI.Init(ref config);

            this.OnWriteLog("[AITalkAPI_Init] " + code);
            if (code == AITalkResultCode.AITALKERR_SUCCESS)
            {
                this._disposed = false;
            }
            this._voiceSamplesPerSec = config.hzVoiceDB;
            this._kanaBuf            = new StringBuilder(0x4000);
            this._waveBuf            = new short[config.hzVoiceDB * 4];
            return(code);
        }
Example #14
0
        public AITalkResultCode SetParam(ref AITalk_TTtsParam param)
        {
            IntPtr           pParam = AITalkMarshal.TTtsParamToIntPtr(ref param);
            AITalkResultCode code   = AITalkAPI.SetParam(pParam);

            this.OnWriteLog("[AITalkAPI_SetParam] " + code);
            Marshal.FreeCoTaskMem(pParam);
            if (code == AITalkResultCode.AITALKERR_SUCCESS)
            {
                this._kanaBuf = new StringBuilder((int)param.lenTextBufBytes);
                this._waveBuf = new short[param.lenRawBufBytes / 2];
            }
            return(code);
        }
Example #15
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);
        }
Example #16
0
        public AITalkResultCode GetParam(ref AITalk_TTtsParam param)
        {
            uint             num;
            AITalkResultCode code = AITalkAPI.GetParam(IntPtr.Zero, out num);

            this.OnWriteLog("[AITalkAPI_GetParam] " + code);
            if (code == AITalkResultCode.AITALKERR_INSUFFICIENT)
            {
                IntPtr ptr = Marshal.AllocCoTaskMem((int)num);
                Marshal.WriteInt32(ptr, (int)num);
                code = AITalkAPI.GetParam(ptr, out num);
                this.OnWriteLog("[AITalkAPI_GetParam] " + code);
                if (code != AITalkResultCode.AITALKERR_SUCCESS)
                {
                    Marshal.FreeCoTaskMem(ptr);
                    return(code);
                }
                param = AITalkMarshal.IntPtrToTTtsParam(ptr);
                Marshal.FreeCoTaskMem(ptr);
            }
            return(code);
        }
Example #17
0
        protected override int MyAITalkProcRawBuf(AITalkEventReasonCode reasonCode, int jobID, ulong tick, IntPtr userData)
        {
            uint size = 0;

            short[] wave = null;
            if ((reasonCode == AITalkEventReasonCode.AITALKEVENT_RAWBUF_FLUSH) || (reasonCode == AITalkEventReasonCode.AITALKEVENT_RAWBUF_FULL))
            {
                AITalkResultCode errorCode = AITalkAPI.GetData(jobID, this._jobInfo.WaveBuffer, (uint)this._jobInfo.WaveBuffer.Length, out size);
                base.OnWriteLog(string.Concat(new object[] { "[AITalkAPI_GetData] ", errorCode, " : ", size }));
                if (errorCode != AITalkResultCode.AITALKERR_SUCCESS)
                {
                    this.InvokeUserEventHandler <ErrorEventArgs>(new EventInVoker <ErrorEventArgs>(this.OnErrorOccured), new ErrorEventArgs("GetData", errorCode, ""));
                }
                if ((errorCode == AITalkResultCode.AITALKERR_SUCCESS) && (size > 0))
                {
                    wave = this._jobInfo.WaveBuffer;
                    if (this._jobInfo.NextSentenceStartTick >= 0L)
                    {
                        JobInfo.TextBlock block = this._jobInfo.TextBlockList[this._jobInfo.CurrentIndex];
                        block.Tick = this._jobInfo.NextSentenceStartTick;
                        if ((this.SynthMode & AITalk.SynthMode.Play) == AITalk.SynthMode.Play)
                        {
                            AIAudioResultCode code2 = base.PushEvent((ulong)block.Tick, new AudioEventParam(AudioEventCode.Sentence, block.Pos, block.Text, block.Kana, (ulong)block.Tick).ToIntPtr());
                            if ((code2 != AIAudioResultCode.AIAUDIOERR_SUCCESS) && (code2 != AIAudioResultCode.AIAUDIOERR_NO_PLAYING))
                            {
                                this.InvokeUserEventHandler <ErrorEventArgs>(new EventInVoker <ErrorEventArgs>(this.OnErrorOccured), new ErrorEventArgs("PushEvent_Progress", code2, ""));
                            }
                        }
                        this._jobInfo.NextSentenceStartTick = -1L;
                    }
                    this.PushQueuedEvents();
                    if ((this.SynthMode & AITalk.SynthMode.Play) == AITalk.SynthMode.Play)
                    {
                        AIAudioResultCode code3 = base.PushData(wave, (int)size, 0);
                        if ((code3 != AIAudioResultCode.AIAUDIOERR_SUCCESS) && (code3 != AIAudioResultCode.AIAUDIOERR_NO_PLAYING))
                        {
                            this.InvokeUserEventHandler <ErrorEventArgs>(new EventInVoker <ErrorEventArgs>(this.OnErrorOccured), new ErrorEventArgs("PushData_Progress", code3, ""));
                        }
                    }
                }
                if ((reasonCode == AITalkEventReasonCode.AITALKEVENT_RAWBUF_FLUSH) && ((this.SynthMode & AITalk.SynthMode.TextProcess) == AITalk.SynthMode.TextProcess))
                {
                    this._jobInfo.GrowSynthesizingProgress(this._jobInfo.TextBlockList[this._jobInfo.CurrentIndex]);
                    this._jobInfo.NextSentenceStartTick = (long)tick;
                    this._jobInfo.CurrentIndex++;
                }
                int progress            = ((this.SynthMode & AITalk.SynthMode.TextProcess) == AITalk.SynthMode.TextProcess) ? this._jobInfo.GetSynthesizeingProgressPercentage() : 0;
                SynthesizingEventArgs e = new SynthesizingEventArgs(tick, wave, (int)size, reasonCode == AITalkEventReasonCode.AITALKEVENT_RAWBUF_FLUSH, progress);
                this.InvokeUserEventHandler <SynthesizingEventArgs>(new EventInVoker <SynthesizingEventArgs>(this.OnSynthesizingProgress), e);
            }
            else
            {
                if ((this.SynthMode & AITalk.SynthMode.Play) == AITalk.SynthMode.Play)
                {
                    AIAudioResultCode code4 = base.PushEvent(tick, new AudioEventParam(AudioEventCode.Complete, 0, "", "", tick).ToIntPtr());
                    if (code4 == AIAudioResultCode.AIAUDIOERR_SUCCESS)
                    {
                        code4 = base.PushData(new short[1], 1, 1);
                        if ((code4 != AIAudioResultCode.AIAUDIOERR_SUCCESS) && (code4 != AIAudioResultCode.AIAUDIOERR_NO_PLAYING))
                        {
                            this.InvokeUserEventHandler <ErrorEventArgs>(new EventInVoker <ErrorEventArgs>(this.OnErrorOccured), new ErrorEventArgs("PushData_Complete", code4, ""));
                        }
                    }
                    else if (code4 != AIAudioResultCode.AIAUDIOERR_NO_PLAYING)
                    {
                        this.InvokeUserEventHandler <ErrorEventArgs>(new EventInVoker <ErrorEventArgs>(this.OnErrorOccured), new ErrorEventArgs("PushEvent_Complete", code4, ""));
                    }
                }
                SynthesizingEventArgs args2 = new SynthesizingEventArgs(tick, null, 0, false, 100);
                this.InvokeUserEventHandler <SynthesizingEventArgs>(new EventInVoker <SynthesizingEventArgs>(this.OnSynthesizingComplete), args2);
                this._jobInfo.SynthesizingDone = true;
            }
            base.OnWriteLog(string.Concat(new object[] { "Callback [AITalkProcRawBuf] ", jobID, " : ", reasonCode.ToString(), " : ", tick, " : ", (int)userData, " : ", (wave != null) ? ((size * 2)).ToString() : "NODATA" }));
            return(0);
        }
Example #18
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);
        }
Example #19
0
        public AITalkResultCode Do(AITalk.SynthMode synthMode, string text, AITalk.SynthOption synthOption)
        {
            AITalk_TJobParam param2;

            if (base._busy || base._playing)
            {
                return(AITalkResultCode.AITALKERR_TOO_MANY_JOBS);
            }
            this.SynthMode   = synthMode;
            this.SynthOption = synthOption;
            base._busy       = true;
            int jobID              = -1;
            AITalkResultCode code  = AITalkResultCode.AITALKERR_SUCCESS;
            AITalk_TTtsParam param = new AITalk_TTtsParam();

            code = base.GetParam(ref param);
            base.OnWriteLog("[AITalkAPI_GetParam] " + code);
            if (code != AITalkResultCode.AITALKERR_SUCCESS)
            {
                base._busy = false;
                return(code);
            }
            param.pauseBegin   = ((synthOption & AITalk.SynthOption.UseBeginPause) == AITalk.SynthOption.UseBeginPause) ? this._beginPause : 0;
            param.pauseTerm    = ((synthOption & AITalk.SynthOption.UseTermPause) == AITalk.SynthOption.UseTermPause) ? this._termPause : 0;
            param.procTextBuf  = base._AITalkProcTextBuf;
            param.procRawBuf   = base._AITalkProcRawBuf;
            param.procEventTts = base._AITalkProcEventTTS;
            code = base.SetParam(ref param);
            base.OnWriteLog("[AITalkAPI_SetParam] " + code);
            if (code != AITalkResultCode.AITALKERR_SUCCESS)
            {
                base._busy = false;
                return(code);
            }
            if ((this.SynthMode & AITalk.SynthMode.TextProcess) == AITalk.SynthMode.TextProcess)
            {
                this._jobInfo = new JobInfo(this.SynthMode, text, this.SynthOption, param.lenTextBufBytes, param.lenRawBufBytes);
            }
            else
            {
                this._jobInfo = new JobInfo(this.SynthMode, text, this.SynthOption, param.lenTextBufBytes, param.lenRawBufBytes);
                this._jobInfo.TextBlockList.Add(new JobInfo.TextBlock(0, text, text, "", 1f, 1f, 1f, 1f));
            }
            param2.userData = IntPtr.Zero;
            if (this.SynthMode == AITalk.SynthMode.TextProcess)
            {
                param2.modeInOut = AITalkJobInOut.AITALKIOMODE_PLAIN_TO_AIKANA;
            }
            else if ((this.SynthMode == AITalk.SynthMode.Synthesize) || (this.SynthMode == AITalk.SynthMode.KanaToSpeech))
            {
                param2.modeInOut = AITalkJobInOut.AITALKIOMODE_AIKANA_TO_WAVE;
            }
            else if ((this.SynthMode == AITalk.SynthMode.TextToWave) || (this.SynthMode == AITalk.SynthMode.TextToSpeech))
            {
                param2.modeInOut = AITalkJobInOut.AITALKIOMODE_PLAIN_TO_WAVE;
            }
            else
            {
                base._busy = false;
                return(code);
            }
            if ((this.SynthMode & AITalk.SynthMode.Play) == AITalk.SynthMode.Play)
            {
                AIAudioResultCode errorCode = AIAudioAPI.ClearData();
                base.OnWriteLog("[AIAuidoAPI_ClearData] " + errorCode);
                if ((errorCode != AIAudioResultCode.AIAUDIOERR_SUCCESS) && (errorCode != AIAudioResultCode.AIAUDIOERR_NO_PLAYING))
                {
                    this.InvokeUserEventHandler <ErrorEventArgs>(new EventInVoker <ErrorEventArgs>(this.OnErrorOccured), new ErrorEventArgs("ClearData", errorCode, ""));
                    base._busy = false;
                    return(code);
                }
                base._playing = true;
            }
            if ((this.SynthMode & AITalk.SynthMode.Synthesize) != AITalk.SynthMode.Synthesize)
            {
                code = AITalkAPI.TextToKana(out jobID, ref param2, this._jobInfo.SynthText);
                base.OnWriteLog(string.Concat(new object[] { "[AITalkAPI_TextToKana] ", code, " : ", jobID }));
            }
            else
            {
                code = AITalkAPI.TextToSpeech(out jobID, ref param2, this._jobInfo.SynthText);
                base.OnWriteLog(string.Concat(new object[] { "[AITalkAPI_TextToSpeech] ", code, " : ", jobID }));
            }
            if (code != AITalkResultCode.AITALKERR_SUCCESS)
            {
                base._playing = false;
                base._busy    = false;
                return(code);
            }
            this._jobInfo.JobID = jobID;
            new Thread(new ThreadStart(this.DoJob))
            {
                IsBackground = true
            }.Start();
            return(code);
        }
Example #20
0
 public AITalkResultCode GetStatus(int jobID, out AITalkStatusCode status)
 {
     return(AITalkAPI.GetStatus(jobID, out status));
 }