import numpy as np import sndobj import simpl float_precision = 2 class TestSimplSndObj: pass # def test_ifgram(self): # "Compare sndobj.IFGram with simplsndobj.IFGram" # frame_size = 2048 # hop_size = 512 # num_frames = 4 # num_samples = frame_size + ((num_frames - 1) * hop_size) # audio_in_data = read(self.input_file) # audio_in = simpl.asarray(audio_in_data[1]) / 32768.0 # audio_in = audio_in[0:num_samples] # frame = simpl.zeros(frame_size) # sndobj_input = sndobj.SndObj() # simpl_input = pysndobj.SndObj() # sndobj_input.SetVectorSize(frame_size) # simpl_input.SetVectorSize(frame_size) # sndobj_window = sndobj.HammingTable(frame_size, 0.5) # simpl_window = pysndobj.HammingTable(frame_size, 0.5) # sndobj_ifgram = sndobj.IFGram(sndobj_window, sndobj_input, 1, frame_size, hop_size) # simpl_ifgram = pysndobj.IFGram(simpl_window, simpl_input, 1, frame_size, hop_size) # i = 0 # while (i + frame_size) <= num_samples: # frame = audio_in[i:i+frame_size] # sndobj_input.PushIn(frame) # simpl_input.PushIn(frame) # sndobj_ifgram.DoProcess() # simpl_ifgram.DoProcess() # for j in range(frame_size): # self.assertAlmostEquals(sndobj_ifgram.Output(j), simpl_ifgram.Output(j), # places = FLOAT_PRECISION) # i += hop_size # def test_sinanal(self): # "Compare sndobj.SinAnal with simplsndobj.SinAnal" # frame_size = 2048 # hop_size = 512 # max_tracks = 20 # num_frames = 4 # num_samples = frame_size + ((num_frames - 1) * hop_size) # audio_in_data = read(self.input_file) # audio_in = simpl.asarray(audio_in_data[1]) / 32768.0 # audio_in = audio_in[0:num_samples] # frame = simpl.zeros(frame_size) # sndobj_input = sndobj.SndObj() # simpl_input = pysndobj.SndObj() # sndobj_input.SetVectorSize(frame_size) # simpl_input.SetVectorSize(frame_size) # sndobj_window = sndobj.HammingTable(frame_size, 0.5) # simpl_window = pysndobj.HammingTable(frame_size, 0.5) # sndobj_ifgram = sndobj.IFGram(sndobj_window, sndobj_input, 1, frame_size, hop_size) # simpl_ifgram = pysndobj.IFGram(simpl_window, simpl_input, 1, frame_size, hop_size) # sndobj_sinmod = sndobj.SinAnal(sndobj_ifgram, 0.003, max_tracks, 1, 3) # simpl_sinmod = pysndobj.SinAnal(simpl_ifgram, 0.003, max_tracks, 1, 3) # i = 0 # while (i + frame_size) <= num_samples: # frame = audio_in[i:i+frame_size] # sndobj_input.PushIn(frame) # simpl_input.PushIn(frame) # sndobj_ifgram.DoProcess() # simpl_ifgram.DoProcess() # sndobj_sinmod.DoProcess() # simpl_sinmod.DoProcess() # for j in range(max_tracks * 3): # self.assertAlmostEquals(sndobj_sinmod.Output(j), simpl_sinmod.Output(j), # places = FLOAT_PRECISION) # i += hop_size # def test_adsyn_doprocess(self): # "Compare sndobj.AdSyn with simplsndobj.AdSyn" # frame_size = 2048 # hop_size = 512 # max_tracks = 20 # num_frames = 4 # num_samples = frame_size + ((num_frames - 1) * hop_size) # audio_in_data = read(self.input_file) # audio_in = simpl.asarray(audio_in_data[1]) / 32768.0 # audio_in = audio_in[0:num_samples] # frame = simpl.zeros(frame_size) # sndobj_frame_out = simpl.zeros(hop_size) # simpl_frame_out = simpl.zeros(hop_size) # sndobj_audio_out = simpl.array([]) # simpl_audio_out = simpl.array([]) # sndobj_input = sndobj.SndObj() # simpl_input = pysndobj.SndObj() # sndobj_input.SetVectorSize(frame_size) # simpl_input.SetVectorSize(frame_size) # sndobj_window = sndobj.HammingTable(frame_size, 0.5) # simpl_window = pysndobj.HammingTable(frame_size, 0.5) # sndobj_ifgram = sndobj.IFGram(sndobj_window, sndobj_input, 1, frame_size, hop_size) # simpl_ifgram = pysndobj.IFGram(simpl_window, simpl_input, 1, frame_size, hop_size) # sndobj_sinmod = sndobj.SinAnal(sndobj_ifgram, 0.003, max_tracks, 1, 3) # simpl_sinmod = pysndobj.SinAnal(simpl_ifgram, 0.003, max_tracks, 1, 3) # sndobj_table = sndobj.HarmTable(10000, 1, 1, 0.25) # simpl_table = pysndobj.HarmTable(10000, 1, 1, 0.25) # sndobj_synth = sndobj.AdSyn(sndobj_sinmod, max_tracks, sndobj_table, 1, 1, hop_size) # simpl_synth = pysndobj.AdSyn(simpl_sinmod, max_tracks, simpl_table, 1, 1, hop_size) # i = 0 # while (i + frame_size) <= num_samples: # frame = audio_in[i:i+frame_size] # sndobj_input.PushIn(frame) # simpl_input.PushIn(frame) # sndobj_ifgram.DoProcess() # simpl_ifgram.DoProcess() # sndobj_sinmod.DoProcess() # simpl_sinmod.DoProcess() # sndobj_synth.DoProcess() # simpl_synth.DoProcess() # sndobj_synth.PopOut(sndobj_frame_out) # simpl_synth.PopOut(simpl_frame_out) # sndobj_audio_out = np.hstack((sndobj_audio_out, sndobj_frame_out)) # simpl_audio_out = np.hstack((simpl_audio_out, simpl_frame_out)) # i += hop_size # self.assertEqual(sndobj_audio_out.size, simpl_audio_out.size) # for i in range(sndobj_audio_out.size): # self.assertAlmostEquals(sndobj_audio_out[i], simpl_audio_out[i], # places = FLOAT_PRECISION) # def test_sinsyn_doprocess(self): # "Compare sndobj.SinSyn with pysndobj.SinSyn" # frame_size = 2048 # hop_size = 512 # max_tracks = 20 # num_frames = 4 # num_samples = frame_size + ((num_frames - 1) * hop_size) # audio_in_data = read(self.input_file) # audio_in = simpl.asarray(audio_in_data[1]) / 32768.0 # audio_in = audio_in[0:num_samples] # frame = simpl.zeros(frame_size) # sndobj_frame_out = simpl.zeros(hop_size) # simpl_frame_out = simpl.zeros(hop_size) # sndobj_audio_out = simpl.array([]) # simpl_audio_out = simpl.array([]) # sndobj_input = sndobj.SndObj() # simpl_input = pysndobj.SndObj() # sndobj_input.SetVectorSize(frame_size) # simpl_input.SetVectorSize(frame_size) # sndobj_window = sndobj.HammingTable(frame_size, 0.5) # simpl_window = pysndobj.HammingTable(frame_size, 0.5) # sndobj_ifgram = sndobj.IFGram(sndobj_window, sndobj_input, 1, frame_size, hop_size) # simpl_ifgram = pysndobj.IFGram(simpl_window, simpl_input, 1, frame_size, hop_size) # sndobj_sinmod = sndobj.SinAnal(sndobj_ifgram, 0.003, max_tracks, 1, 3) # simpl_sinmod = pysndobj.SinAnal(simpl_ifgram, 0.003, max_tracks, 1, 3) # sndobj_table = sndobj.HarmTable(10000, 1, 1, 0.25) # simpl_table = pysndobj.HarmTable(10000, 1, 1, 0.25) # sndobj_synth = sndobj.SinSyn(sndobj_sinmod, max_tracks, sndobj_table, 1, hop_size) # simpl_synth = pysndobj.SinSyn(simpl_sinmod, max_tracks, simpl_table, 1, hop_size) # i = 0 # while (i + frame_size) <= num_samples: # frame = audio_in[i:i+frame_size] # sndobj_input.PushIn(frame) # simpl_input.PushIn(frame) # sndobj_ifgram.DoProcess() # simpl_ifgram.DoProcess() # sndobj_sinmod.DoProcess() # simpl_sinmod.DoProcess() # sndobj_synth.DoProcess() # simpl_synth.DoProcess() # sndobj_synth.PopOut(sndobj_frame_out) # simpl_synth.PopOut(simpl_frame_out) # sndobj_audio_out = np.hstack((sndobj_audio_out, sndobj_frame_out)) # simpl_audio_out = np.hstack((simpl_audio_out, simpl_frame_out)) # i += hop_size # self.assertEqual(sndobj_audio_out.size, simpl_audio_out.size) # for i in range(sndobj_audio_out.size): # self.assertAlmostEquals(sndobj_audio_out[i], simpl_audio_out[i], # places = FLOAT_PRECISION) # def test_partial_tracking(self): # "Compare pysndobj Partials with SndObj tracks" # frame_size = 2048 # hop_size = 512 # num_frames = 4 # max_tracks = 20 # max_peaks = 20 # num_samples = frame_size + ((num_frames - 1) * hop_size) # audio_in_data = read(self.input_file) # audio_in = simpl.asarray(audio_in_data[1]) / 32768.0 # audio_in = audio_in[0:num_samples] # frame = simpl.zeros(frame_size) # sndobj_input = sndobj.SndObj() # sndobj_input.SetVectorSize(frame_size) # sndobj_window = sndobj.HammingTable(frame_size, 0.5) # sndobj_ifgram = sndobj.IFGram(sndobj_window, sndobj_input, 1, frame_size, hop_size) # sndobj_sinmod = pysndobj.SinAnal(sndobj_ifgram, 0.003, max_tracks, 1, 3) # pd = simpl.SndObjPeakDetection() # pd.max_peaks = max_peaks # pt = simpl.SndObjPartialTracking() # pt.max_partials = max_tracks # i = 0 # while (i + frame_size) <= num_samples: # frame = audio_in[i:i+frame_size] # sndobj_input.PushIn(frame) # sndobj_ifgram.DoProcess() # sndobj_sinmod.DoProcess() # frame = audio_in[i:i+frame_size] # peaks = pd.find_peaks(frame)[0] # partials = pt.update_partials(peaks, i/hop_size) # num_sndobj_partials = sndobj_sinmod.GetTracks() # num_simpl_partials = len(partials) # self.assertEquals(num_sndobj_partials, num_simpl_partials) # for j in range(num_simpl_partials): # self.assertAlmostEquals(partials[j].amplitude, sndobj_sinmod.Output(j*3), # places=FLOAT_PRECISION) # self.assertAlmostEquals(partials[j].frequency, sndobj_sinmod.Output((j*3)+1), # places=FLOAT_PRECISION) # self.assertAlmostEquals(partials[j].phase, sndobj_sinmod.Output((j*3)+2), # places=FLOAT_PRECISION) # i += hop_size # def test_synthesis(self): # "Compare pysndobj synthesised audio with SndObj synthesised audio" # frame_size = 2048 # hop_size = 512 # num_frames = 4 # max_tracks = 20 # max_peaks = 20 # num_samples = frame_size + ((num_frames - 1) * hop_size) # audio_in_data = read(self.input_file) # audio_in = simpl.asarray(audio_in_data[1]) / 32768.0 # audio_in = audio_in[0:num_samples] # frame = simpl.zeros(frame_size) # sndobj_frame_out = simpl.zeros(hop_size) # sndobj_audio_out = simpl.array([]) # sndobj_input = sndobj.SndObj() # sndobj_input.SetVectorSize(frame_size) # sndobj_window = sndobj.HammingTable(frame_size, 0.5) # sndobj_ifgram = sndobj.IFGram(sndobj_window, sndobj_input, 1, frame_size, hop_size) # sndobj_sinmod = pysndobj.SinAnal(sndobj_ifgram, 0.003, max_tracks, 1, 3) # sndobj_table = sndobj.HarmTable(10000, 1, 1, 0.25) # sndobj_synth = sndobj.AdSyn(sndobj_sinmod, max_tracks, sndobj_table, 1, 1, hop_size) # i = 0 # while (i + frame_size) <= num_samples: # frame = audio_in[i:i+frame_size] # sndobj_input.PushIn(frame) # sndobj_ifgram.DoProcess() # sndobj_sinmod.DoProcess() # sndobj_synth.DoProcess() # sndobj_synth.PopOut(sndobj_frame_out) # sndobj_audio_out = np.hstack((sndobj_audio_out, sndobj_frame_out)) # i += hop_size # pd = simpl.SndObjPeakDetection() # pd.max_peaks = max_peaks # pt = simpl.SndObjPartialTracking() # pt.max_partials = max_tracks # peaks = pd.find_peaks(audio_in) # partials = pt.find_partials(peaks) # synth = simpl.SndObjSynthesis() # simpl_audio_out = synth.synth(partials) # self.assertEquals(sndobj_audio_out.size, simpl_audio_out.size) # for i in range(simpl_audio_out.size): # self.assertAlmostEquals(sndobj_audio_out[i], simpl_audio_out[i], # places = FLOAT_PRECISION)