|
@@ -7,6 +7,7 @@ import java.util.Comparator;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.Map.Entry;
|
|
|
import java.util.Optional;
|
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
@@ -727,9 +728,48 @@ public class UserChannelContext {
|
|
|
NoteFrequencyRange noteFrequencyRange = null;
|
|
|
ChunkAnalysis chunkAnalysis = null;
|
|
|
boolean tempo = false;
|
|
|
- boolean isContinue = true;
|
|
|
- int unplayedSize = 0;
|
|
|
+ //boolean isContinue = true;
|
|
|
+ //int unplayedSize = 0;
|
|
|
int firstPeakIndex = -1;
|
|
|
+
|
|
|
+ //将信号分堆归类
|
|
|
+ Map<NoteFrequencyRange, Integer> signalGrouping = new HashMap<NoteFrequencyRange, Integer>();
|
|
|
+
|
|
|
+ for (int i = 0; i < chunkList.size(); i++) {
|
|
|
+ chunkAnalysis = chunkList.get(i);
|
|
|
+ if (chunkAnalysis != null) {
|
|
|
+ if (chunkAnalysis.getFrequency() > MIN_FREQUECY || firstPeakIndex > -1) {
|
|
|
+
|
|
|
+ if (firstPeakIndex == -1) {
|
|
|
+ firstPeakIndex = i;
|
|
|
+ }
|
|
|
+
|
|
|
+ noteFrequencyRange = new NoteFrequencyRange(standardFrequecy, chunkAnalysis.getFrequency());
|
|
|
+
|
|
|
+ if (signalGrouping.containsKey(noteFrequencyRange)) {
|
|
|
+ signalGrouping.put(noteFrequencyRange, signalGrouping.get(noteFrequencyRange) + 1);
|
|
|
+ } else {
|
|
|
+ signalGrouping.put(noteFrequencyRange, 1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ Integer maxTimes = 0, totalTimes = 0;
|
|
|
+
|
|
|
+ for (Entry<NoteFrequencyRange, Integer> entry : signalGrouping.entrySet()) {
|
|
|
+ if (entry.getValue() > maxTimes) {
|
|
|
+ maxTimes = entry.getValue();
|
|
|
+ }
|
|
|
+ totalTimes = totalTimes + entry.getValue();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (maxTimes / totalTimes < hardLevel.getIntegrityRange()) {
|
|
|
+ tempo = false;
|
|
|
+ LOGGER.debug("节奏错误原因:不是同一个音");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
for (int i = 0; i < chunkList.size(); i++) {
|
|
|
chunkAnalysis = chunkList.get(i);
|
|
|
if (chunkAnalysis != null) {
|
|
@@ -766,6 +806,7 @@ public class UserChannelContext {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ */
|
|
|
|
|
|
if (tempo) {
|
|
|
// 判断进入时间点
|
|
@@ -939,6 +980,7 @@ public class UserChannelContext {
|
|
|
int standardPitch = 440; // a is 440 hz...
|
|
|
for (int x = 0; x < midi.length; ++x)
|
|
|
{
|
|
|
+ //转调
|
|
|
midi[x] = new BigDecimal(standardPitch).multiply(new BigDecimal(Math.pow(2, new BigDecimal(x-69).divide(new BigDecimal(12),6,BigDecimal.ROUND_HALF_UP).doubleValue()))).doubleValue();
|
|
|
System.out.println("x=" + x +" "+ midi[x]);
|
|
|
}
|