yonge пре 3 година
родитељ
комит
7b039dbe9e

+ 4 - 0
audio-analysis/src/main/java/com/yonge/netty/dto/NoteFrequencyRange.java

@@ -19,6 +19,10 @@ public class NoteFrequencyRange {
 			midiNoteFrequencies[x] = new BigDecimal(standardFrequecy).multiply(
 					new BigDecimal(Math.pow(2, new BigDecimal(x - 69).divide(new BigDecimal(12), 6, BigDecimal.ROUND_HALF_UP).doubleValue()))).doubleValue();
 
+			if(frequency <= 0){
+				continue;
+			}
+			
 			if (midiNoteFrequencies[x] >= frequency) {
 				if (midiNoteFrequencies[x] - frequency > frequency - midiNoteFrequencies[x - 1]) {
 					// frequency演奏的是上一个音符

+ 8 - 3
audio-analysis/src/main/java/com/yonge/netty/dto/UserChannelContext.java

@@ -16,6 +16,8 @@ import javax.sound.sampled.AudioFormat;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import be.tarsos.dsp.pitch.FastYin;
+
 import com.yonge.audio.analysis.Signals;
 import com.yonge.audio.analysis.detector.YINPitchDetector;
 import com.yonge.audio.utils.ArrayUtil;
@@ -321,9 +323,12 @@ public class UserChannelContext {
 
 	public void handle(float[] samples, AudioFormat audioFormat){
 		
-		YINPitchDetector frequencyDetector = new YINPitchDetector(samples.length , audioFormat.getSampleRate());
-
-		int playFrequency = (int) frequencyDetector.getFrequency(samples);
+		//YINPitchDetector frequencyDetector = new YINPitchDetector(samples.length , audioFormat.getSampleRate());
+		//int playFrequency = (int) frequencyDetector.getFrequency(samples);
+		
+		FastYin detector = new FastYin(audioFormat.getSampleRate(), samples.length);
+		int playFrequency = (int)detector.getPitch(samples).getPitch();
+		
 		int splDb = (int) Signals.soundPressureLevel(samples);
 		int power = (int) Signals.power(samples);
 		int amplitude = (int) Signals.norm(samples);