コード例 #1
0
 public SynthesizerPcm(MusicPcm aMusicPcm)
 {
     music        = aMusicPcm;
     timePosition = new SoundTime(44100, 0);
     timeElapsed  = new SoundTime(44100, 0);
     loopNumber1  = 0;
     loopNumber2  = 0;
 }
コード例 #2
0
        // Return: Ture if end.
        public bool Update(float[] aSoundBuffer, int aChannels, int aSampleRate)
        {
            SoundTime PositionPre = Position;

            Position += GetOneSample(aSampleRate);
            Elapsed  += GetOneSample(aSampleRate);

            if (isLoop == true)
            {
                if (loop.length.sample > 0)
                {
                    if (PositionPre.sample < loop.end.sample + 1 && Position.sample >= loop.end.sample + 1)
                    {
                        Position = new SoundTime(PositionPre.sampleRate, Position.sample - (loop.end.sample + 1 - loop.start.sample));
                    }
                    else if (Position.sample >= waveform.format.samples)
                    {
                        Position = new SoundTime(Position.sampleRate, Position.sample - waveform.format.samples);
                    }
                }
                else
                {
                    if (Position.sample >= waveform.format.samples)
                    {
                        Position = new SoundTime(Position.sampleRate, PositionPre.sample - waveform.format.samples);
                    }
                }
            }

            if (Position.sample + 1 < waveform.format.samples)
            {
                for (int i = 0; i < aChannels; i++)
                {
                    aSoundBuffer[i] = MeanInterpolation.Calculate(waveform, i, Position.sample);
                }
            }
            else if (Position.sample < waveform.format.samples)
            {
                for (int i = 0; i < aChannels; i++)
                {
                    if (loop.length.sample > 0)
                    {
                        aSoundBuffer[i] = MeanInterpolation.Calculate(waveform, i, Position.sample, loop.start.sample);
                    }
                    else
                    {
                        aSoundBuffer[i] = waveform.reader.GetSample(i, ( int )Position.sample);
                    }
                }
            }
            else             // End position.
            {
                return(true);
            }

            return(false);
        }
コード例 #3
0
ファイル: MusicPcm.cs プロジェクト: activerecords/loop-tool
        public MusicPcm(FormAiffForm aFormFile)
        {
            Name     = aFormFile.name;
            Waveform = new WaveformReaderPcm(aFormFile, false);
            Length   = new SoundTime(Waveform.format.sampleRate, Waveform.format.samples);

            loopList = new List <List <LoopInformation> >();
            loopList.Add(new List <LoopInformation>());
            loopList[0].Add(new LoopInformation(Length.sampleRate, -1, -1));
        }
コード例 #4
0
        public SynthesizerPcm(WaveformReaderPcm aWaveform, LoopInformation aLoop)
        {
            waveform = aWaveform;

            oneSampelList = new Dictionary <int, SoundTime>();
            Position      = new SoundTime(waveform.format.sampleRate, 0);
            Elapsed       = new SoundTime(waveform.format.sampleRate, 0);

            loop   = aLoop;
            isLoop = false;
        }
コード例 #5
0
ファイル: MusicPcm.cs プロジェクト: activerecords/loop-tool
        public MusicPcm(RiffWaveRiff aRiffFile)
        {
            Name     = aRiffFile.name;
            Waveform = new WaveformReaderPcm(aRiffFile, false);

            Length = new SoundTime(Waveform.format.sampleRate, Waveform.format.samples);

            RiffWaveSmpl lRiffWaveSmpl = ( RiffWaveSmpl )aRiffFile.GetChunk(RiffWaveSmpl.ID);

            if (lRiffWaveSmpl != null)
            {
                loopList = new List <List <LoopInformation> >();

                int lIndex      = -1;
                int lLoopLength = -1;

                for (int i = 0; i < lRiffWaveSmpl.sampleLoops; i++)
                {
                    SampleLoop lLoop = lRiffWaveSmpl.sampleLoopList[i];

                    if (( int )(lLoop.end - lLoop.start) == lLoopLength)
                    {
                    }
                    else
                    {
                        loopList.Add(new List <LoopInformation>());
                        lLoopLength = ( int )(lLoop.end - lLoop.start);
                        lIndex++;
                    }

                    loopList[lIndex].Add(new LoopInformation(Length.sampleRate, ( int )lLoop.start, ( int )lLoop.end));
                }
            }
            else
            {
                loopList = new List <List <LoopInformation> >();
                loopList.Add(new List <LoopInformation>());
                loopList[0].Add(new LoopInformation(Length.sampleRate, -1, -1));
            }

            Loop = GetLoop(0, 0);
        }