def draw_fft(self): """ This method is slow. But, computers are fast. """ #start = time.clock() if self.btn_receiving_audio.text() != "": self.btn_receiving_audio.setText("FFT Data Streaming") fft_data = self.mixer.audio.fft[0] self.fft_max.append(max(fft_data)) if len(self.fft_max) > 64: self.fft_max.pop(0) max_val = max(self.fft_max) width = 256 height = 64 if self.fft_pixmap is None: self.fft_pixmap = np.full([height, width * 4], 0, dtype=np.uint8) for row in range(height - 1): self.fft_pixmap[row] = self.fft_pixmap[row + 1] if max_val > 0: for x in range(0, width * 4, 4): f = np.interp(old_div(x, 4), np.arange(len(fft_data)), fft_data)# / max_val #f = math.sqrt(math.sqrt(f)) self.fft_pixmap[height - 1][x:x + 4] = \ (hsv_float_to_rgb_uint8((old_div(x, (4.0 * width)), 1.0, f)) + (255,)) pm = self.fft_pixmap.flatten() img = QImage(pm, width, height, QImage.Format_ARGB32) self.fft_graphics_view.setPixmap(QPixmap.fromImage(img))
def draw(self, dt): if self._mixer.is_onset(): self.hue_inner = math.fmod( self.hue_inner + self.parameter('hue-step').get(), 1.0) self.luminance_offset += self.parameter('hue-step').get() start = self.hue_inner + (dt * self.parameter('speed').get()) self.wave1_offset += self.parameter('wave1-speed').get() self.wave2_offset += self.parameter('wave2-speed').get() self.luminance_offset += self.parameter('luminance-speed').get() for pixel in self.pixels: wave1 = abs( math.cos(self.wave1_offset + self.pixel_angles[pixel] * self.parameter('wave1-period').get()) * self.parameter('wave1-amplitude').get()) wave2 = abs( math.cos(self.wave2_offset + self.pixel_angles[pixel] * self.parameter('wave2-period').get()) * self.parameter('wave2-amplitude').get()) hue = self.pixel_distances[pixel] + wave1 + wave2 luminance = abs(math.fmod(self.luminance_offset + hue, 1.0)) hue = math.fmod(start + hue * self.parameter('hue-width').get(), 1.0) brightness = 0 if luminance > self.parameter( 'blackout').get() else 1.0 saturation = 0 if luminance < self.parameter( 'whiteout').get() else 1.0 self.setp(pixel, hsv_float_to_rgb_uint8((hue, saturation, brightness)))
def draw_fft(self): """ This method is slow. But, computers are fast. """ #start = time.clock() if self.btn_receiving_audio.text() != "": self.btn_receiving_audio.setText("FFT Data Streaming") fft_data = self.mixer.audio.fft[0] self.fft_max.append(max(fft_data)) if len(self.fft_max) > 64: self.fft_max.pop(0) max_val = max(self.fft_max) width = 256 height = 64 if self.fft_pixmap is None: self.fft_pixmap = np.full([height, width * 4], 0, dtype=np.uint8) for row in range(height - 1): self.fft_pixmap[row] = self.fft_pixmap[row + 1] if max_val > 0: for x in range(0, width * 4, 4): f = np.interp(old_div(x, 4), np.arange(len(fft_data)), fft_data) # / max_val #f = math.sqrt(math.sqrt(f)) self.fft_pixmap[height - 1][x:x + 4] = \ (hsv_float_to_rgb_uint8((old_div(x, (4.0 * width)), 1.0, f)) + (255,)) pm = self.fft_pixmap.flatten() img = QImage(pm, width, height, QImage.Format_ARGB32) self.fft_graphics_view.setPixmap(QPixmap.fromImage(img))
def draw(self, dt): if self._mixer.is_onset(): self.hue_inner = self.hue_inner + self.parameter('hue-step').get() start = self.hue_inner + (dt * self.parameter('speed').get()) self.wave_offset += self.parameter('wave-speed').get() for pixel in self.pixels: angle = math.fmod(1.0 + self.pixel_angles[pixel] + math.sin(self.wave_offset + self.pixel_distances[pixel] * 2 * math.pi * self.parameter('wave-hue-period').get()) * self.parameter('wave-hue-width').get(), 1.0) hue = start + (self.parameter('radius-hue-width').get() * self.pixel_distances[pixel]) + (angle * self.parameter('angle-hue-width').get()) self.setp(pixel, hsv_float_to_rgb_uint8((hue, 1.0, 1.0)))
def draw(self, dt): if self._mixer.is_onset(): self.hue_inner = self.hue_inner + self.parameter('hue-step').get() start = self.hue_inner + (dt * self.parameter('speed').get()) self.wave_offset += self.parameter('wave-speed').get() for pixel in self.pixels: angle = math.fmod( 1.0 + self.pixel_angles[pixel] + math.sin(self.wave_offset + self.pixel_distances[pixel] * 2 * math.pi * self.parameter('wave-hue-period').get()) * self.parameter('wave-hue-width').get(), 1.0) hue = start + (self.parameter('radius-hue-width').get() * self.pixel_distances[pixel]) + ( angle * self.parameter('angle-hue-width').get()) self.setp(pixel, hsv_float_to_rgb_uint8((hue, 1.0, 1.0)))
def draw(self, dt): if self._mixer.is_onset(): self.hue_inner = math.fmod(self.hue_inner + self.parameter('hue-step').get(), 1.0) self.luminance_offset += self.parameter('hue-step').get() start = self.hue_inner + (dt * self.parameter('speed').get()) self.wave1_offset += self.parameter('wave1-speed').get() self.wave2_offset += self.parameter('wave2-speed').get() self.luminance_offset += self.parameter('luminance-speed').get() for pixel in self.pixels: wave1 = abs(math.cos(self.wave1_offset + self.pixel_angles[pixel] * self.parameter('wave1-period').get()) * self.parameter('wave1-amplitude').get()) wave2 = abs(math.cos(self.wave2_offset + self.pixel_angles[pixel] * self.parameter('wave2-period').get()) * self.parameter('wave2-amplitude').get()) hue = self.pixel_distances[pixel] + wave1 + wave2 luminance = abs(math.fmod(self.luminance_offset + hue, 1.0)) hue = math.fmod(start + hue * self.parameter('hue-width').get(), 1.0) brightness = 0 if luminance > self.parameter('blackout').get() else 1.0 saturation = 0 if luminance < self.parameter('whiteout').get() else 1.0 self.setp(pixel, hsv_float_to_rgb_uint8((hue, saturation, brightness)))
def draw(self, dt): delta = dt * self.speed d3 = self.color_speed * dt posterization = self.parameter('resolution').get() setp = self.setp for pixel, location in self.pixel_locations: hue = (1.0 + snoise3(self.scale * (location[0] + delta), self.scale * (location[1] + delta), d3, 1, 0.5, 0.5)) / 2.0 hue = self.hue_min + ((math.floor(hue * posterization) / posterization) * (self.hue_max - self.hue_min)) brightness = (1.0 + snoise3(self.luminance_scale * (location[0] + delta), self.luminance_scale * (location[1] + delta), d3, 1, 0.5, 0.5)) / 2.0 if brightness > self.parameter('whiteout').get(): saturation = (brightness - self.parameter('whiteout').get()) / (1 - self.parameter('whiteout').get()) * 2 if saturation > 1.0: saturation = 1.0 saturation = math.floor(saturation * posterization) / posterization brightness = 1.0 else: saturation = 1.0 brightness = 0 if brightness < self.parameter('blackout').get() else 1.0 setp(pixel, hsv_float_to_rgb_uint8((hue, saturation, brightness)))