Esempio n. 1
0
    //-------------私有方法------------------------

    /*
     * 生成比较结果的进程
     */
    private void processMarching()
    {
        List <TaskTransform> listTasks      = TaskManager.Instance.GetTasks();
        List <AudioPart>     listAudioParts = AudioEditManagercs.Instance.GetAudioPartsList();

        /*
         * 生成第一次比较结果
         */
        TaskTransform t  = null;
        AudioPart     a  = null;
        TaskResult    tr = null;
        float         matchRateThanTask      = 0;
        float         matchRateThanAudioPart = 0;

        float LOWER_MAIN_BODY_MARCH_RATE = 0.5f;
        int   startMarchIndex            = 0;
        int   stopMarchIndex             = 0;

        for (int i = 0; i < listTasks.Count; ++i)
        {
            t = listTasks[i];
            t.ListTaskResult.Clear();
            for (int z = 0; z < listAudioParts.Count; ++z)
            {
                a = listAudioParts[z];
                matchRateThanTask = ArrayUtil <string> .CaculateRegularSimilar(t.arrStrPingYing, a.textPingYinArr);      //StringUtil.CaculateStringSimilar(t.StrTaskWord, a.strText);// 解决复杂度

                matchRateThanAudioPart = ArrayUtil <string> .CaculateRegularSimilar(a.textPingYinArr, t.arrStrPingYing); //StringUtil.CaculateStringSimilar(a.strText, t.StrTaskWord);

                if (matchRateThanTask >= LOWER_MAIN_BODY_MARCH_RATE)
                {
                    tr           = new TaskResult();
                    tr.MarchRate = (matchRateThanTask + matchRateThanAudioPart) / 2.0f;
                    tr.ListAudioParts.Add(a);
                    t.ListTaskResult.Add(tr);

                    if (matchRateThanAudioPart > matchRateThanTask)
                    {
                        tr           = new TaskResult();
                        tr.MarchRate = (matchRateThanTask + matchRateThanAudioPart) / 2.0f - 0.1f;
                        int index = AudioEditManagercs.Instance.GetIndexByAudioPart(a);
                        if (index != -1)
                        {
                            for (int x = 0; x < 3; x++)
                            {
                                AudioPart apNow = AudioEditManagercs.Instance.GetAudioPartByIndex(index - 1 + x);
                                tr.ListAudioParts.Add(apNow);
                            }
                            t.ListTaskResult.Add(tr);
                        }
                    }
                }
            }
        }


        TaskManager.Instance.SaveTasksConfig();
    }
 public int GetIndexByAudioPart(AudioPart ap)
 {
     for (int i = 0; i < listAudioParts_.Count; ++i)
     {
         if (ap == listAudioParts_[i])
         {
             return(i);
         }
     }
     return(-1);
 }
    void cutAudioByDotOneTime(Byte[] audio, long startDotOneTime, long EndDotOneTime, List <AudioPart> audioListPart)
    {
        long startIndex = startDotOneTime * SAMPLE_RATE / 10 * 2;
        long endIndex   = EndDotOneTime * SAMPLE_RATE / 10 * 2;

        byte[] newAudio = new byte[endIndex - startIndex];
        long   index    = 0;

        for (long i = startIndex; i <= endIndex; ++i)
        {
            if (index < newAudio.Length)
            {
                newAudio[index] = audio[i];
            }
            index++;
        }

        /*
         * 写入为音频文件到本地
         */

        string savePath = strOutPutPath_ + "\\" + FLODER_NAME_FIRST_CUT + "\\" + AudioIndex + ".pc";

        Debug.Log("savePath" + savePath);
        FileStream fs = new FileStream(savePath, FileMode.Create);

        fs.Write(newAudio, 0, newAudio.Length);
        fs.Close();
        AudioIndex++;

        AudioPart p = new AudioPart();

        p.audioPath  = savePath;
        p.startIndex = startIndex;
        p.endIndex   = endIndex;
        audioListPart.Add(p);
    }
    private void transformAudioPartToWord(AudioPart audioPart)
    {
        var data = File.ReadAllBytes(audioPart.audioPath);

        BaiduManager.Instance.BytesToWord(data, audioPart.transformCb);
    }