public static void WriteWaveformFile(string path, WaveformBase waveform) { using (var waveFormWriter = new WaveformFileWaveformWriter(path)) { waveFormWriter.Write(waveform); } }
public GeneratorEnvelope(SoundfontBase aSoundfont, byte aVelocity, double aSecondsSustain = 0.0d) { soundfont = aSoundfont; waveform = aSoundfont.waveform; secondsSustain = aSecondsSustain; samplePosition = soundfont.soundinfo.offset; volume = ( float )Math.Pow(10.0d, ( double )aSoundfont.soundinfo.volume / 20.0d) * ( float )aVelocity / 8.0f; double lCenterFrequency = 440.0d * Math.Pow(2.0d, (( double )aSoundfont.soundinfo.pitchKeyCenter - 69.0d) / 12.0d); sampleSpeed = waveform.format.sampleRate / lCenterFrequency; generatorEnvelopeCurrent = GeneratorEnvelopeSet.generatorEnvelopeDelay; timeElapsedDelay = 0.0d; timeElapsedAttack = 0.0d; timeElapsedHold = 0.0d; timeElapsedDecay = 0.0d; timeElapsedSustain = 0.0d; timeElapsedRelease = 0.0d; timeElapsedEnd = 0.0d; timeElapsedSum = 0.0d; aSoundfont.waveform.data.GetSample(0, 0); }
public static float Calculate(WaveformBase aWaveformBase, double aSampleCurrent, int aSampleLoopStart, int aChannel) { float a = aWaveformBase.data.GetSample(aChannel, ( int )aSampleCurrent); float b = aWaveformBase.data.GetSample(aChannel, aSampleLoopStart); double positionDifference = aSampleCurrent - ( int )aSampleCurrent; return(( float )(a + (b - a) * positionDifference)); }
public static void Execute(FileInfo aFileInput, string aFilePathOutput, List <double> aProgressList, int aIndex) { RiffFile lRiffFile = ( RiffFile )PoolCollection.poolWav.Get(aFileInput.FullName); RiffChunkListWave lRiffChunkListWave = ( RiffChunkListWave )lRiffFile.riffChunkList; WaveformBase waveform = LoaderWaveform.Load(aFileInput.FullName); SByte[] lSampleArray = new SByte[waveform.format.samples]; for (int i = 0; i < waveform.format.samples; i++) { lSampleArray[i] = ( SByte )(waveform.data.GetSampleData(0, i) >> 8); } List <LoopInformation> lLoopList = null; try { lLoopList = LoopSearchTool.Execute(lSampleArray, aProgressList, aIndex); } catch (Exception aExpection) { UnityEngine.Debug.Log(aExpection.ToString() + ":LoopTool Exception"); } //for( int i = 0; i < lLoopList.Count; i++ ) if (lLoopList.Count >= 1) { //lRiffChunkListWave.AddCuePoint( ( int )lLoopList[i].start.sample, ( int )lLoopList[i].end.sample ); //lRiffChunkListWave.AddSampleLoop( ( int )lLoopList[i].start.sample, ( int )lLoopList[i].end.sample ); lRiffChunkListWave.AddCuePoint(( int )lLoopList[0].start.sample, ( int )lLoopList[0].end.sample); lRiffChunkListWave.AddSampleLoop(( int )lLoopList[0].start.sample, ( int )lLoopList[0].end.sample); } Byte[] lDataArrayRead = null; using (FileStream u = new FileStream(lRiffFile.name, FileMode.Open, FileAccess.Read)) { ByteArray l = new ByteArrayLittle(u); int bytePosition = ( int )lRiffChunkListWave.dataChunk.position; l.SetPosition(bytePosition); lDataArrayRead = l.ReadBytes(lRiffChunkListWave.dataChunk.size); } Byte[] lDataArrayWrite = lDataArrayRead; if (IsCutLast == true) { lDataArrayWrite = new Byte[(( int )lLoopList[0].end.sample + 1) * 4]; for (int i = 0; i < (lLoopList[0].end.sample + 1) * 4; i++) { lDataArrayWrite[i] = lDataArrayRead[i]; } } for (int i = 0; i < 64; i++) { Logger.LogDebug(i.ToString() + ":" + lDataArrayWrite[i]); } lRiffChunkListWave.SetDataArray(lDataArrayWrite); MemoryStream lMemoryStreamWrite = new MemoryStream(( int )lRiffChunkListWave.size + 8); ByteArrayLittle lByteArray = new ByteArrayLittle(lMemoryStreamWrite); //lByteArrayRead.Open(); lRiffFile.WriteByteArray(null, lByteArray); //lByteArrayRead.Close(); using (FileStream u = new FileStream(aFilePathOutput, FileMode.Create, FileAccess.Write)) { u.Write(lMemoryStreamWrite.GetBuffer(), 0, ( int )lMemoryStreamWrite.Length); } }