Spaces:
Running
Running
File size: 4,827 Bytes
1d8403e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | # ==================================================================================================
# DEEPFAKE AUDIO - vocoder/display.py (Console Monitoring Engine)
# ==================================================================================================
#
# π DESCRIPTION
# This module provides styling and progress visualization for the vocoder
# training and generation processes. It includes progress bars, formatted
# tables, and Matplotlib routines for saving attention maps and spectrograms
# during model checkpoints.
#
# π€ AUTHORS
# - Amey Thakur (https://github.com/Amey-Thakur)
# - Mega Satish (https://github.com/msatmod)
#
# π€π» CREDITS
# Original Real-Time Voice Cloning methodology by CorentinJ
# Repository: https://github.com/CorentinJ/Real-Time-Voice-Cloning
#
# π PROJECT LINKS
# Repository: https://github.com/Amey-Thakur/DEEPFAKE-AUDIO
# Video Demo: https://youtu.be/i3wnBcbHDbs
# Research: https://github.com/Amey-Thakur/DEEPFAKE-AUDIO/blob/main/DEEPFAKE-AUDIO.ipynb
#
# π LICENSE
# Released under the MIT License
# Release Date: 2021-02-06
# ==================================================================================================
import time
import numpy as np
import sys
def progbar(i, n, size=16):
"""Diagnostic UI: Renders a character-based progress bar for console feedback."""
done = (i * size) // n
bar = ''
for i in range(size):
bar += 'β' if i <= done else 'β'
return bar
def stream(message):
"""Dynamic Output: Overwrites the current console line for live status updates."""
try:
sys.stdout.write("\r{%s}" % message)
except:
# Fallback: Cleanse non-ASCII characters to prevent encoding errors
message = ''.join(i for i in message if ord(i)<128)
sys.stdout.write("\r{%s}" % message)
def simple_table(item_tuples):
"""Information Grid: Prints a structured ASCII table for model parameters or stats."""
border_pattern = '+---------------------------------------'
whitespace = ' '
headings, cells, = [], []
for item in item_tuples:
heading, cell = str(item[0]), str(item[1])
pad_head = True if len(heading) < len(cell) else False
pad = whitespace[:abs(len(heading) - len(cell))]
pad_left = pad[:len(pad)//2]
pad_right = pad[len(pad)//2:]
if pad_head:
heading = pad_left + heading + pad_right
else:
cell = pad_left + cell + pad_right
headings += [heading]
cells += [cell]
border, head, body = '', '', ''
for i in range(len(item_tuples)):
temp_head = f'| {headings[i]} '
temp_body = f'| {cells[i]} '
border += border_pattern[:len(temp_head)]
head += temp_head
body += temp_body
if i == len(item_tuples) - 1:
head += '|'
body += '|'
border += '+'
print(f"{border}\n{head}\n{border}\n{body}\n{border}\n ")
def time_since(started):
"""Temporal Tracker: Formats elapsed time into a human-readable string."""
elapsed = time.time() - started
m = int(elapsed // 60)
s = int(elapsed % 60)
if m >= 60:
h = int(m // 60)
m = m % 60
return f'{h}h {m}m {s}s'
else:
return f'{m}m {s}s'
def save_attention(attn, path):
"""Attentive Visualizer: Generates and saves a PNG representation of attention maps."""
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(12, 6))
plt.imshow(attn.T, interpolation='nearest', aspect='auto')
fig.savefig(f'{path}.png', bbox_inches='tight')
plt.close(fig)
def save_spectrogram(M, path, length=None):
"""Signal Visualizer: Persists Mel-Spectrogram snapshots to the filesystem."""
import matplotlib.pyplot as plt
M = np.flip(M, axis=0)
if length: M = M[:, :length]
fig = plt.figure(figsize=(12, 6))
plt.imshow(M, interpolation='nearest', aspect='auto')
fig.savefig(f'{path}.png', bbox_inches='tight')
plt.close(fig)
def plot(array):
"""Signal Debugger: Generates a large-scale plot for 1D signal exploration."""
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(30, 5))
ax = fig.add_subplot(111)
ax.xaxis.label.set_color('grey')
ax.yaxis.label.set_color('grey')
ax.xaxis.label.set_fontsize(23)
ax.yaxis.label.set_fontsize(23)
ax.tick_params(axis='x', colors='grey', labelsize=23)
ax.tick_params(axis='y', colors='grey', labelsize=23)
plt.plot(array)
def plot_spec(M):
"""Interactive Visualizer: Displays a spectrogram using standard pyplot routing."""
import matplotlib.pyplot as plt
M = np.flip(M, axis=0)
plt.figure(figsize=(18,4))
plt.imshow(M, interpolation='nearest', aspect='auto')
plt.show()
|