public SynthesizerPcm(MusicPcm aMusicPcm) { music = aMusicPcm; timePosition = new SoundTime(44100, 0); timeElapsed = new SoundTime(44100, 0); loopNumber1 = 0; loopNumber2 = 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); }
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)); }
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; }
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); }