Hecheng0625's picture
Upload 61 files
7ee3434 verified
<!--
Copyright (c) 2023 Amphion.
This source code is licensed under the MIT license found in the
LICENSE file in the root directory of this source tree。
-->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=1200px, initial-scale=1.0">
<title>SingVisio: Visual Analytics of Diffusion Model for Singing Voice Conversion</title>
<script>
const baseLink = 'https://dsvc.openmmlab.org.cn'; // end without '/'
</script>
<!-- Load Tailwind CSS and D3.js -->
<script src="./resources/tailwind.js"></script>
<script src="./resources/d3.v4.min.js"></script>
<script src="./resources/htl.min.js"></script>
<script src="./resources/d3-scale-chromatic.v1.min.js"></script>
<script src="./resources/d3-contour.v1.min.js"></script>
<!-- Load the Guide driver -->
<script src="./resources/driver.js.iife.min.js"></script>
<link rel="stylesheet" href="./resources/driver.min.css">
<!-- Config Tailwind CSS -->
<script type="module">
import cfg from "./tailwind.config.js";
tailwind.config = cfg;
</script>
<style type="text/tailwindcss">
@layer components {
.btn-small {
@apply px-3 py-2 text-xs font-medium text-center text-gray-900 focus:outline-none bg-white rounded-lg border border-gray-200 hover:bg-gray-100 hover:text-blue-700 focus:z-10 focus:ring-4 focus:ring-gray-200 dark:focus:ring-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:border-gray-600 dark:hover:text-white dark:hover:bg-gray-700
}
.btn {
@apply text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 mr-2 mb-2 dark:bg-blue-600 dark:hover:bg-blue-700 focus:outline-none dark:focus:ring-blue-800;
}
.btn-sec {
@apply py-2.5 px-5 mr-2 mb-2 text-sm font-medium text-gray-900 focus:outline-none bg-white rounded-lg border border-gray-200 hover:bg-gray-100 hover:text-blue-700 focus:z-10 focus:ring-4 focus:ring-gray-200 dark:focus:ring-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:border-gray-600 dark:hover:text-white dark:hover:bg-gray-700
}
.select-select {
@apply my-0 py-2 px-1 bg-gray-50 border border-gray-300 text-gray-900 text-xs rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500
}
.select-label {
@apply block text-sm font-medium text-gray-900 dark:text-white;
}
.card {
@apply p-6 bg-white border border-gray-200 rounded-lg dark:bg-gray-800 dark:border-gray-700
}
.card-title {
@apply mb-2 text-base font-bold tracking-tight text-gray-900 dark:text-white
}
.timeline-point {
@apply absolute w-3 h-3 bg-gray-200 rounded-full mt-1.5 -left-1.5 border border-white dark:border-gray-900 dark:bg-gray-700
}
.timeline-title {
@apply text-lg font-semibold text-gray-900 dark:text-white
}
.timeline-subtitle {
@apply text-base font-normal text-gray-500 dark:text-gray-400
}
.small-input {
@apply block w-full p-2 text-gray-900 border border-gray-300 rounded-lg bg-gray-50 sm:text-xs focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500;
}
.checkbox {
@apply w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded focus:ring-blue-500 dark:focus:ring-blue-600 dark:ring-offset-gray-800 focus:ring-2 dark:bg-gray-700 dark:border-gray-600
}
.dropdown_button_text {
@apply w-full text-xs font-normal text-gray-900 dark:text-white text-left
}
.dropdown_button {
@apply btn-sec text-xs flex items-center w-full px-2 py-2 my-0 disabled:cursor-not-allowed disabled:opacity-50
}
}
</style>
<style>
input.step-axis {
outline: none;
-webkit-appearance: none;
background: #0000002b;
height: 8px;
}
input.step-axis::-webkit-slider-thumb {
-webkit-appearance: none;
position: relative;
width: 18px;
height: 18px;
background: url("./img/syllable.png") no-repeat;
background-size: 18px;
border-radius: 50%;
cursor: pointer;
}
audio {
outline: none;
height: 34px;
}
/* make a input with two handles */
.inputs {
display: block;
width: 100%;
height: 10px;
/* background-color: azure; */
}
.inputs input {
position: absolute;
}
.inputs input::-webkit-slider-thumb {
pointer-events: all;
z-index: 2;
}
.inputs input::-webkit-slider-runnable-track {
pointer-events: none;
z-index: 1;
}
</style>
</head>
<body class="bg-gray-100 dark:bg-gray-900">
<div id="alert"
class="hidden fixed top-0 right-0 left-0 z-50 w-full h-[100vh] bg-black bg-opacity-50 justify-center items-center overflow-y-hidden">
<div class="card flex flex-col min-w-[400px] max-w-2xl max-h-[80vh] p-0 overflow-hidden">
<!-- Modal header -->
<div class="flex items-center justify-between p-4 md:p-5 border-b rounded-t dark:border-gray-600">
<h3 id="alert_title" class="text-xl font-semibold text-gray-900 dark:text-white">
Title
</h3>
<button id="close_alert" type="button"
class="text-gray-400 bg-transparent hover:bg-gray-200 hover:text-gray-900 rounded-lg text-sm w-8 h-8 ms-auto inline-flex justify-center items-center dark:hover:bg-gray-600 dark:hover:text-white">
<svg class="w-3 h-3" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="none"
viewBox="0 0 14 14">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6" />
</svg>
<span class="sr-only">Close modal</span>
</button>
</div>
<!-- Modal body -->
<div id="alert_text"
class="p-4 md:p-5 space-y-4 text-base leading-relaxed text-gray-700 dark:text-gray-200 overflow-y-auto">
Text
</div>
<!-- Modal footer -->
<div class="flex items-center p-4 md:p-5 border-t border-gray-200 rounded-b dark:border-gray-600">
<button id="finish_alert" type="button"
class="ml-auto text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800">OK</button>
</div>
</div>
</div>
<div class="bg-white dark:bg-gray-800 w-full py-4 px-6 border border-b border-gray-200 dark:border-gray-600">
<div class="mx-auto max-w-[1490px] grid grid-cols-6 align-center items-center">
<!-- <img class="dark:hidden" src="img/cuhksz_logo.png" alt="cuhksz logo" class="h-[40px]">
<img class="hidden dark:block" src="img/cuhksz_logo_white.png" alt="cuhksz logo" class="h-[40px]"> -->
<span class="col-span-1"></span>
<span id="title" class="col-span-4 mx-auto font-[800] text-[20px] dark:text-white">SingVisio: Visual
Analytics of Diffusion Model for Singing Voice Conversion</span>
<!-- <span class="ml-auto mr-0 text-sm dark:text-white">Team: <i>Human Language Technology Lab,
CUHK-Shenzhen</i></span> -->
<div class="flex">
<button class="btn-small ml-auto" id="mode_change">Switch to _</button>
<button class="btn-small ml-2" id="help">Help?</button>
</div>
</div>
</div>
<div class="max-w-[1500px] m-auto">
<div class="flex flex-row items-start gap-0.5 py-3 p-1">
<div class="w-[300px] flex flex-col flex-none">
<div id="performance" class="card p-2 mb-2 flex flex-col flex-none relative">
<button class="absolute right-1 top-1 btn-small px-1.5 py-0.5 ml-auto rounded-full"
id="metrics_help">?</button>
<div class="flex flex-row">
<div id="histogram" class="flex-none"></div>
<div id="histogram2" class="flex-none"></div>
</div>
<span class="text-[12px] mx-auto dark:text-white">Metrics</span>
</div>
<div id="touch_map" class="card p-2 relative">
<button class="absolute right-1 top-1 btn-small px-1.5 py-0.5 ml-auto rounded-full"
id="projection_help">?</button>
<div class="flex mb-1 align-center items-center space-between dark:text-white">
<div class="ml-1 text-sm">Step: <span id="current_step_display_number"></span></div>
<div class="ml-auto flex mr-2">
<button class="btn-sec h-9 w-9 p-2.5 mb-0" id="reset_map">
<svg class="w-3.5 h-3.5" aria-hidden="true" xmlns="http://www.w3.org/2000/svg"
fill="none" viewBox="0 0 18 20">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"
stroke-width="2"
d="M16 1v5h-5M2 19v-5h5m10-4a8 8 0 0 1-14.947 3.97M1 10a8 8 0 0 1 14.947-3.97" />
</svg>
</button>
</div>
</div>
<div id="dataviz_axisZoom" class="flex flex-wrap border bg-white dark:bg-gray-800 relative"></div>
</div>
</div>
<div class="w-full">
<div id="step_preview" class="flex min-w-[500px] w-full bg-white dark:bg-gray-800 p-2 card mb-2">
<div class="mx-auto" id="preview_container">
</div>
<div class="mx-auto" id="preview_container2">
</div>
<div class="flex flex-col">
<button class="btn-sec" id="refreshpreview">
<svg class="w-4 h-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="none"
viewBox="0 0 18 20">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"
stroke-width="2"
d="M16 1v5h-5M2 19v-5h5m10-4a8 8 0 0 1-14.947 3.97M1 10a8 8 0 0 1 14.947-3.97" />
</svg>
</button>
</div>
</div>
<div id="mel_card_container" class="grid grid-cols-3 min-w-[915px] w-full gap-1 justify-items-center">
</div>
<div id="tips">
</div>
<div id="tooltip" role="tooltip"
class="invisible absolute z-10 inline-block px-3 py-2 text-sm font-medium text-white bg-gray-900 rounded-lg shadow-sm opacity-[0.9] dark:bg-gray-700">
Tooltip content
</div>
</div>
<div class="shrink-0 w-[180px]">
<div class="card py-2 px-3 relative">
<button class="absolute right-1 top-1 btn-small px-1.5 py-0.5 ml-auto rounded-full"
id="control_help">?</button>
<div class="flex items-center">
<h5 class="card-title my-1 text-lg">Control Panel</h5>
</div>
<div class="flex flex-col w-full rounded-lg gap-0.5" id="control_panel">
<div>
<label for="mode_id" class="select-label">Display Mode</label>
<select id="mode_id" class="select-select"></select>
</div>
<div>
<label for="sourcesinger_id" class="select-label">Source Singer</label>
<button id="sourcesinger_id" class="dropdown_button" type="button">
<span class="dropdown_button_text" id="sourcesinger_id_text">Choose Singer</span> <svg
class="w-2.5 h-2.5" aria-hidden="true" xmlns="http://www.w3.org/2000/svg"
fill="none" viewBox="0 0 10 6">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"
stroke-width="2" d="m1 1 4 4 4-4" />
</svg>
</button>
<!-- Dropdown menu -->
<div id="sourcesinger_id_dropdown"
class="absolute z-10 hidden bg-white divide-y divide-gray-100 rounded-lg shadow w-44 dark:bg-gray-700">
<ul class="py-2 text-sm text-gray-700 dark:text-gray-200">
</ul>
</div>
</div>
<div>
<label for="song_id" class="select-label">Song</label>
<button id="song_id" class="dropdown_button" type="button">
<span class="dropdown_button_text" id="song_id_text">Choose Song</span> <svg
class="w-2.5 h-2.5" aria-hidden="true" xmlns="http://www.w3.org/2000/svg"
fill="none" viewBox="0 0 10 6">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"
stroke-width="2" d="m1 1 4 4 4-4" />
</svg>
</button>
<!-- Dropdown menu -->
<div id="song_id_dropdown"
class="absolute z-10 hidden bg-white divide-y divide-gray-100 rounded-lg shadow w-44 dark:bg-gray-700">
<ul class="py-2 text-sm text-gray-700 dark:text-gray-200">
</ul>
</div>
</div>
<div>
<label for="target_id" class="select-label">Target Singer</label>
<button id="target_id" class="dropdown_button" type="button">
<span class="dropdown_button_text" id="target_id_text">Target Singer</span> <svg
class="w-2.5 h-2.5" aria-hidden="true" xmlns="http://www.w3.org/2000/svg"
fill="none" viewBox="0 0 10 6">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"
stroke-width="2" d="m1 1 4 4 4-4" />
</svg>
</button>
<!-- Dropdown menu -->
<div id="target_id_dropdown"
class="absolute z-10 hidden bg-white divide-y divide-gray-100 rounded-lg shadow w-44 dark:bg-gray-700">
<ul class="py-2 text-sm text-gray-700 dark:text-gray-200">
</ul>
</div>
</div>
<div class="relative">
<label for="pic_id" class="select-label">Projection Embedding</label>
<select id="pic_id" class="select-select"></select>
</div>
<div class="relative" id="components">
<label for="components" class="select-label">Components</label>
<div class="flex flex-col gap-0.5">
<div class="flex items-center">
<input id="components_pitch" type="checkbox" checked class="checkbox">
<label for="components_pitch"
class="ml-1 text-[0.775rem] font-normal text-gray-900 dark:text-gray-300">F0
contour</label>
</div>
<div class="flex items-start">
<input id="components_frequncy" type="checkbox" checked class="checkbox">
<div class="flex flex-col gap-0.5 grow">
<label for="components_frequncy"
class="ml-1 mb-1 text-[0.775rem] font-normal text-gray-900 dark:text-gray-300">Frequency</label>
<div class="flex inputs w-full">
<input id="inputs_min" type="range"
class="h-2 bg-gray-200 rounded-lg appearance-none cursor-pointer dark:bg-gray-700"
value="0" min="0">
<input id="inputs_max" type="range"
class="h-2 bg-gray-200 rounded-lg appearance-none cursor-pointer dark:bg-gray-700"
value="100" max="100">
</div>
<div class="flex w-full">
<span id="inputs_left" class="ml-1 mr-auto text-[0.7rem] font-normal text-gray-900 dark:text-white">0</span>
<span id="inputs_right" class="mr-2 ml-auto text-[0.7rem] font-normal text-gray-900 dark:text-white">100</span>
</div>
</div>
</div>
<div class="flex items-start">
<input id="sampling_steps" type="checkbox" class="checkbox">
<div class="flex flex-col grow">
<label for="sampling_steps"
class="ml-1 text-[0.775rem] font-normal text-gray-900 dark:text-gray-300">Sampling
steps</label>
<div class="flex flex-row h-[32px]">
<span class="my-auto mx-1 text-[0.775rem] font-normal text-gray-900 dark:text-white">Step count:</span>
<input type="text"
class="small-input flex-none w-[50px] text-center bg-white dark:bg-gray-800"
id="sampling_num" value="100">
</div>
</div>
</div>
</div>
</div>
<div id="step_axis">
<label for="range" class="select-label">Step Axis</label>
<div
class="items-center w-full rounded-lg bg-gray-50 flex flex-row gap-2 px-2 py-0.5 border border-gray-300 dark:border-gray-600 dark:text-white dark:bg-gray-700">
<input class="step-axis my-2 w-full" id="range" type="range" min="0" max="999" value="0"
step="1">
<button class="btn-small" id="controls">
<svg id="icon_play" style="display: none" class="w-3 h-3" aria-hidden="true"
xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 14 16">
<path
d="M0 .984v14.032a1 1 0 0 0 1.506.845l12.006-7.016a.974.974 0 0 0 0-1.69L1.506.139A1 1 0 0 0 0 .984Z" />
</svg>
<svg id="icon_stop" class="w-3 h-3" aria-hidden="true"
xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 12 16">
<path
d="M3 0H2a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h1a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2Zm7 0H9a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h1a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2Z" />
</svg>
</button>
</div>
<div class="flex gap-1 mt-2">
<span class="my-auto mr-1 text-sm font-medium text-gray-900 dark:text-white">Step:</span>
<input type="text"
class="small-input flex-none w-[60px] text-center bg-white dark:bg-gray-800" id="value">
<button class="btn-small" id="add_preview">
Pin
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="./resources/init.js"></script>
<script src="./resources/function.js"></script>
<script src="./resources/event.js"></script>
<script>
initConfig('./config/default.json')
</script>
</body>