예제 #1
0
파일: example.py 프로젝트: jkyl/conv_reverb
    sys.exit()
elif len(sys.argv) == 2:
    fname = sys.argv[1]

print('\nExample script for the audio class.\n\n{}'.format('~'*40))
print('Loading in {}...'.format(fname))

a = Audio('samples/avril.aif')

print('\n{} is now inside an Audio object - you can read and write its time-series data.'.format(a.title))
print('\nBy default, it writes to both ./download_files/{}.wav and ../Web_Interface/static/temp_wet.wav.'.format(a.title))
print('\nYou can also write to a directory of your choice with the optional "custom" arg in write_to_wav().')
print('\nOn a mac, you can play audio from the command line with afplay. On ubuntu, you\'ll have to download vlc or another audio player.')
print('\nWriting now...')

a.write_to_wav()

print('\nNow let\'s load another Audio instance and convolve the two...')

b = Audio('impulses/Booth_atrium.wav')
c = a.convolve(b)
c.write_to_wav()

print('\nThe convolution has been written to ./download_files and its title has been formatted to reflect the transformation. If you use pitch shifting, ring modulation, or delay, these steps are the same except for the method you call and the args you give.\n')

c.plot_fft_spectrum()

print('The running-windowed spectrogram of the convolution has been written to ../Web_Interface/static/temp_wet.png. You can also view it on screen with either plt.ion() or %matplotlib inline. Take a look if you please.')

print('{}\n\nPlease check out test_correlation.py for a demonstration of one way we can determine the origin of a wet sound.\n\nBest,\nW.I.R.E. team.'.format('~'*40))
예제 #2
0
파일: views.py 프로젝트: jkyl/conv_reverb
def home(request):
    '''
    Function to create objects of django forms and render them on the browser. Also, accesses user inputs and calls necessary functions 
    to process inputs and return results on the browser webpage. 
    '''
    res = None
    if request.method == 'GET' and 'Search' in request.GET:
        # create a form instance and populate it with data from the request:
        query_API = SearchForm(request.GET)
        resform = PickResForm()
        # check whether it's valid:
        if query_API.is_valid():
            # Convert form data to an args dictionary for API_backend
            args = {}
            if query_API.cleaned_data['Title']:
                args['Title'] = query_API.cleaned_data['Title']
            if query_API.cleaned_data['Creator']:
                args['Creator'] = query_API.cleaned_data['Creator']
            if query_API.cleaned_data['Description']:
                args['Description'] = query_API.cleaned_data['Description']
            
            try:
                res = query_catalog(args)
                res = format_output(res)
                resform = PickResForm()
            except Exception as e:
                print('Exception caught')
                bt = traceback.format_exception(*sys.exc_info()[:3])
                context['err'] = """
                An exception was thrown in API_backend:
                <pre>{}
{}</pre>
                """.format(e, '\n'.join(bt))
                res = None     
             
    else:
        query_API = SearchForm()
        resform = PickResForm()
    if request.method == 'GET' and 'Download' in request.GET:
        resform = PickResForm(request.GET)
        if resform.is_valid():
            file_id =resform.cleaned_data['ids']
            if file_id == '':
                message1 = "Download not possible without ID. Please enter aporee ID to download file"
            else:    
                download = download_item(file_id)
                #### here's where we cp -jk ####
                os.system('cp ../conv_reverb/download_files/{} ../conv_reverb/download_files/\!JUST_DOWNLOADED.mp3'.format(download)) 
                if download != None:
                    message1 = "File " + download + " downloaded to conv_reverb/conv_reverb/download_files."
                else:
                    message1 = "Sorry, download failed: file size is too large"  
            context['message1'] = message1
    
    trans_form = Transform_Input()
    
    if request.method == 'GET' and 'Transform' in request.GET:
        trans_form = Transform_Input(request.GET)
        impulse_files = os.listdir(Impulse_path)
        download_files = os.listdir(Dload_path)
        trans_aud_list = os.listdir(Trans_aud_path)
        if trans_form.is_valid():
            sound_in = trans_form.cleaned_data['downloads'] + trans_form.cleaned_data['impulses'] + trans_form.cleaned_data['trans']
            print(sound_in)
            ps_percent = trans_form.cleaned_data['ps_percent']
            mod_freq = trans_form.cleaned_data['mod_freq']
            del_time = trans_form.cleaned_data['del_time']
            dry_wet = trans_form.cleaned_data['dry_wet']
            feedback = trans_form.cleaned_data['feedback']
            for i in range(len(sound_in)):
                if sound_in[i] in impulse_files:
                    sound_in[i] = Impulse_path + '/' + sound_in[i] 
                elif sound_in[i] in download_files:
                    sound_in[i] = Dload_path + '/' + sound_in[i]
                else:
                    sound_in[i] = Trans_aud_path + '/' + sound_in[i]

                    
            print(sound_in)
            sound = Audio(sound_in[0])
            print('saving dry')
            sound.write_to_wav(dry = True)
            print('saved')
            sound.plot_fft_spectrum(dry = True)
            message2 = "Dry file saved as \"{}.wav\"".format(sound.title)
            context['message2'] = message2
            
            # execute convolution of user specified audio files
            if trans_form.cleaned_data['process'] == 'Convolution':
                
                sound1 = Audio(sound_in[1])
                conv_sound = sound.convolve(sound1)
                new_trans = Trans_aud_path + '/' + conv_sound.title + '.wav'
                conv_sound.write_to_wav()
                conv_sound.plot_fft_spectrum()
                message2 = "Transformed file saved as \"{}.wav\"".format(conv_sound.title)
                
            # execute pitch shift of user specified audio file and percent
            if trans_form.cleaned_data['process'] == 'Pitch Shift':
                
                ps_sound = sound.pitchshift(ps_percent)
                ps_sound.write_to_wav()
                ps_sound.plot_fft_spectrum()
                message2 = "Transformed file saved as \"{}.wav\"".format(ps_sound.title)
                
            # execute ring modulation of user specified audio file at desired frequency 
            if trans_form.cleaned_data['process'] == 'Ring Modulation':
                
                rm_sound = sound.ringmod(mod_freq)
                rm_sound.write_to_wav()
                rm_sound.plot_fft_spectrum()
                message2 = "Transformed file saved as \"{}.wav\"".format(rm_sound.title)
                
            # execute ring modulation of user specified audio file at desired frequency 
            if trans_form.cleaned_data['process'] == 'Delay':
                
                del_sound = sound.delay((del_time, dry_wet, feedback))
                del_sound.write_to_wav()
                del_sound.plot_fft_spectrum()
                message2 = "Transformed file saved as \"{}.wav\"".format(del_sound.title)
            

    


    # Handle different responses of res
    if res is None:
        context['result'] = None

    else:
        columns, result = res

        # Wrap in tuple if result is not already
        if result and isinstance(result[0], str):
            result = [(r,) for r in result]
         
        context['result'] = result
        context['num_results'] = len(result)
        context['columns'] = [COLUMN_NAMES.get(col, col) for col in columns]
        
    context['query_API'] = query_API
    context['resform'] = resform
    context['transform'] = trans_form
    return render(request, 'index.html', context)