Beispiel #1
0
 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)
Beispiel #2
0
    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)
Beispiel #3
0
 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))
Beispiel #4
0
 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'
Beispiel #6
0
    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")
Beispiel #7
0
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)