AUD_Error gmm_mix( void **phGmmHandle, void *hSrcGmmHandle1, void *hSrcGmmHandle2, AUD_Int8s *pName ) { AUD_ASSERT( phGmmHandle && hSrcGmmHandle1 && hSrcGmmHandle2 && pName ); AUD_ASSERT( *phGmmHandle == NULL ); AUD_Int32s ret = 0, i = 0; GmmModel *pState = NULL; pState = (GmmModel*)calloc( sizeof(GmmModel), 1 ); if ( pState == NULL ) { *phGmmHandle = NULL; return AUD_ERROR_OUTOFMEMORY; } GmmModel *pSrcModel1 = (GmmModel*)hSrcGmmHandle1; GmmModel *pSrcModel2 = (GmmModel*)hSrcGmmHandle2; AUD_ASSERT( pSrcModel1->width == pSrcModel2->width ); snprintf( (char*)pState->arGmmName, MAX_GMMNAME_LENGTH, "%s", (char*)pName ); pState->numMix = pSrcModel1->numMix + pSrcModel2->numMix; pState->width = pSrcModel1->width; pState->step = pState->width; pState->means.rows = pState->numMix; pState->means.cols = pState->step; pState->means.dataType = AUD_DATATYPE_INT32S; ret = createMatrix( &(pState->means) ); AUD_ASSERT( ret == 0 ); ret = mergeMatrix( &(pState->means), &(pSrcModel1->means), &(pSrcModel2->means) ); AUD_ASSERT( ret == 0 ); pState->cvars.rows = pState->numMix; pState->cvars.cols = pState->step; pState->cvars.dataType = AUD_DATATYPE_INT64S; ret = createMatrix( &(pState->cvars) ); AUD_ASSERT( ret == 0 ); ret = mergeMatrix( &(pState->cvars), &(pSrcModel1->cvars), &(pSrcModel2->cvars) ); AUD_ASSERT( ret == 0 ); pState->weights.len = pState->numMix; pState->weights.dataType = AUD_DATATYPE_DOUBLE; ret = createVector( &(pState->weights) ); AUD_ASSERT( ret == 0 ); AUD_Double *pDst1 = pState->weights.pDouble; AUD_Double *pDst2 = pState->weights.pDouble + pSrcModel1->weights.len; for ( i = 0; i < pSrcModel1->weights.len; i++ ) { pDst1[i] = (pSrcModel1->weights.pDouble)[i] / 2.; } for ( i = 0; i < pSrcModel2->weights.len; i++ ) { pDst2[i] = (pSrcModel2->weights.pDouble)[i] / 2.; } *phGmmHandle = pState; return AUD_ERROR_NONE; }
int main() { PS2Controller psData; static uint8 c_flag = 0; static uint8 right_flag = 0; static uint8 left_flag = 0; static uint8 down_flag = 0; static uint8 up_flag = 0; uint8 counter = 0; uint8 cmax = 50; int blocks[7][4][4] = { //ブロックの宣言 { {0,0,0,0}, {0,1,1,0}, {0,0,1,0}, {0,0,1,0} }, { {0,0,0,0}, {0,1,1,0}, {0,1,0,0}, {0,1,0,0} }, { {0,0,0,0}, {0,1,0,0}, {0,1,1,0}, {0,0,1,0} }, { {0,0,0,0}, {0,0,1,0}, {0,1,1,0}, {0,1,0,0} }, { {0,0,0,0}, {0,0,1,0}, {0,1,1,0}, {0,0,1,0} }, { {0,0,0,0}, {0,1,1,0}, {0,1,1,0}, {0,0,0,0} }, { {0,0,1,0}, {0,0,1,0}, {0,0,1,0}, {0,0,1,0} } }; int i, j, bflg = 0, gflg = 1; int block[4][4] = {}, rotated[4][4]; signed int slidex = 0, slidey = 0; char string[12] = {}; CyGlobalIntEnable; PS2_Start(); CyIntSetSysVector(SysTick_IRQn + 16, timer_isr); SysTick_Config(0x00ffff); //USBUART_Start(0, USBUART_5V_OPERATION); //while (USBUART_GetConfiguration() == 0); //USBUART_CDC_Init(); DotMat_init(); randomBlock(blocks, block); paintBlock(block[4][4], slidey, slidex); //DotMat_paint(&Map); CyDelay(100); for (;;){ psData = PS2_Controller_get(); dotMatrix_print(&Map); dotMatrix_print(&dotMat); if(isr_flg){ if(gflg){ if(counter == cmax){ if(check(block, slidey - 1, slidex) == 1){ slidey--; } else{ mergeMatrix(block, slidey , slidex); clearRow(&cmax); dotMatrix_dataToArray(&Map); if(slidey == 0){ myprint(string); gflg = 0; } randomBlock(blocks, block); slidey = 0; slidex = 0; } if(gflg){ DotMat_paint(block, slidey, slidex); } counter = 0; } counter++; } else{ myprint(string); } isr_flg = 0; } if(psData.CIRCLE || psData.CROSS){ rand(); if(c_flag){ if(psData.CIRCLE){ rotate(block, rotated, 1); } if(psData.CROSS){ rotate(block, rotated, 2); } if(check(rotated, slidey , slidex) == 1){ if(bflg == 1){ slidex--; bflg = 0; } if(bflg == 2){ slidex++; bflg = 0; } rotate2block(block, rotated); DotMat_paint(block, slidey, slidex); } if(check(rotated, slidey , slidex) == 2){ bflg = 1; if(check(rotated, slidey , slidex + 1) == 2){ if(check(rotated, slidey , slidex + 2) == 1){ slidex++; } } if(check(rotated, slidey , slidex + 1) == 1){ slidex++; rotate2block(block, rotated); DotMat_paint(block, slidey, slidex); } } if(check(rotated, slidey , slidex) == 3){ bflg = 2; if(check(rotated, slidey , slidex - 1) == 3){ if(check(rotated, slidey , slidex - 2) == 1){ slidex--; } } if(check(rotated, slidey , slidex - 1) == 1){ slidex--; rotate2block(block, rotated); DotMat_paint(block, slidey, slidex); } } } c_flag = 0; } else{ c_flag = 1; } if(psData.LEFT){ bflg = 0; rand(); if(left_flag){ if(check(block, slidey , slidex - 1) == 1){ slidex--; DotMat_paint(block, slidey, slidex); } } left_flag = 0; } else{ left_flag = 1; } if(psData.RIGHT){ bflg = 0; rand(); if(right_flag){ if(check(block, slidey , slidex + 1) == 1){ slidex++; DotMat_paint(block, slidey, slidex); } } right_flag = 0; } else{ right_flag = 1; } if(psData.UP){ rand(); if(up_flag){ while(check(block, slidey - 1, slidex) == 1){ slidey--; } DotMat_paint(block, slidey, slidex); } up_flag = 0; } else{ up_flag = 1; } if(psData.DOWN){ rand(); if(psData.L1){ if(psData.R1){ while(check(block, slidey - 1, slidex) == 1){ slidey++; DotMat_paint(block, slidey, slidex); } } } if(down_flag){ while(check(block, slidey - 1, slidex) == 1){ slidey--; DotMat_paint(block, slidey, slidex); } } down_flag = 0; } else{ down_flag = 1; } if(psData.SELECT){ if(psData.START){ slidey = 0; slidex = 0; DotMat_init(); randomBlock(blocks, block); paintBlock(block[4][4], slidey, slidex); gflg = 1; cmax = 50; } } } }