Wave GenerateNewWave(int waveCount)
    {
        var segments = new WaveSegment[Spawners.Length];

        for (var i = 0; i < segments.Length; i++)
        {
            segments[i] = GenerateWaveSegment(waveCount, Spawners[i]);
        }
        return(new Wave {
            Segments = segments
        });
    }
    IEnumerator RunWaveSegment(WaveSegment segment)
    {
        var totalCount = 0;

        foreach (var spawn in segment.Spawns)
        {
            for (var i = 0; i < spawn.MaxSpawnCount; i++)
            {
                spawn.Spawn(segment.Source.transform.position);
                totalCount++;
                yield return(new WaitForSeconds(spawn.SpawnDiff));

                if (totalCount > spawn.Count)
                {
                    break;
                }
            }
            yield return(new WaitForSeconds(spawn.PostSpawnWait));
        }
    }
Exemple #3
0
    /// <summary>
    /// Makes the pattern into WaveSegments.
    /// </summary>
    /// <returns></returns>
    public WaveSegment[] PatternToWaveSegments()
    {
        string[] lines = pattern.Split('\n');

        List <WaveSegment> segments = new List <WaveSegment>();

        foreach (string line in lines)
        {
            WaveSegment segment = new WaveSegment();

            string[] spawns = line.Split(' ');

            for (int i = 0; i < spawns.Length - 1; i++)
            {
                segment.spawns.Add(int.Parse(spawns[i]));
            }

            segment.wait = int.Parse(spawns[spawns.Length - 1]);

            segments.Add(segment);
        }

        return(segments.ToArray());
    }
    private void StartWavCut(string sTxtInput, string sWavInput, string sOut)
    {
        if (!File.Exists(sTxtInput) || !File.Exists(sWavInput))
            throw new WavCutException("File does not exist.");

        string[] arLines = File.ReadAllLines(sTxtInput);
        if (arLines == null || arLines.Length < 3)
            throw new WavCutException("not enough lines");

        if (arLines[0] == "wavcut")
        {
        }
        else if (arLines[0] == "wavfindsilence")
        {
            CWavcutFindSilence.FindSilence(sWavInput, arLines);
            return;
        }
        else
        {
            throw new WavCutException("The first line of the input text file should be wavcut, see trombone.txt");
        }

        // read input file
        List<int> arOffsets = new List<int>();
        int nPrevframe = 0;
        for (int i = 1; i < arLines.Length; i++)
        {
            int nFrame;
            if (arLines[i] == "" || arLines[i] == null) continue;
            if (arLines[i].Contains("."))
                throw new WavCutException("We don't support decimals");
            if (!int.TryParse(arLines[i],out nFrame))
                throw new WavCutException("Line" + (i + 1) + " could not parse int");
            
            arOffsets.Add(nFrame);
            if (nFrame <= nPrevframe) throw new WavCutException("samples must be increasing");
            nPrevframe = nFrame;
        }
        if (arOffsets.Count <= 0) throw new WavCutException("Error, no points given");

        // count number of samples
        int nSamples = CCountWaveSamples.CountWaveSamples(sWavInput);
        arOffsets.Add(nSamples);

        // construct objects that specify the intervals
        List<WaveSegment> arSegments = new List<WaveSegment>();
        for (int i = 0; i < arOffsets.Count; i++)
        {
            if (nSamples <= arOffsets[i] && i<arOffsets.Count-1)
                throw new WavCutException("Error, offset is greater than length of file");
            int length = (i == 0) ? arOffsets[i] : arOffsets[i] - arOffsets[i - 1];
            Console.WriteLine("track " + i+ " length(s) "+length/44100.0);
            WaveSegment seg = new WaveSegment();
            seg.m_writer = new CWaveWrite(sOut,i,length);
            seg.m_nStopPoint = arOffsets[i];
            arSegments.Add(seg);
        }

        // stream through the audio
        CCutWaveProcessor processor = new CCutWaveProcessor(arSegments);
        CWavStreamReader.StreamThroughWaveFile(sWavInput,processor);
        if (nSamples != processor.GetNumberSamplesSeen())
            Console.WriteLine("Warning, processor did not see all samples.");

        // save files and close file handles.
        for (int i = 0; i < arSegments.Count; i++)
        {
            arSegments[i].m_writer.Save();
        }
    }
    private void StartWavCut(string sTxtInput, string sWavInput, string sOut)
    {
        if (!File.Exists(sTxtInput) || !File.Exists(sWavInput))
        {
            throw new WavCutException("File does not exist.");
        }

        string[] arLines = File.ReadAllLines(sTxtInput);
        if (arLines == null || arLines.Length < 3)
        {
            throw new WavCutException("not enough lines");
        }

        if (arLines[0] == "wavcut")
        {
        }
        else if (arLines[0] == "wavfindsilence")
        {
            CWavcutFindSilence.FindSilence(sWavInput, arLines);
            return;
        }
        else
        {
            throw new WavCutException("The first line of the input text file should be wavcut, see trombone.txt");
        }

        // read input file
        List <int> arOffsets  = new List <int>();
        int        nPrevframe = 0;

        for (int i = 1; i < arLines.Length; i++)
        {
            int nFrame;
            if (arLines[i] == "" || arLines[i] == null)
            {
                continue;
            }
            if (arLines[i].Contains("."))
            {
                throw new WavCutException("We don't support decimals");
            }
            if (!int.TryParse(arLines[i], out nFrame))
            {
                throw new WavCutException("Line" + (i + 1) + " could not parse int");
            }

            arOffsets.Add(nFrame);
            if (nFrame <= nPrevframe)
            {
                throw new WavCutException("samples must be increasing");
            }
            nPrevframe = nFrame;
        }
        if (arOffsets.Count <= 0)
        {
            throw new WavCutException("Error, no points given");
        }

        // count number of samples
        int nSamples = CCountWaveSamples.CountWaveSamples(sWavInput);

        arOffsets.Add(nSamples);

        // construct objects that specify the intervals
        List <WaveSegment> arSegments = new List <WaveSegment>();

        for (int i = 0; i < arOffsets.Count; i++)
        {
            if (nSamples <= arOffsets[i] && i < arOffsets.Count - 1)
            {
                throw new WavCutException("Error, offset is greater than length of file");
            }
            int length = (i == 0) ? arOffsets[i] : arOffsets[i] - arOffsets[i - 1];
            Console.WriteLine("track " + i + " length(s) " + length / 44100.0);
            WaveSegment seg = new WaveSegment();
            seg.m_writer     = new CWaveWrite(sOut, i, length);
            seg.m_nStopPoint = arOffsets[i];
            arSegments.Add(seg);
        }

        // stream through the audio
        CCutWaveProcessor processor = new CCutWaveProcessor(arSegments);

        CWavStreamReader.StreamThroughWaveFile(sWavInput, processor);
        if (nSamples != processor.GetNumberSamplesSeen())
        {
            Console.WriteLine("Warning, processor did not see all samples.");
        }

        // save files and close file handles.
        for (int i = 0; i < arSegments.Count; i++)
        {
            arSegments[i].m_writer.Save();
        }
    }
        /// <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;
        }
Exemple #7
0
 public Wave(WaveSegment segment)
 {
     AddSegment(segment);
 }
Exemple #8
0
 public void RemoveSegment(WaveSegment segment)
 {
     segments.Remove(segment);
 }
Exemple #9
0
 public void AddSegment(WaveSegment segment)
 {
     segments.Add(segment);
 }