Ejemplo n.º 1
0
        /// <summary>
        /// Zeros power in the silence frames.
        /// </summary>
        /// <param name="alignmentFile">
        /// The alignment file.
        /// </param>
        /// <param name="secondsPerFrame">
        /// The seconds per frame.
        /// </param>
        /// <exception cref="ArgumentException">ArgumentException.
        /// </exception>
        /// <exception cref="InvalidDataException">InvalidDataException.
        /// </exception>
        public void ZeroSilence(string alignmentFile, float secondsPerFrame)
        {
            if (!File.Exists(alignmentFile))
            {
                throw new FileNotFoundException(Helper.NeutralFormat("Alignment file \"{0}\" not found", alignmentFile));
            }

            // Loads alginment file.
            SegmentFile segmentFile = new SegmentFile();
            segmentFile.Load(alignmentFile);

            // Gets the last segmentation.
            WaveSegment last = segmentFile.WaveSegments[segmentFile.WaveSegments.Count - 1];

            // Gets the silence frame and end frame.
            if ((int)(last.StartTime / secondsPerFrame) > _data.Count)
            {
                throw new InvalidDataException(
                    Helper.NeutralFormat(
                        "The start frame {0} of last phone [{1}] is larger than power length {2} in file \"{3}\", remove this sentence from training set.",
                        (int)(last.StartTime / secondsPerFrame), last.Label, _data.Count, _fileName));
            }

            List<int> silenceFrames = new List<int>();
            for (int i = 0; i < segmentFile.WaveSegments.Count; ++i)
            {
                if (segmentFile.WaveSegments[i].IsSilenceFeature)
                {
                    silenceFrames.Add((int)(segmentFile.WaveSegments[i].StartTime / secondsPerFrame));
                    if (i < segmentFile.WaveSegments.Count - 1)
                    {
                        silenceFrames.Add((int)(segmentFile.WaveSegments[i + 1].StartTime / secondsPerFrame));
                    }
                    else
                    {
                        silenceFrames.Add(_data.Count);
                    }
                }
            }

            // Zeros the power data at silence frames.
            for (int i = 0; i < silenceFrames.Count; i += 2)
            {
                for (int j = silenceFrames[i]; j < silenceFrames[i + 1]; ++j)
                {
                    _data[j] = 0.0f;
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Convert the label info sentence into a segment file.
        /// </summary>
        /// <returns>SegmentFile.</returns>
        public SegmentFile ToSegmentFile()
        {
            SegmentFile segmentFile = new SegmentFile();
            foreach (LabelInfo lableInfo in _listLabelInfo)
            {
                WaveSegment segment = new WaveSegment();
                segment.Label = lableInfo.Label;
                segment.StartTime = LabelInfo.ConvertToSecond(lableInfo.Start);
                segment.EndTime = LabelInfo.ConvertToSecond(lableInfo.End);
                segmentFile.WaveSegments.Add(segment);
            }

            segmentFile.UpdateNonSilenceWaveSegments();
            return segmentFile;
        }