public SoundfontSfz(SfzRegion sfzData, Dictionary <string, string> aPathWaveformDictionary) { byte lokey = sfzData.lokey; byte hikey = sfzData.hikey; bool loopMode = sfzData.loop_mode; int loopStart = sfzData.loop_start - 1; int loopEnd = sfzData.loop_end; int offset = sfzData.offset; int end = sfzData.end; int tune = sfzData.tune; int pitchKeyCenter = sfzData.pitch_keycenter; float volume = sfzData.volume; soundinfo = new Soundinfo(lokey, hikey, loopMode, loopStart, loopEnd, offset, end, tune, pitchKeyCenter, 0, 0, volume); ampeg = new Ampeg(sfzData.ampeg_delay, sfzData.ampeg_start / 100.0f, sfzData.ampeg_attack, sfzData.ampeg_hold, sfzData.ampeg_decay, sfzData.ampeg_sustain / 100.0f, sfzData.ampeg_release); if (aPathWaveformDictionary.ContainsKey(sfzData.sample) == false) { Logger.LogError("This waveform is not found:" + sfzData.sample); } else { waveform = LoaderWaveform.Load(aPathWaveformDictionary[sfzData.sample]); } }
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); } }