80 likes | 204 Vues
ECE 3551 Final Project by Brian Robl. Loop Board. Objectives. Use the Blackfin BF533 EZ-KIT to create a 4 track audio looper. Utilize 32MB of external SDRAM. Push buttons used to toggle recording off and on. LEDs signify if recording is enabled or disabled.
E N D
ECE 3551 Final Project by Brian Robl Loop Board
Objectives • Use the Blackfin BF533 EZ-KIT to create a 4 track audio looper. • Utilize 32MB of external SDRAM. • Push buttons used to toggle recording off and on. • LEDs signify if recording is enabled or disabled. • Pointers used to record and loop audio.
Common Uses • Musicians use loop pedals to overlay recorded tracks over one another. • Make a fuller sound • Creating songs • Djs may use this to mix songs together.
Recording to the SDRAM • SDRAM split into 4 partitions. One for each track. ///////////Right Channel0 Partition//////////////////////// #define pRAMstartR (volatileunsignedint *)0x800000 #define pRAMendR (volatileunsignedint *)0xFFFFFC ///////////Right Channel1 Partition//////////////////////// #define pRAMstartR1 (volatileunsignedint *)0x1800000 #define pRAMendR1 (volatileunsignedint *)0x1FFFFFC ///////////Left Channel0 Partition//////////////////////// #define pRAMstartL (volatileunsignedint *)0x00000000 #define pRAMendL (volatileunsignedint *)0x7FFFFC ///////////Left Channel1 Partition//////////////////////// #define pRAMstartL1 (volatileunsignedint *)0x1000000 #define pRAMendL1 (volatileunsignedint *)0x17FFFFC
Recording Cont. • Pointer set to starting address of partition. • Stores sample and then address gets incremented. if(channel == 0) { if(pRecordR <= pRAMendR) //if record pointer address is less than ending address for Channel0R partition { iChannel0RightOut = iChannel0RightIn; //output input in real-time *pRecordR = iChannel0RightIn; //input becomes recorded pRecordR++; //increment address for record pointer if(pRecordR > pRAMendR) { pRecordR = pRAMstartR; pF8_LED = 0x00; //turn off LED ucActive = pF8_LED|pF9_LED|pF10_LED|pF11_LED; *pFlashA_PortB_Data = ucActive; } Process_Data(); //output rest
Loop Playback • Another pointer is used to iterate through the memory partition that contains data and store it in the output. if(channel == 0) { if(playR < pRecordR) //if play pointer address is less than end recording pointer address { iChannel0RightOut = *playR; //output recorded data until end of recording playR++; //increment address for play pointer } elseif(playR >= pRecordR) //if end of recording address is reached, { playR = pStopR; //reset pointer to beginning } Process_Data(); //output recording
Playback cont. • Recorded audio played back from each output channel. • Ichannel0LeftOut • Ichannel0RightOut • Ichannel1LeftOut • Ichannel1RightOut
Questions? • Thank you for your attention.