本文整理汇总了C#中RocksmithToolkitLib.Sng2014HSL.Sng2014File.HashStruct方法的典型用法代码示例。如果您正苦于以下问题:C# Sng2014File.HashStruct方法的具体用法?C# Sng2014File.HashStruct怎么用?C# Sng2014File.HashStruct使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类RocksmithToolkitLib.Sng2014HSL.Sng2014File
的用法示例。
在下文中一共展示了Sng2014File.HashStruct方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: parseArrangements
//.........这里部分代码省略.........
break;
}
// set to next arrangement note
a.Notes.Notes[j].NextIterNote = (Int16)(j + 1);
// set all but first note to previous note
if (count > 0)
a.Notes.Notes[j].PrevIterNote = (Int16)(j - 1);
++count;
}
// fix last phrase note
if (count > 0)
a.Notes.Notes[j - 1].NextIterNote = -1;
}
for (int j = 1; j < a.Notes.Notes.Length; j++)
{
var n = a.Notes.Notes[j];
var p = a.Notes.Notes[j - 1];
int prvnote = 1; //set current + prev note + initialize prvnote variable
//do not do this searching for a parent, if the previous note timestamp != current time stamp
if (n.Time != p.Time) prvnote = 1;
else
{
for (int x = 1; x < (a.Notes.Notes.Length); x++) //search up till the beginning of iteration
{
if (j - x < 1) //don't search past the first note in iteration
{
prvnote = x;
x = a.Notes.Notes.Length + 2;
break; // stop searching for a match we reached the beginning
}
var prv = a.Notes.Notes[j - x]; // get the info for the note we are checking against
if (prv.Time != n.Time)
{
//now check the timestamp if its the same timestamp then keep looking
if (prv.ChordId != -1)
{
//check if its a chord
prvnote = x;
x = a.Notes.Notes.Length + 2;
break; //stop here, its a chord so don't need to check the strings
}
if (prv.StringIndex == n.StringIndex)
{
//check to see if we are looking at the same string
prvnote = x;
x = a.Notes.Notes.Length + 2;
break; //stop here we found the same string, at a different timestamp, thats not a chord
}
}
}
}
var prev = a.Notes.Notes[j - prvnote]; //this will be either the first note of piter, or the last note on the same string at previous timestamp
if ((prev.NoteMask & CON.NOTE_MASK_PARENT) != 0)
{
n.ParentPrevNote = (short)(prev.NextIterNote - 1);
n.NoteMask |= CON.NOTE_MASK_CHILD; //set the ParentPrevNote# = the matched Note#//add CHILD flag
}
}
a.PhraseCount = xml.Phrases.Length;
a.AverageNotesPerIteration = new float[a.PhraseCount];
var iter_count = new float[a.PhraseCount];
for (int j = 0; j < xml.PhraseIterations.Length; j++)
{
var piter = xml.PhraseIterations[j];
// using NotesInIteration2 to calculate
a.AverageNotesPerIteration[piter.PhraseId] += a.NotesInIteration2[j];
++iter_count[piter.PhraseId];
}
for (int j = 0; j < iter_count.Length; j++)
{
if (iter_count[j] > 0)
a.AverageNotesPerIteration[j] /= iter_count[j];
}
// this is some kind of optimization in RS2 where they
// hash all note data but their position in phrase iteration
// to mark otherwise unchanged notes
foreach (var n in a.Notes.Notes)
{
MemoryStream data = sng.CopyStruct(n);
var r = new EndianBinaryReader(EndianBitConverter.Little, data);
var ncopy = new Notes();
ncopy.read(r);
ncopy.NextIterNote = 0;
ncopy.PrevIterNote = 0;
ncopy.ParentPrevNote = 0;
UInt32 crc = sng.HashStruct(ncopy);
if (!note_id.ContainsKey(crc))
note_id[crc] = (UInt32)note_id.Count;
n.Hash = note_id[crc];
}
numberNotes(sng, a.Notes.Notes);
sng.Arrangements.Arrangements[i] = a;
}
}
示例2: addChordNotes
public Int32 addChordNotes(Sng2014File sng, SongChord2014 chord)
{
var c = new ChordNotes();
for (int i = 0; i < 6; i++)
{
SongNote2014 n = null;
foreach (var cn in chord.ChordNotes)
{
if (cn.String == i)
{
n = cn;
break;
}
}
// TODO: need to figure out which masks are not applied
c.NoteMask[i] = parseNoteMask(n, false);
c.BendData[i] = new BendData();
c.BendData[i].BendData32 = parseBendData(n, false);
if (n != null && n.BendValues != null)
c.BendData[i].UsedCount = n.BendValues.Length;
if (n != null)
{
c.SlideTo[i] = (Byte)n.SlideTo;
c.SlideUnpitchTo[i] = (Byte)n.SlideUnpitchTo;
}
else
{
c.SlideTo[i] = unchecked((Byte)(-1));
c.SlideUnpitchTo[i] = unchecked((Byte)(-1));
}
if (n != null)
c.Vibrato[i] = n.Vibrato;
}
UInt32 crc = sng.HashStruct(c);
if (cnsId.ContainsKey(crc))
return cnsId[crc];
// don't export chordnotes if there are no techniques
bool noTechniques = c.NoteMask.All(m => m == 0);
if (noTechniques)
return -1;
// add new ChordNotes instance
Int32 id = cns.Count;
cnsId[crc] = id;
cns.Add(c);
return cnsId[crc];
}