最近更新时间:2023.03.16 11:40:14
首次发布时间:2023.03.16 11:40:14
SAMICoreExtractorCreateParam createParam = new SAMICoreExtractorCreateParam(); createParam.sampleRate = sampleRate; createParam.numChannel = numChannel; createParam.maxBlockSize = max_block_size; int ret = samiCore.SAMICoreCreateHandleByIdentify( SAMICoreIdentify.SAMICoreIdentify_Extractor_BeatTracking, createParam); if (ret != SAMICoreCode.SAMI_OK) { System.out.println("Create SAMICoreIdentify_Extractor_BeatTracking failed, ret " + ret); return ret; }else{ createHandleDone = true; }
String modelFileName = "model/beat_tracking/bt_streaming_espresso_v1.1.model"; SAMICoreProperty property = new SAMICoreProperty(); property.id = SAMICorePropertyId.SAMICorePropertyId_LoadModelBinary; property.type = SAMICoreDataType.SAMICoreDataType_ModelBin; property.dataByteArray = FunctionHelper.readBinaryFile(modelFileName,context); property.dataArrayLen = property.dataByteArray.length; ret = samiCore.SAMICoreSetProperty(SAMICorePropertyId.SAMICorePropertyId_LoadModelBinary, property); if (ret != SAMICoreCode.SAMI_OK) { System.out.println("BeatTracking SetProperty failed, ret " + ret); samiCore.SAMICoreDestroyHandle(); return ret; }
inBlock = new SAMICoreBlock(); inBlock.dataType = SAMICoreDataType.SAMICoreDataType_AudioBuffer; inAudioBuffer = new SAMICoreAudioBuffer(); inAudioBuffer.numberChannels = numChannel; inAudioBuffer.numberSamples = createParam.maxBlockSize; inAudioBuffer.data = new float[(int) inAudioBuffer.numberChannels][(int) inAudioBuffer.numberSamples]; inBlock.audioData = new SAMICoreAudioBuffer[1]; inBlock.audioData[0] = inAudioBuffer;
for (int numSamples = 0; numSamples < totalNumSamples;) { if (numSamples + inAudioBuffer.numberSamples > totalNumSamples) { break; } for (int i = 0; i < inAudioBuffer.numberChannels; i++) { for (int j = 0; j < inAudioBuffer.numberSamples; j++) { inAudioBuffer.data[i][j] = in_planar_float_data[i][numSamples + j]; } } int ret = samiCore.SAMICoreProcess(inBlock, null); if (ret != SAMICoreCode.SAMI_OK) { System.out.println("BeatTracking process audio data failed, ret " + ret); return ret; } // 获取检测结果 SAMICoreProperty samiCoreProperty = new SAMICoreProperty(); ret = samiCore.SAMICoreGetPropertyById(SAMICorePropertyId.SAMICorePropertyID_FrameFeatures,samiCoreProperty); if (ret==SAMICoreCode.SAMI_OK && samiCoreProperty.dataObjectArray != null){ for (Object temp:samiCoreProperty.dataObjectArray){ SAMICoreFeatureSet feature_set = (SAMICoreFeatureSet) samiCoreProperty.dataObjectArray[0]; for(int i = 0; i < feature_set.numFeatureTypes; ++i) { if(feature_set.set[i].featureID == SAMICorePropertyId.SAMICorePropertyID_FrameFeature_BEAT_TRACKING.getValue()) { SAMICoreFeatureArray feature = feature_set.set[i]; if (feature != null){ float timestamp = feature.array[0].time; float beat = feature.array[0].values[0]; System.out.println("timestamp:" + timestamp + "; beat:" + beat); System.out.println(); } } } } } numSamples = numSamples + inAudioBuffer.numberSamples; }
if (createHandleDone){ samiCore.SAMICoreDestroyHandle(); }