def testConstructor(self): for synth in [ syn.Synthesizer(SAMPLING_RATE, amplitude=self.amplitude), syn.Synthesizer(SAMPLING_RATE, frequency=self.frequency), syn.Synthesizer(SAMPLING_RATE, amplitude=self.amplitude, initialPhaseType=syn.Phase.RANDOM), syn.Synthesizer(SAMPLING_RATE, frequency=self.frequency, initialPhaseType=syn.Phase.RANDOM) ]: length = len(synth.getStream()) # Check only lengths self.assertEqual(length, FRAME_LENGTH)
def testInitialPhase(self): length = FRAME_LENGTH sineNum = length / 2 + 1 fundFreq = 0.5 amplitude, frequency = self.generateAmpAndFreq(length, sineNum, fundFreq) ampMin = ampMax = [] for phase in syn.Phase: synth = syn.Synthesizer(length, initialPhaseType=phase, amplitude=amplitude, frequency=frequency) signal = synth.getStream() ampMin = np.append(ampMin, np.min(signal)) ampMax = np.append(ampMax, np.max(signal)) # Plot for debug # plt.subplot(len(syn.Phase), 1, phase.value) # plt.plot(signal) # plt.show() # Schroeder phase is the most effective. bestPhase = syn.Phase.SCHROEDER worstPhase = syn.Phase.ZERO # Plus one is to adapt Enum index. self.assertEqual(np.argmin(ampMax) + 1, bestPhase.value) self.assertEqual(np.argmax(ampMin) + 1, bestPhase.value) self.assertEqual(np.argmin(ampMin) + 1, worstPhase.value) self.assertEqual(np.argmax(ampMax) + 1, worstPhase.value)
def testFrequencyLength(self): sineNum = self.frequency.shape[1] bitLongFreq = np.r_[self.frequency, np.ones((2, sineNum), np.float)] synth = syn.Synthesizer(FRAME_LENGTH, amplitude=self.amplitude) synth.setFrequency(bitLongFreq) lSgn = synth.getStream()[:-1] # Move stream position. synth.setAmplitude(self.amplitude[:-1]) # Set short amplitude. synth.setFrequency(self.frequency) # Should reset position here. rSgn = synth.getStream() self.assertEqual(lSgn.shape, rSgn.shape) self.assertEqual(np.sum(lSgn), np.sum(rSgn))
def testAmplitudeLength(self): sineNum = self.frequency.shape[1] shortLen = [ np.ones((FRAME_LENGTH - 1, sineNum), np.float), np.ones((FRAME_LENGTH + 0, sineNum), np.float), np.ones((FRAME_LENGTH + 1, sineNum), np.float) ] longLen = [ np.ones((FRAME_LENGTH * 2 - 1, sineNum), np.float), np.ones((FRAME_LENGTH * 2 + 0, sineNum), np.float), np.ones((FRAME_LENGTH * 2 + 1, sineNum), np.float) ] for lhs, rhs in zip(shortLen, longLen): # Check checksums of only rear signal. begin = -(FRAME_LENGTH - 1) synth = syn.Synthesizer(FRAME_LENGTH, frequency=self.frequency) synth.setAmplitude(lhs) lhSum = np.sum(synth.getStream()[begin:]) synth = syn.Synthesizer(FRAME_LENGTH, frequency=self.frequency) synth.setAmplitude(rhs) rhSum = np.sum(synth.getStream()[begin:]) self.assertEqual(lhSum, rhSum)
def __init__(self, instrument): """Construct a synthesizer object for Instrument instance instrument. Instrument object is used to compute frequency components based on a given fundamental frequency.""" self.instrument = instrument # Synthesizer stuff self.player = synth.Player() self.player.open_stream() self.writer = synth.Writer() self.synth = synth.Synthesizer() self.synth.waveform = 'sine'
def __init__(self, parent): super().__init__("Progress") self.main_window = parent buttons_layout = QtWidgets.QHBoxLayout() self.b0 = QtWidgets.QPushButton("New test", self) self.b0.clicked.connect(self.new_test) self.b1 = QtWidgets.QPushButton("Start", self) self.b1.setDisabled(True) self.b1.clicked.connect(self.start_test) self.b2 = QtWidgets.QPushButton("Testing", self) self.b2.setDisabled(True) self.b5 = QtWidgets.QPushButton("Results", self) self.b5.setDisabled(True) buttons_layout.addWidget(self.b0) buttons_layout.addWidget(self.b1) buttons_layout.addWidget(self.b2) buttons_layout.addWidget(self.b5) self.setLayout(buttons_layout) self.synth = synth.Synthesizer("resources")
import numpy as np import synthesizer as synth import model from model import timbre from model.instruments import HarmonicInst, AharmInst player = synth.Player() player.open_stream() writer = synth.Writer() sy = synth.Synthesizer() f01 = 220. f02 = 440. H1 = HarmonicInst(f01) H2 = HarmonicInst(f02) A1 = AharmInst(f01) A2 = AharmInst(f02) print(np.concatenate((A1.F, A2.F))) print(np.concatenate((H1.F, H2.F))) harmwave = sy.generate_chord(list(np.concatenate((H1.F, H2.F))), 3.0)
import synthesizer as synth s = synth.Synthesizer("resources") s.play_sound("string", 0)