/** * @brief Configure the audio peripherals. * @param OutputDevice: OUTPUT_DEVICE_SPEAKER, OUTPUT_DEVICE_HEADPHONE, * OUTPUT_DEVICE_BOTH or OUTPUT_DEVICE_AUTO . * @param Volume: Initial volume level (from 0 (Mute) to 100 (Max)) * @param AudioFreq: Audio frequency used to play the audio stream. * @retval 0 if correct communication, else wrong communication */ uint32_t EVAL_AUDIO_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq) { /* Perform low layer Codec initialization */ if (Codec_Init(OutputDevice, VOLUME_CONVERT(Volume), AudioFreq) != 0) { return 1; } else { /* I2S data transfer preparation: Prepare the Media to be used for the audio transfer from memory to I2S peripheral */ Audio_MAL_Init(); /* Return 0 when all operations are OK */ return 0; } }
/******************************************************************************* * Function Name : main * Description : Main program. * Input : None * Output : None * Return : None *******************************************************************************/ int main(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); //FSMC config GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_ResetBits(GPIOD , GPIO_Pin_7); //CS=0; LCD_Initializtion(); NVIC_Configuration();/* Interrupt Config (SD/usart) */ USART_Configuration(); GET_SYSclock(); //Prepare for audio processing (nothing special) Audio_Init(); //SETUP I2S2/I2S3 TX/RX GPIO pins and configure i2s2/i2s3 Codec_Init(48000); //setup codec settings via i2c to the uda1380 chip UDA1380_Configuration(); //Setup the DMA/interrupts for I2s2 and I2s3 I2S_Block_Init(); //begin audio processing/playback I2S_Block_PlayRec((uint32_t)&tx_buffer, (uint32_t)&rx_buffer, BUFF_LEN); while (1) {} }
void Codec_AudioInterface_Init(uint32_t AudioFreq) { //Setup I2C comms to codec Codec_GPIO_Init(); I2C_Cntrl_Init(); //Bring Up Codec via the I2C comms Codec_Init(); //Invoke I2S Pin connections I2S_GPIO_Init(); //Now, get down to defining I2S, Full Duplex, Codec Master Configuration I2S_InitTypeDef I2S_InitStructure; /* Enable the CODEC_I2S peripheral clock */ RCC_APB1PeriphClockCmd(CODEC_I2S_CLK, ENABLE); /* CODEC_I2S peripheral configuration */ I2S_InitStructure.I2S_AudioFreq = AudioFreq; I2S_InitStructure.I2S_Standard = I2S_Standard_MSB; I2S_InitStructure.I2S_DataFormat = I2S_DataFormat_16b; I2S_InitStructure.I2S_CPOL = I2S_CPOL_Low; I2S_InitStructure.I2S_Mode = I2S_Mode_SlaveTx; I2S_InitStructure.I2S_MCLKOutput = I2S_MCLKOutput_Disable; /* Initialize the I2S peripheral with the structure above */ I2S_Init(CODEC_I2S, &I2S_InitStructure); I2S_FullDuplexConfig(I2S3ext, &I2S_InitStructure); //Turn on the I2S interface I2S_Cmd(CODEC_I2S, ENABLE); I2S_Cmd(I2S3ext, ENABLE); }
void main(void) { int32_t t_spread; uint32_t i; NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8000); LED_ON(LED_RING_OE); //actually turns the LED ring off LEDDriver_Init(5); for (i=0;i<26;i++) LEDDriver_setRGBLED(i,0); LED_OFF(LED_RING_OE); //actually turns the LED ring on flag_update_LED_ring=1; init_inouts(); init_rotary(); init_envout_pwm(); ADC1_Init((uint16_t *)adc_buffer); ADC3_Init((uint16_t *)potadc_buffer); Codec_Init(SAMPLERATE); delay(); set_default_param_values(); set_default_color_scheme(); set_default_user_scalebank(); //overwrite default parameters if a startup bank exists cur_param_bank = load_startup_params(); if (cur_param_bank == 0xFF){ factory_reset(); cur_param_bank=0; } I2S_Block_Init(); TIM6_Config(); DAC_Ch1_NoiseConfig(); spread=(adc_buffer[SPREAD_ADC] >> 8) + 1; I2S_Block_PlayRec(); //update_spread(1); while(1){ check_errors(); param_read_switches(); update_ENVOUT_PWM(); update_LED_ring(); update_lock_leds(); t_spread=read_spread(); if (t_spread!=-1) update_spread(t_spread); process_lock_jacks(); process_lock_buttons(); param_read_q(); param_read_freq_nudge(); param_read_channel_level(); process_rotary_button(); process_rotary_rotation(); if (ui_mode==PLAY) check_rotary_pressed_repeatedly(); if (ui_mode==EDIT_SCALES) handle_edit_scale(); if (ui_mode==EDIT_COLORS) handle_edit_colors(); if (ui_mode==SELECT_PARAMS){ handle_freqpot_changing_filtermode(); handle_slider_changing_clipmode(); } if (do_ROTUP){ do_ROTUP=0; rotate_up(); } if (do_ROTDOWN){ do_ROTDOWN=0; rotate_down(); } process_rotateCV(); process_scaleCV(); } //end main loop } //end main()
void main(void) { int16_t x; // all generator inits LPCAnalyzer_init(); init_synth(); // which one? --> klatt rsynth !!!! RENAME! sp0256_init(); lpc_init(); simpleklatt_init(); sam_init(); sam_newsay(); // TEST! tms5200_init(); tms5200_newsay(); channelv_init(); tube_init(); // tube_newsay(); BANDS_Init_(); Vocoder_Init(32000.0f); digitalk_init(); digitalk_newsay(0); nvp_init(); sample_rate_init(); initbraidworm(); // re_name initvoicform(); formy=malloc(sizeof(Formlet)); formanty=malloc(sizeof(Formant)); blipper=malloc(sizeof(Blip)); RLPFer=malloc(sizeof(RLPF)); Formlet_init(formy); Formant_init(formanty); Blip_init(blipper); RLPF_init(RLPFer); NTube_init(&tuber); // wavetable_init(&wavtable, crowtable_slower, 283); // now last arg as length of table=less than 512 wavetable_init(&wavtable, plaguetable_simplesir, 328); // now last arg as length of table=less than 512 // wavetable_init(&wavtable, table_kahrs000, 160); // now last arg as length of table=less than 512 // addwormsans(&myworm, 10.0f,10.0f,200.0f, 200.0f, wanderworm); // RavenTube_init(); // newBB=BiQuad_new(LPF, 1.0, 1500, 32000, 0.68); // TEST? //////// ADC1_Init((uint16_t *)adc_buffer); Codec_Init(32000); I2S_Block_Init(); I2S_Block_PlayRec((uint32_t)&tx_buffer, (uint32_t)&rx_buffer, BUFF_LEN); // Audio_Init(); not needed // tube_init(); // tube_newsay(); // initializeSynthesizer(); // synthesize(); // lpc_newsay(1); // SAMINIT(); // test audio fill /* for (x=0;x<32768;x++){ audio_buffer[x]=tube_get_sample(); }*/ // int writepos=run_holmes(writepos); /* for (x=0;x<32767;x++){ audio_buffer[x]=tube_get_sample(); } */ while(1) { // testing changing test_elm // u8 axis=adc_buffer[SELX]>>8; // 16*3=48 // change element, change length? leave stress as is 0 // test_elm[axis*3]=phoneme_prob_remap[adc_buffer[SELY]>>6]; // how many phonemes?=64 // test_elm[(axis*3)+1]=(adc_buffer[SELZ]>>7)+1; // length say max 32 // oldmode=mode; // mode=adc_buffer[MODE]>>7; // 12 bits to say 32 modes (5 bits) // mode=10; // TESTING // if(lpc_busy() == 0) lpc_newsay(adc_buffer[SELX]>>6); // if(lpc_busy() != 0) lpc_running(); // so just writes once otherwise gets messy... // if there is a change in mode do something? // if (oldmode!=mode){ // maintrigger=1; // } /* if (maintrigger==1) {writepos=0;trigger=1;} // STRIP_OUT switch(mode){ case 0:// rsynth/klatt-single phoneme if (trigger==1){ trigger=0; u8 phonemm=phoneme_prob_remap[(adc_buffer[SELX]>>6)]; // 7bits=128 %69//6=64 pair xx=klatt_phoneme(writepos,phonemm); generated=xx.generated; writepos=xx.writepos; } break; case 1: // rsynth/klatt-chain of phonemes writepos=run_holmes(writepos); break; case 2: // vosim free running writepos=runVOSIM_SC(writepos); break; case 3: // VOSIMondemand if (trigger==1){ trigger=0; float freqwency = (float)((adc_buffer[SELX])+100);//1500.0f; float cycles = (float)((adc_buffer[SELY]>>4)+2); float decay = ((float)(adc_buffer[SELZ])/4096.0f); // TODO as SELZ! pair xx=demandVOSIM_SC(writepos,freqwency,cycles,decay); generated=xx.generated; writepos=xx.writepos; } break; case 9: // SAM full. no writepos though and just a simple proof here if (trigger==0){ SAMMain(); trigger=1; } break; case 10: if(lpc_busy() == 0) lpc_newsay(adc_buffer[SELX]>>6); if(lpc_busy() != 0) lpc_running(); // so just writes once otherwise gets messy... break; case 19: // parwave/simpleklatt dosimpleklatt(); break; } // cases // now readpos is back to one now that we have written something if (maintrigger==1) { readpos=0; maintrigger=0; } */ } }
bool_t Context_Init(const tchar_t* Name,const tchar_t* Version,int Id,const tchar_t* CmdLine,void* Application) { context* p = malloc(sizeof(context)); if (!p) return 0; #ifdef PREALLOC { int i; for (i=0;i<PREALLOC;++i) q[i] = malloc(65536); } #endif memset(p,0,sizeof(context)); p->Version = CONTEXT_VERSION; p->ProgramId = Id; p->ProgramName = Name; p->ProgramVersion = Version; p->CmdLine = CmdLine; p->Lang = DefaultLang(); p->StartUpMemory = AvailMemory(); p->LowMemory = p->StartUpMemory < LOWMEMORY_LIMIT; p->Application = Application; SetContext(p); Mem_Init(); DynCode_Init(); String_Init(); PCM_Init(); Blit_Init(); Node_Init(); Platform_Init(); Stream_Init(); Advanced_Init(); Flow_Init(); Codec_Init(); Audio_Init(); Video_Init(); Format_Init(); Playlist_Init(); FormatBase_Init(); NullOutput_Init(); RawAudio_Init(); RawImage_Init(); Timer_Init(); IDCT_Init(); Overlay_Init(); M3U_Init(); PLS_Init(); ASX_Init(); WaveOut_Init(); SoftIDCT_Init(); #if defined(CONFIG_SUBS) SubTitle_Init(); #endif #if defined(TARGET_PALMOS) OverlayHIRES_Init(); //Win_Init(); //About_Init(); //BenchResult_Init(); //MediaInfo_Init(); //Settings_Init(); ASF_Init(); AVI_Init(); WAV_Init(); MP4_Init(); MPG_Init(); NSV_Init(); Law_Init(); ADPCM_Init(); #elif defined(TARGET_WIN32) || defined(TARGET_WINCE) #if defined(TARGET_WINCE) if (QueryPlatform(PLATFORM_TYPENO) != TYPE_SMARTPHONE) { OverlayRAW_Init(); OverlayGAPI_Init(); } else { OverlayGAPI_Init(); // prefer GAPI with smartphones (Sagem MyS-7 crashes with Raw FrameBuffer?) OverlayRAW_Init(); } OverlayDirect_Init(); OverlayS1D13806_Init(); #else OverlayConsole_Init(); #endif OverlayXScale_Init(); OverlayDDraw_Init(); // after GAPI and RAW and XScale OverlayFlyTV_Init(); OverlayGDI_Init(); #elif defined(TARGET_SYMBIAN) OverlaySymbian_Init(); #endif #ifdef NO_PLUGINS Static_Init(); #else Plugins_Init(); #endif Association_Init(); // after all formats are registered Color_Init(); Equalizer_Init(); Player_Init(); // after all output drivers are registered return 1; }
/** * @brief Initializes and prepares the Media to perform audio data transfer * from Media to the I2S peripheral. * @param None * @retval None */ void Audio_MAL_Init(uint32_t baseAddr0, uint32_t baseAddr1, uint32_t bufferSize, osThreadId toSignal) { main_ID = toSignal; Codec_Init(OUTPUT_DEVICE_HEADPHONE, 200, 48000); RCC_AHB1PeriphClockCmd(AUDIO_MAL_DMA_CLOCK, ENABLE); DMA_DoubleBufferModeConfig(AUDIO_MAL_DMA_STREAM,baseAddr1, baseAddr0 ); DMA_DoubleBufferModeCmd(AUDIO_MAL_DMA_STREAM, ENABLE); NVIC_InitTypeDef NVIC_InitStructure; /* Enable the DMA clock */ /* Configure the DMA Stream */ //DMA_Cmd(AUDIO_MAL_DMA_STREAM, DISABLE); /* Set the parameters to be configured */ DMA_InitStructure.DMA_Channel = AUDIO_MAL_DMA_CHANNEL; DMA_InitStructure.DMA_PeripheralBaseAddr = AUDIO_MAL_DMA_DREG; DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)baseAddr0; /* This field will be configured in play function */ DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; DMA_InitStructure.DMA_BufferSize = bufferSize; /* This field will be configured in play function */ DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = AUDIO_MAL_DMA_PERIPH_DATA_SIZE; DMA_InitStructure.DMA_MemoryDataSize = AUDIO_MAL_DMA_MEM_DATA_SIZE; DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull; DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; DMA_Init(AUDIO_MAL_DMA_STREAM, &DMA_InitStructure); /* Enable the selected DMA interrupts (selected in "stm32f4_discovery_eval_audio_codec.h" defines) */ DMA_ITConfig(AUDIO_MAL_DMA_STREAM, DMA_IT_TC, ENABLE); NVIC_InitStructure.NVIC_IRQChannel = AUDIO_MAL_DMA_IRQ; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = EVAL_AUDIO_IRQ_PREPRIO; NVIC_InitStructure.NVIC_IRQChannelSubPriority = EVAL_AUDIO_IRQ_SUBRIO; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); SPI_I2S_DMACmd(CODEC_I2S, SPI_I2S_DMAReq_Tx, ENABLE); DMA_Init(AUDIO_MAL_DMA_STREAM, &DMA_InitStructure); /* Enable the I2S DMA Stream*/ DMA_Cmd(AUDIO_MAL_DMA_STREAM, ENABLE); I2S_Cmd(SPI3,ENABLE); }