Sound BlocksAn interactive environment for real-time music creationWhat does it do?• Users create and modify sounds by manipulating blocks on a specially-designed table.• Three kinds of blocks: source, local-effect, global-effect.– Source: sound file stored in ram to be played out of speakers in loop– Local: modifies source block sound, ex. Add reverb, band-pass filter– Global: modifies entire system• Rotating effect blocks changes magnitude of effect• Audio waveforms displayed on table.Source blockLocal-effect blockGlobal-effect blockHow does it do it?• The table surface is translucent.• The bottom of each block has two different colored LEDs.• A camera underneath the table looks for the LED colors.• The audio and video is processed according to which colors the camera sees.• The audio is played through speakers.• A projector underneath the table displays the waveforms onto the table from below.cameraprojectorBLOCK DIAGRAM 1 – Identifying objectsmemory_controlidentifyadv_initntsc_decodeadv7185FROM CAMERAtv_in_ycrcbdata_valid[29:0] ycrcb[14:0] rgbready_dataWE_A[35:0] read_data_B[35:0] write_data[35:0] read_data_Adone_read[188:0] xy_blocks[8:0] blocks[188:0] xy_markersaddress_AWE_B[35:0] write_dataaddress_Bcontrol_A control_BZBT SRAM 1 ZBT SRAM 2ready_readread_selectxy positionregistersupdate[8:0] blocks[188:0] xy_blocks[188:0] xy_markersfvh[10:0] hcount[9:0] vcountycrcb_to_rgbxy_generator[35:0] read_data_inend_frame0 1end_frame = 0address_A = 0address_B = 0end_frame = 1STATE AWE_A = 0WE_B = 0read_select = 1ready_read = 0STATE BWE_A = 0WE_B = 0read_select = 0ready_read = 0end_frame = 0address_A = 0address_B = 0end_frame = 1address_A = +1 WE_A = 1address_B = +1ready_read = 1address_B = +1 WE_B = 1address_A = +1ready_read = 1ready_datadone_readready_datadone_readhcount & vcount = 0hcount & vcount = 0hcount & vcount ≠ 0hcount & vcount ≠ 0MEMORY_CONTROL FSMBLOCK DIAGRAM 1 – Identifying objectsmemory_controlidentifyadv_initntsc_decodeadv7185FROM CAMERAtv_in_ycrcbdata_valid[29:0] ycrcb[14:0] rgbready_dataWE_A[35:0] read_data_B[35:0] write_data[35:0] read_data_Adone_read[188:0] xy_blocks[8:0] blocks[188:0] xy_markersaddress_AWE_B[35:0] write_dataaddress_Bcontrol_A control_BZBT SRAM 1 ZBT SRAM 2ready_readread_selectxy positionregistersupdate[8:0] blocks[188:0] xy_blocks[188:0] xy_markersfvh[10:0] hcount[9:0] vcountycrcb_to_rgbxy_generator[35:0] read_data_inend_frame0 1[35:0] read_data_inIdentify Controller[35:24] read_data_in = x coordinate[23:12] read_data_in = y coordinateready_read done_readX coordinate Y coordinate ... [9:0]x_block_red[9:0]x_block_green...[9:0]x_marker_red[9:0]x_marker_green...Running sum of y-coordinate (vcount)Number of red pixels found[9:0] y_block_redend_frameIDENTIFY BLOCKconnectionscurrent valueorientation registersinitial valueorientation registersblocks[8:1]xy_blocks[188:21][23:0] connectionsblocks[8:0]xy_blocks[188:0]xy_markers[188:0][89:0] current[89:0] current[89:0] new_i[89:0] old_iBLOCK DIAGRAM 2 – Interpreting the dataorientationconnection registers[23:0] connectionsconnections[23:0] : 000 000 000 001 000 000 111 010source4source3 source1source2 effect4effect3effect2effect1source 2BRAM 1 BRAM 2 BRAM 3 BRAM 4connections[23:0]global[7:0] sample1[7:0] sample2 [7:0] sample3[7:0] sample4done1done2 done3done4next nextreadysample[7:0]AUDIO OUTcurrent[89:10]BLOCK DIAGRAM 3 – Generating the audio outputcurrent[9:0]ac97source 1 source 3 source 4Sourcedone = 0load sampleLocal Effect 1done = 0modify sampleLocal Effect 2done = 0modify sampleLocal Effect 3done = 0modify sampleLocal Effect 4done = 0modify sampleDo Nothingdone = 1sample = 0counter = 0Donedone = 1counter = +1000100011001010111 (from any state)011 001010001100010100011010100011001next = 1next = 1AUDIO FSMSample Registerconnections[23:0] : 000 000 000 001 000 000 111 010source4source3 source1source2 effect4effect3effect2effect1Sample RegisterEffect 1Effect 2Effect 3Effect 4from BRAM0effect_sel (from audio module)source_sel(from audio module)outputsource 2BRAM 1 BRAM 2 BRAM 3 BRAM 4connections[23:0]OR pixelsdone1done2 done3done4Pixel 4nextcurrent[89:10]BLOCK DIAGRAM 4 – Generating the visual outputcurrent[9:0]source 1 source 3 source 4xy positionregisters[8:0] blocks[188:0] xy_blocks[188:0] xy_markersPixel 2 Pixel 3Pixel 1nextTo each source module[5:0]
View Full Document