SOURCE

console 命令行工具 X clear

                    
>
console
/**
 * Enhanced Audio Loader with optimizations for GitHub Pages
 * - Prioritizes Opus over mp3 over flac for faster loading and decoding
 * - Uses jsDelivr CDN when available
 * - Pre-initializes audio decoder
 * - Implements progressive loading with Range requests
 * - Uses Web Workers for audio decoding
 */

// Pre-initialize the audio context for faster decoding
const audioContext = new (window.AudioContext || window.webkitAudioContext)();

// Create a decoder worker
let decoderWorker = null;
try {
  decoderWorker = new Worker('decoder-worker.js');
} catch (error) {
  console.warn('Audio decoder worker not available:', error);
}

class AudioLoader {
  constructor(options = {}) {
    // Default options
    this.options = {
      // GitHub username and repository name
      username: 'ace-step',
      repo: 'ace-step.github.io',
      // GitHub release tag (if using releases)
      releaseTag: 'latest',
      // Whether to use jsDelivr CDN
      useJsDelivr: true,
      // Format preference order (opus first, then mp3, then flac)
      formatPreference: ['opus', 'mp3', 'flac'],
      // Base path for local files
      localBasePath: '',
      // Whether to use progressive loading
      useProgressiveLoading: true,
      // Whether to use web worker for decoding
      useWorkerDecoding: true,
      ...options
    };

    // Cache for audio file availability and decoded data
    this.cache = new Map();
    this.decodedCache = new Map();
    
    // Initialize decoder worker message handling
    if (decoderWorker && this.options.useWorkerDecoding) {
      decoderWorker.onmessage = async (e) => {
        const { id, decodedData, error, needsMainThreadDecode, audioData } = e.data;
        
        // If we have decoded data, use it
        if (id && decodedData) {
          this.decodedCache.set(id, decodedData);
          // Notify any pending callbacks
          if (this.pendingDecodes.has(id)) {
            const callbacks = this.pendingDecodes.get(id);
            callbacks.forEach(callback => callback(decodedData));
            this.pendingDecodes.delete(id);
          }
        }
        // If worker couldn't decode because OfflineAudioContext isn't available, decode in main thread
        else if (id && needsMainThreadDecode && audioData) {
          try {
            console.log('Falling back to main thread decoding because OfflineAudioContext is not available in worker');
            const decodedData = await audioContext.decodeAudioData(audioData);
            this.decodedCache.set(id, decodedData);
            
            // Notify any pending callbacks
            if (this.pendingDecodes.has(id)) {
              const callbacks = this.pendingDecodes.get(id);
              callbacks.forEach(callback => callback(decodedData));
              this.pendingDecodes.delete(id);
            }
          } catch (decodeError) {
            console.error('Error decoding audio in main thread fallback:', decodeError);
            // Notify callbacks of error
            if (this.pendingDecodes.has(id)) {
              const callbacks = this.pendingDecodes.get(id);
              callbacks.forEach(callback => callback(null, decodeError));
              this.pendingDecodes.delete(id);
            }
          }
        }
        // Handle other errors
        else if (error) {
          console.error('Worker reported error:', error);
          // Notify callbacks of error
          if (this.pendingDecodes.has(id)) {
            const callbacks = this.pendingDecodes.get(id);
            callbacks.forEach(callback => callback(null, new Error(error)));
            this.pendingDecodes.delete(id);
          }
        }
      };
      
      // Track pending decode operations
      this.pendingDecodes = new Map();
    }
    
    // Pre-warm the audio context
    this._preWarmAudioContext();
  }

  /**
   * Pre-warm the audio context to reduce initial decode latency
   * @private
   */
  async _preWarmAudioContext() {
    try {
      // Create a small silent buffer
      const buffer = audioContext.createBuffer(2, 44100, 44100);
      const source = audioContext.createBufferSource();
      source.buffer = buffer;
      source.connect(audioContext.destination);
      source.start(0);
      source.stop(0.001); // Stop after a very short time
      console.log('Audio context pre-warmed');
    } catch (error) {
      console.warn('Failed to pre-warm audio context:', error);
    }
  }

  /**
   * Get the URL for an audio file
   * @param {string} directory - Directory containing the audio file
   * @param {string} fileName - Name of the audio file without extension
   * @returns {Promise<string>} - URL to the audio file
   */
  async getAudioUrl(directory, fileName) {
    const cacheKey = `${directory}/${fileName}`;
    
    // Check cache first
    if (this.cache.has(cacheKey)) {
      return this.cache.get(cacheKey);
    }

    // Try each format in order of preference
    for (const format of this.options.formatPreference) {
      // Try to load from jsDelivr CDN first if enabled
      if (this.options.useJsDelivr) {
        const cdnUrl = this.getJsDelivrUrl(directory, fileName, format);
        if (await this.checkFileExists(cdnUrl)) {
          this.cache.set(cacheKey, cdnUrl);
          console.log(`Using CDN for ${fileName}.${format}`);
          return cdnUrl;
        }
      }
      
      // Fall back to local files
      const localPath = this.getLocalPath(directory, fileName, format);
      if (await this.checkFileExists(localPath)) {
        this.cache.set(cacheKey, localPath);
        return localPath;
      }
    }
    
    // If all else fails, return the original flac path
    const fallbackPath = `flac/samples/${directory}/${fileName}.flac`;
    this.cache.set(cacheKey, fallbackPath);
    return fallbackPath;
  }

  /**
   * Get the jsDelivr CDN URL for a file
   * @param {string} directory - Directory containing the file
   * @param {string} fileName - Name of the file without extension
   * @param {string} format - File format (opus, mp3 or flac)
   * @returns {string} - jsDelivr CDN URL
   */
  getJsDelivrUrl(directory, fileName, format) {
    if (format === 'opus') {
      return `https://cdn.jsdelivr.net/gh/${this.options.username}/${this.options.repo}/opus/samples/${directory}/${fileName}.opus`;
    } else if (format === 'mp3') {
      return `https://cdn.jsdelivr.net/gh/${this.options.username}/${this.options.repo}/mp3/samples/${directory}/${fileName}.mp3`;
    } else {
      return `https://cdn.jsdelivr.net/gh/${this.options.username}/${this.options.repo}/flac/samples/${directory}/${fileName}.flac`;
    }
  }

  /**
   * Get the local path for a file
   * @param {string} directory - Directory containing the file
   * @param {string} fileName - Name of the file without extension
   * @param {string} format - File format (opus, mp3 or flac)
   * @returns {string} - Local file path
   */
  getLocalPath(directory, fileName, format) {
    if (format === 'opus') {
      return `${this.options.localBasePath}opus/samples/${directory}/${fileName}.opus`;
    } else if (format === 'mp3') {
      return `${this.options.localBasePath}mp3/samples/${directory}/${fileName}.mp3`;
    } else {
      return `${this.options.localBasePath}flac/samples/${directory}/${fileName}.flac`;
    }
  }

  /**
   * Check if a file exists by making a HEAD request
   * @param {string} url - URL to check
   * @returns {Promise<boolean>} - Whether the file exists
   */
  async checkFileExists(url) {
    try {
      const response = await fetch(url, { method: 'HEAD' });
      return response.ok;
    } catch (error) {
      console.warn(`Error checking file existence for ${url}:`, error);
      return false;
    }
  }

  /**
   * Pre-decode an audio file to reduce playback latency
   * @param {string} url - URL of the audio file to decode
   * @param {string} id - Unique identifier for the audio file
   * @returns {Promise<AudioBuffer>} - Decoded audio data
   */
  async preDecodeAudio(url, id) {
    // Check if already decoded
    if (this.decodedCache.has(id)) {
      return this.decodedCache.get(id);
    }
    
    try {
      // Fetch the audio data
      const response = await fetch(url);
      const arrayBuffer = await response.arrayBuffer();
      
      // Use worker for decoding if available
      if (decoderWorker && this.options.useWorkerDecoding) {
        return new Promise((resolve, reject) => {
          // Add to pending decodes
          if (!this.pendingDecodes.has(id)) {
            this.pendingDecodes.set(id, []);
          }
          
          // Add callback that handles both success and error cases
          this.pendingDecodes.get(id).push((data, error) => {
            if (error) {
              reject(error);
            } else {
              resolve(data);
            }
          });
          
          // Send to worker for decoding
          decoderWorker.postMessage({
            id,
            audioData: arrayBuffer
          }, [arrayBuffer]);
        });
      } else {
        // Decode in main thread if worker not available
        const decodedData = await audioContext.decodeAudioData(arrayBuffer);
        this.decodedCache.set(id, decodedData);
        return decodedData;
      }
    } catch (error) {
      console.error(`Error pre-decoding audio ${url}:`, error);
      return null;
    }
  }

  /**
   * Create an optimized audio element with progressive loading
   * @param {string} url - URL of the audio file
   * @param {string} id - Unique identifier for the audio file
   * @returns {HTMLAudioElement} - Configured audio element
   */
  createOptimizedAudio(url, id) {
    const audio = new Audio();
    
    // Configure for progressive loading
    if (this.options.useProgressiveLoading) {
      audio.preload = 'none';
      audio.dataset.src = url;
      audio.dataset.id = id;
      
      // Set up progressive loading on play
      audio.addEventListener('play', () => {
        if (!audio.dataset.loadStarted) {
          audio.src = audio.dataset.src;
          audio.load();
          audio.dataset.loadStarted = true;
        }
      });
    } else {
      // Standard loading
      audio.src = url;
      audio.preload = 'auto';
    }
    
    return audio;
  }

  /**
   * Preload audio files for a list of samples
   * @param {Array} samples - List of samples to preload
   * @param {Function} progressCallback - Callback for progress updates
   */
  async preloadAudio(samples, progressCallback = null) {
    let loaded = 0;
    const total = samples.length;
    
    for (const sample of samples) {
      const url = await this.getAudioUrl(sample.directory, sample.fileName);
      
      // Pre-decode the audio if we're using that optimization
      if (this.options.useWorkerDecoding || audioContext.state === 'running') {
        await this.preDecodeAudio(url, sample.id);
      } else {
        // Just fetch the headers to cache the URL, don't download the whole file
        await fetch(url, { method: 'HEAD' });
      }
      
      loaded++;
      if (progressCallback) {
        progressCallback(loaded, total);
      }
    }
  }
}

// Export the AudioLoader class
window.AudioLoader = AudioLoader;
<!DOCTYPE html>
<html lang="zh-TW"> <!-- 語言更改為繁體中文 -->

<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">



  <!-- Begin Jekyll SEO tag v2.7.1 -->
  <title>ACE-Step:邁向音樂生成基礎模型的一步</title>
  <meta name="generator" content="Jekyll v3.9.0">
  <meta property="og:title" content="ACE-Step:邁向音樂生成基礎模型的一步">
  <meta property="og:locale" content="zh_TW"> <!-- 更改地區設定 -->
  <meta name="twitter:card" content="summary">
  <!-- End Jekyll SEO tag -->

  <meta name="viewport" content="width=device-width, initial-scale=1">
  <meta name="theme-color" content="#5D59FF">
  <link rel="stylesheet" href="style.css">
  <style>
    /* 歌詞切換區塊 */
    .lyrics-toggle {
      border: 1px solid #dee2e6;
      border-radius: 8px;
      margin-top: 0;
      overflow: hidden;
    }

    .lyrics-header {
      display: flex;
      justify-content: space-between;
      align-items: center;
      padding: 15px 20px;
      background-color: #f8f9fa;
      cursor: pointer;
      font-weight: 600;
    }

    .toggle-icon {
      transition: transform 0.3s ease;
    }

    .lyrics-toggle.expanded .toggle-icon {
      transform: rotate(180deg);
    }

    .lyrics-body {
      padding: 0;
      max-height: 0;
      overflow: hidden;
      transition: max-height 0.3s ease, padding 0.3s ease;
    }

    .lyrics-toggle.expanded .lyrics-body {
      padding: 20px;
      max-height: 300px;
      /* 減少高度以鼓勵捲動 */
      overflow-y: auto;
      /* 新增垂直捲動 */
      overflow-x: auto;
      /* 當內容過寬時新增水平捲動 */
    }

    /* 確保 pre 元素不會超出容器 */
    .lyrics-body pre {
      white-space: pre;
      word-wrap: normal;
      overflow-x: auto;
      margin: 0;
      /* 移除預設邊距以確保第一行可見 */
      display: block;
      /* 確保區塊顯示 */
      text-align: left;
      /* 確保靠左對齊 */
    }

    /* 全部切換按鈕樣式 */
    .toggle-all-button {
      background-color: #f8f9fa;
      border: 1px solid #dee2e6;
      border-radius: 4px;
      padding: 8px 16px;
      font-weight: 600;
      cursor: pointer;
      transition: background-color 0.2s ease;
    }

    .toggle-all-button:hover {
      background-color: #e9ecef;
    }

    /* 固定切換按鈕容器 */
    .fixed-toggle-container {
      position: fixed;
      top: 20px;
      right: 20px;
      z-index: 1000;
      background-color: rgba(255, 255, 255, 0.9);
      padding: 5px;
      border-radius: 4px;
      box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
    }

    /* 個別音軌播放按鈕 */
    .track-play-btn {
      background-color: #5D59FF;
      color: white;
      border: none;
      border-radius: 50%;
      width: 36px;
      height: 36px;
      display: flex;
      align-items: center;
      justify-content: center;
      font-size: 14px;
      cursor: pointer;
      transition: all 0.2s ease;
    }

    .track-play-btn:hover {
      background-color: #4A46E3;
    }

    .track-play-btn.playing {
      background-color: #4A46E3;
    }

    /* 全域播放器列樣式 */
    #global-player {
      position: fixed;
      bottom: 0;
      left: 0;
      width: 100%;
      background-color: #333;
      border-top: 1px solid #222;
      padding: 10px 20px;
      box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.5);
      display: flex;
      align-items: center;
      gap: 15px;
      z-index: 1000;
      transform: translateY(100%);
      transition: transform 0.3s ease;
      height: 80px;
    }

    #global-player.visible {
      transform: translateY(0);
    }

    .player-track-info {
      flex: 0 0 250px;
      display: flex;
      align-items: center;
      color: #fff;
    }

    .track-details {
      display: flex;
      flex-direction: column;
      justify-content: center;
      width: 180px;
      overflow: hidden;
    }

    .player-track-title {
      font-weight: bold;
      font-size: 18px;
      margin-bottom: 3px;
      color: #fff;
      max-width: 180px;
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
    }

    .player-track-genre {
      font-size: 12px;
      color: #888;
      text-transform: uppercase;
      max-width: 180px;
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
    }

    /* 新增長文字捲動動畫 */
    .player-track-title.scrolling,
    .player-track-genre.scrolling {
      text-overflow: clip;
      position: relative;
      display: inline-block;
      padding-right: 10px;
      /* 在末尾新增一些空間 */
      animation: marquee 10s linear infinite;
      animation-delay: 1s;
      /* 開始前的延遲 */
    }

    /* 文字捲動動畫 */
    @keyframes marquee {

      0%,
      15% {
        transform: translateX(0);
      }

      /* 開頭暫停 */
      85%,
      100% {
        transform: translateX(calc(-100% + 180px));
      }

      /* 當文字到達容器末端時停止 */
    }

    /* 根據內容長度設定不同的動畫速度 */
    .player-track-title.scrolling.length-medium,
    .player-track-genre.scrolling.length-medium {
      animation-duration: 15s;
    }

    .player-track-title.scrolling.length-long,
    .player-track-genre.scrolling.length-long {
      animation-duration: 20s;
    }

    /* 確保動畫保持在容器內 */
    .track-details {
      position: relative;
      overflow: hidden;
    }

    .player-controls {
      display: flex;
      align-items: center;
      gap: 15px;
    }

    .player-btn {
      background: none;
      border: none;
      cursor: pointer;
      font-size: 18px;
      color: #fff;
      width: 36px;
      height: 36px;
      display: flex;
      align-items: center;
      justify-content: center;
      border-radius: 50%;
      transition: background-color 0.2s ease;
    }

    .player-btn:hover {
      background-color: #333;
    }

    .player-btn.active {
      color: #fff;
    }

    .mode-indicator {
      font-size: 10px;
      vertical-align: super;
      margin-left: 2px;
    }

    .player-play-btn {
      background-color: transparent;
      color: white;
      border-radius: 50%;
      width: 40px;
      height: 40px;
    }

    .player-play-btn:hover {
      background-color: #333;
    }

    .player-progress-container {
      flex-grow: 1;
      height: 4px;
      background-color: #444;
      border-radius: 2px;
      cursor: pointer;
      position: relative;
    }

    .player-progress-bar {
      height: 100%;
      background-color: #fff;
      border-radius: 2px;
      width: 0%;
      position: relative;
    }

    .player-progress-handle {
      width: 12px;
      height: 12px;
      background-color: #fff;
      border-radius: 50%;
      position: absolute;
      top: 50%;
      right: -6px;
      transform: translateY(-50%);
      cursor: grab;
    }

    .player-time-display {
      font-size: 14px;
      color: #fff;
      min-width: 80px;
      text-align: right;
      font-family: monospace;
    }

    /* 在頁面底部新增內距以容納播放器 */
    body {
      padding-bottom: 80px;
    }

    /* 額外控制項樣式 */
    .player-extra-controls {
      display: flex;
      align-items: center;
      gap: 10px;
      margin-left: 10px;
    }
  </style>
</head>

<body data-new-gr-c-s-check-loaded="14.1001.0" data-gr-ext-installed="">
  <!-- 引入音訊載入器腳本 -->
  <script>
  const localTextContent = {
  "raw/samples/Application-Lyric2Vocal/lyrics2vocal_in_you_i_see.txt": `In you I see 
someone special.`,
  "raw/samples/Application-Lyric2Vocal/lyrics2vocal_in_you_i_see_prompt.txt": `clean vocals`,
  "raw/samples/Application-Lyric2Vocal/lyrics2vocal_lemonade.txt": `Lemonade sunrise dripping down your smile`,
  "raw/samples/Application-Lyric2Vocal/lyrics2vocal_lemonade_prompt.txt": `clean vocals`,
  "raw/samples/Application-Lyric2Vocal/lyrics2vocal_turn_me_on.txt": `You really turn me on. 
You gets me off my feet. 
Lonely days are gone.`,
  "raw/samples/Application-Lyric2Vocal/lyrics2vocal_turn_me_on_prompt.txt": `clean vocals`,
  "raw/samples/Application-Lyric2Vocal/lyrics2vocal_whispering_shadows.txt": `Whispering shadows dance with my regrets`,
  "raw/samples/Application-Lyric2Vocal/lyrics2vocal_whispering_shadows_prompt.txt": `clean vocals`,
  "raw/samples/Application-Lyric2Vocal/lyrics2vocal_you_been_chosen_too.txt": `You've been chosen too and everybody knows what I'm into. You got me. 
I've been missing you in the morning only.`,
  "raw/samples/Application-Lyric2Vocal/lyrics2vocal_you_been_chosen_too_prompt.txt": `clean vocals`,
  "raw/samples/Controlability-edit/edit_a_orig.txt": `When I was young 
I'd listen to the radio
Waiting for my favorite songs
When they played I'd sing along
It made me smile`,
  "raw/samples/Controlability-edit/edit_a_orig_prompt.txt": `This is the input audio, the genre is "piano, pop, female voice"
We can edit the part of lyrics but not change its melody, vocal timbre and bgm
`,
  "raw/samples/Controlability-edit/edit_cry.txt": `When I was young 
I'd listen to the radio
Waiting for my favorite songs
When they played I'd sing along
It made me cry`,
  "raw/samples/Controlability-edit/edit_cry_prompt.txt": `It made me smile -> It made me cry
`,
  "raw/samples/Controlability-edit/edit_french.txt": `Quand j'étais jeune
I'd listen to the radio
Waiting for my favorite songs
When they played I'd sing along
It made me smile`,
  "raw/samples/Controlability-edit/edit_french_prompt.txt": `When I was young  -> Quand j'étais jeune
`,
  "raw/samples/Controlability-edit/edit_german.txt": `In meiner Jugend
I'd listen to the radio
Waiting for my favorite songs
When they played I'd sing along
It made me smile`,
  "raw/samples/Controlability-edit/edit_german_prompt.txt": `When I was young -> In meiner Jugend`,
  "raw/samples/Controlability-edit/edit_ja.txt": `子供の頃に
I'd listen to the radio
Waiting for my favorite songs
When they played I'd sing along
It made me smile`,
  "raw/samples/Controlability-edit/edit_ja_prompt.txt": `When I was young -> 子供の頃に`,
  "raw/samples/Controlability-edit/edit_kid.txt": `when you were kid
I'd listen to the radio
Waiting for my favorite songs
When they played I'd sing along
It made me smile`,
  "raw/samples/Controlability-edit/edit_kid_prompt.txt": `When I was young -> when you were kid`,
  "raw/samples/Controlability-edit/edit_ko.txt": `내가 어렸을 때
I'd listen to the radio
Waiting for my favorite songs
When they played I'd sing along
It made me smile`,
  "raw/samples/Controlability-edit/edit_ko_prompt.txt": `When I was young -> 내가 어렸을 때`,
  "raw/samples/Controlability-edit/edit_old.txt": `When I was old 
I'd listen to the radio
Waiting for my favorite songs
When they played I'd sing along
It made me smile`,
  "raw/samples/Controlability-edit/edit_old_prompt.txt": `When I was young -> When I was old
`,
  "raw/samples/Controlability-edit/edit_spotify.txt": `When I was young 
I'd listen to the spotify
Waiting for my favorite songs
When they played I'd sing along
It made me smile`,
  "raw/samples/Controlability-edit/edit_spotify_prompt.txt": `I'd listen to the radio -> I'd listen to the spotify
`,
  "raw/samples/Controlability-edit/edit_zh.txt": `我小的时候
I'd listen to the radio
Waiting for my favorite songs
When they played I'd sing along
It made me smile`,
  "raw/samples/Controlability-edit/edit_zh_prompt.txt": `When I was young -> 我小的时候
`,
  "raw/samples/Controlability-repaint/a_repaint_orig.txt": `[verse]
我走过深夜的街道
冷风吹乱思念的漂亮外套
你的微笑像星光很炫耀
照亮了我孤独的每分每秒

[chorus]
愿你是风吹过我的脸
带我飞过最远最遥远的山间
愿你是风轻触我的梦
停在心头不再飘散无迹无踪

[verse]
一起在喧哗避开世俗的骚动
独自在天台探望月色的朦胧
你说爱像音乐带点重节奏
一拍一跳让我忘了心的温度多空洞

[bridge]
唱起对你的想念不隐藏
像诗又像画写满藏不了的渴望
你的影子挥不掉像风的倔强
追着你飞扬穿越云海一样泛光

[chorus]
愿你是风吹过我的手
暖暖的触碰像春日细雨温柔
愿你是风盘绕我的身
深情万万重不会有一天走远走

[verse]
深夜的钢琴弹起动人的旋律
低音鼓砸进心底的每一次呼吸
要是能将爱化作歌声传递
你是否会听见我心里的真心实意`,
  "raw/samples/Controlability-repaint/a_repaint_orig_prompt.txt": `We can repaint any specified area. To demonstrate the power and flexibility of repaint, here’s an example using a 0-30 second repaint
orig style is "pop, rap, electronic, blues, hip-house, rhythm and blues"`,
  "raw/samples/Controlability-repaint/repaint_0_30_variance10_change_female.txt": `[verse]
我走过深夜的街道
冷风吹乱思念的漂亮外套
你的微笑像星光很炫耀
照亮了我孤独的每分每秒

[chorus]
愿你是风吹过我的脸
带我飞过最远最遥远的山间
愿你是风轻触我的梦
停在心头不再飘散无迹无踪

[verse]
一起在喧哗避开世俗的骚动
独自在天台探望月色的朦胧
你说爱像音乐带点重节奏
一拍一跳让我忘了心的温度多空洞

[bridge]
唱起对你的想念不隐藏
像诗又像画写满藏不了的渴望
你的影子挥不掉像风的倔强
追着你飞扬穿越云海一样泛光

[chorus]
愿你是风吹过我的手
暖暖的触碰像春日细雨温柔
愿你是风盘绕我的身
深情万万重不会有一天走远走

[verse]
深夜的钢琴弹起动人的旋律
低音鼓砸进心底的每一次呼吸
要是能将爱化作歌声传递
你是否会听见我心里的真心实意`,
  "raw/samples/Controlability-repaint/repaint_0_30_variance10_change_female_prompt.txt": `change singing gender`,
  "raw/samples/Controlability-repaint/repaint_0_30_variance10_change_genre.txt": `[verse]
我走过深夜的街道
冷风吹乱思念的漂亮外套
你的微笑像星光很炫耀
照亮了我孤独的每分每秒

[chorus]
愿你是风吹过我的脸
带我飞过最远最遥远的山间
愿你是风轻触我的梦
停在心头不再飘散无迹无踪

[verse]
一起在喧哗避开世俗的骚动
独自在天台探望月色的朦胧
你说爱像音乐带点重节奏
一拍一跳让我忘了心的温度多空洞

[bridge]
唱起对你的想念不隐藏
像诗又像画写满藏不了的渴望
你的影子挥不掉像风的倔强
追着你飞扬穿越云海一样泛光

[chorus]
愿你是风吹过我的手
暖暖的触碰像春日细雨温柔
愿你是风盘绕我的身
深情万万重不会有一天走远走

[verse]
深夜的钢琴弹起动人的旋律
低音鼓砸进心底的每一次呼吸
要是能将爱化作歌声传递
你是否会听见我心里的真心实意`,
  "raw/samples/Controlability-repaint/repaint_0_30_variance10_change_genre_prompt.txt": `change style`,
  "raw/samples/Controlability-repaint/repaint_0_30_variance10_change_lyrics.txt": `[verse]
I walk through the streets late at night,
Cold winds tousle my coat—pretty with longing.
Your smile dazzles like starlight,
Lighting up every lonely minute I’m holding.

[chorus]
愿你是风吹过我的脸
带我飞过最远最遥远的山间
愿你是风轻触我的梦
停在心头不再飘散无迹无踪

[verse]
一起在喧哗避开世俗的骚动
独自在天台探望月色的朦胧
你说爱像音乐带点重节奏
一拍一跳让我忘了心的温度多空洞

[bridge]
唱起对你的想念不隐藏
像诗又像画写满藏不了的渴望
你的影子挥不掉像风的倔强
追着你飞扬穿越云海一样泛光

[chorus]
愿你是风吹过我的手
暖暖的触碰像春日细雨温柔
愿你是风盘绕我的身
深情万万重不会有一天走远走

[verse]
深夜的钢琴弹起动人的旋律
低音鼓砸进心底的每一次呼吸
要是能将爱化作歌声传递
你是否会听见我心里的真心实意`,
  "raw/samples/Controlability-repaint/repaint_0_30_variance10_change_lyrics_prompt.txt": `change lyrics
`,
  "raw/samples/Controlability-repaint/repaint_0_30_variance7.txt": `[verse]
我走过深夜的街道
冷风吹乱思念的漂亮外套
你的微笑像星光很炫耀
照亮了我孤独的每分每秒

[chorus]
愿你是风吹过我的脸
带我飞过最远最遥远的山间
愿你是风轻触我的梦
停在心头不再飘散无迹无踪

[verse]
一起在喧哗避开世俗的骚动
独自在天台探望月色的朦胧
你说爱像音乐带点重节奏
一拍一跳让我忘了心的温度多空洞

[bridge]
唱起对你的想念不隐藏
像诗又像画写满藏不了的渴望
你的影子挥不掉像风的倔强
追着你飞扬穿越云海一样泛光

[chorus]
愿你是风吹过我的手
暖暖的触碰像春日细雨温柔
愿你是风盘绕我的身
深情万万重不会有一天走远走

[verse]
深夜的钢琴弹起动人的旋律
低音鼓砸进心底的每一次呼吸
要是能将爱化作歌声传递
你是否会听见我心里的真心实意`,
  "raw/samples/Controlability-repaint/repaint_0_30_variance7_prompt.txt": `variance=0.7
`,
  "raw/samples/Controlability-retake/orig.txt": `[verse]
Neon lights they flicker bright
City hums in dead of night
Rhythms pulse through concrete veins
Lost in echoes of refrains

[verse]
Bassline groovin' in my chest
Heartbeats match the city's zest
Electric whispers fill the air
Synthesized dreams everywhere

[chorus]
Turn it up and let it flow
Feel the fire let it grow
In this rhythm we belong
Hear the night sing out our song

[verse]
Guitar strings they start to weep
Wake the soul from silent sleep
Every note a story told
In this night we're bold and gold

[bridge]
Voices blend in harmony
Lost in pure cacophony
Timeless echoes timeless cries
Soulful shouts beneath the skies

[verse]
Keyboard dances on the keys
Melodies on evening breeze
Catch the tune and hold it tight
In this moment we take flight`,
  "raw/samples/Controlability-retake/orig_prompt.txt": `The original style is funk/pop/soul/melodic. We can generate variations with adjustable similarity—higher 'variance' means more divergence from the original.`,
  "raw/samples/Controlability-retake/retake_variance1.txt": `[verse]
Neon lights they flicker bright
City hums in dead of night
Rhythms pulse through concrete veins
Lost in echoes of refrains

[verse]
Bassline groovin' in my chest
Heartbeats match the city's zest
Electric whispers fill the air
Synthesized dreams everywhere

[chorus]
Turn it up and let it flow
Feel the fire let it grow
In this rhythm we belong
Hear the night sing out our song

[verse]
Guitar strings they start to weep
Wake the soul from silent sleep
Every note a story told
In this night we're bold and gold

[bridge]
Voices blend in harmony
Lost in pure cacophony
Timeless echoes timeless cries
Soulful shouts beneath the skies

[verse]
Keyboard dances on the keys
Melodies on evening breeze
Catch the tune and hold it tight
In this moment we take flight`,
  "raw/samples/Controlability-retake/retake_variance1_prompt.txt": `variance=0.1`,
  "raw/samples/Controlability-retake/retake_variance2.txt": `[verse]
Neon lights they flicker bright
City hums in dead of night
Rhythms pulse through concrete veins
Lost in echoes of refrains

[verse]
Bassline groovin' in my chest
Heartbeats match the city's zest
Electric whispers fill the air
Synthesized dreams everywhere

[chorus]
Turn it up and let it flow
Feel the fire let it grow
In this rhythm we belong
Hear the night sing out our song

[verse]
Guitar strings they start to weep
Wake the soul from silent sleep
Every note a story told
In this night we're bold and gold

[bridge]
Voices blend in harmony
Lost in pure cacophony
Timeless echoes timeless cries
Soulful shouts beneath the skies

[verse]
Keyboard dances on the keys
Melodies on evening breeze
Catch the tune and hold it tight
In this moment we take flight`,
  "raw/samples/Controlability-retake/retake_variance2_prompt.txt": `variance=0.2`,
  "raw/samples/Controlability-retake/retake_variance3.txt": `[verse]
Neon lights they flicker bright
City hums in dead of night
Rhythms pulse through concrete veins
Lost in echoes of refrains

[verse]
Bassline groovin' in my chest
Heartbeats match the city's zest
Electric whispers fill the air
Synthesized dreams everywhere

[chorus]
Turn it up and let it flow
Feel the fire let it grow
In this rhythm we belong
Hear the night sing out our song

[verse]
Guitar strings they start to weep
Wake the soul from silent sleep
Every note a story told
In this night we're bold and gold

[bridge]
Voices blend in harmony
Lost in pure cacophony
Timeless echoes timeless cries
Soulful shouts beneath the skies

[verse]
Keyboard dances on the keys
Melodies on evening breeze
Catch the tune and hold it tight
In this moment we take flight`,
  "raw/samples/Controlability-retake/retake_variance3_prompt.txt": `variance=0.3`,
  "raw/samples/Controlability-retake/retake_variance4.txt": `[verse]
Neon lights they flicker bright
City hums in dead of night
Rhythms pulse through concrete veins
Lost in echoes of refrains

[verse]
Bassline groovin' in my chest
Heartbeats match the city's zest
Electric whispers fill the air
Synthesized dreams everywhere

[chorus]
Turn it up and let it flow
Feel the fire let it grow
In this rhythm we belong
Hear the night sing out our song

[verse]
Guitar strings they start to weep
Wake the soul from silent sleep
Every note a story told
In this night we're bold and gold

[bridge]
Voices blend in harmony
Lost in pure cacophony
Timeless echoes timeless cries
Soulful shouts beneath the skies

[verse]
Keyboard dances on the keys
Melodies on evening breeze
Catch the tune and hold it tight
In this moment we take flight`,
  "raw/samples/Controlability-retake/retake_variance4_prompt.txt": `variance=0.4`,
  "raw/samples/Controlability-retake/retake_variance5.txt": `[verse]
Neon lights they flicker bright
City hums in dead of night
Rhythms pulse through concrete veins
Lost in echoes of refrains

[verse]
Bassline groovin' in my chest
Heartbeats match the city's zest
Electric whispers fill the air
Synthesized dreams everywhere

[chorus]
Turn it up and let it flow
Feel the fire let it grow
In this rhythm we belong
Hear the night sing out our song

[verse]
Guitar strings they start to weep
Wake the soul from silent sleep
Every note a story told
In this night we're bold and gold

[bridge]
Voices blend in harmony
Lost in pure cacophony
Timeless echoes timeless cries
Soulful shouts beneath the skies

[verse]
Keyboard dances on the keys
Melodies on evening breeze
Catch the tune and hold it tight
In this moment we take flight`,
  "raw/samples/Controlability-retake/retake_variance5_prompt.txt": `variance=0.5`,
  "raw/samples/Controlability-retake/retake_variance6.txt": `[verse]
Neon lights they flicker bright
City hums in dead of night
Rhythms pulse through concrete veins
Lost in echoes of refrains

[verse]
Bassline groovin' in my chest
Heartbeats match the city's zest
Electric whispers fill the air
Synthesized dreams everywhere

[chorus]
Turn it up and let it flow
Feel the fire let it grow
In this rhythm we belong
Hear the night sing out our song

[verse]
Guitar strings they start to weep
Wake the soul from silent sleep
Every note a story told
In this night we're bold and gold

[bridge]
Voices blend in harmony
Lost in pure cacophony
Timeless echoes timeless cries
Soulful shouts beneath the skies

[verse]
Keyboard dances on the keys
Melodies on evening breeze
Catch the tune and hold it tight
In this moment we take flight`,
  "raw/samples/Controlability-retake/retake_variance6_prompt.txt": `variance=0.6`,
  "raw/samples/Experimental/acappella.txt": `aaaaaaaaaaa

eeeeeeeeeee

iiiiiiiiiiiiiiiiiiiiii

ooooooooooo

uuuuuuuuuuu`,
  "raw/samples/Experimental/acappella_prompt.txt": `a cappella`,
  "raw/samples/Experimental/acid_house.txt": `<SONG_PROMPT>
<HEADER>
[STYLE: Electro-Acid House]
[MOOD: Energetic, Raw, Hypnotic, Futuristic]
[INSTRUMENTATION: Acid Basslines (TB-303 style), Punchy Kicks, 
Snappy Claps, Crisp Hi-Hats, Retro Synth Leads, 
Modular Sequences, Atmospheric Pads, Industrial FX]
[TEMPO: 128 BPM]
[PRODUCTION: Raw Energy, Dynamic Acid Sequences, Smooth Transitions, 
Layered Percussion, Impactful Drops]
</HEADER>
<SONG_MODULES>
<INTRO>
[Punchy kick and filtered acid bassline create a raw, pulsating groove.]
[Crisp hi-hats and sharp claps build rhythm and energy.]
[Subtle atmospheric pads and industrial FX add a futuristic edge.]
</INTRO>

<BUILD_UP_1>
[Acid bassline evolves with increasing resonance and modulation.]
[Layered arpeggios and dynamic percussion heighten tension.]
[Industrial sweeps and risers build momentum toward the first drop.]
</BUILD_UP_1>

<DROP_1>
[Full-power acid bassline dominates with high resonance and distortion.]
[Punchy kicks, tight claps, and retro synth leads drive the groove.]
[Layered FX and rolling hi-hats enhance the hypnotic energy.]
</DROP_1>

<BREAKDOWN>
[Acid bassline filters down, leaving spacious pads and soft arpeggios.]
[Minimal percussion and subtle FX create a reflective atmosphere.]
[Tension rises with evolving synths and a return of the acid groove.]
</BREAKDOWN>

<BUILD_UP_2>
[Acid bassline returns with more aggressive modulation and drive.]
[Percussion layers intensify with fast-paced hi-hats and snare rolls.]
[Industrial FX and arpeggios ascend, leading to the second drop.]
</BUILD_UP_2>

<DROP_2>
[Acid bassline peaks with full distortion, driving raw energy.]
[Kicks, claps, and sharp hi-hats deliver a relentless groove.]
[FX sweeps and modular sequences add depth and complexity.]
</DROP_2>

<OUTRO>
[Bassline and percussion gradually fade, leaving atmospheric pads.]
[Filtered acid sequences echo softly as the track fades to silence.]
</OUTRO>
</SONG_MODULES>
</SONG_PROMPT>
`,
  "raw/samples/Experimental/acid_house_prompt.txt": `Acid House, Roland TB-303, Dub`,
  "raw/samples/Experimental/bbox.txt": `Intro
Puh tss puh tss
Kshhh ff kshhh ff
Bmm tkk bmm tkk
Drr-dr-d-d-dt

Verse 1
Buh dgg ts buh dgg ts
Pf ff tk-pf ff tk
Vrrrt ksh vrrrt ksh
T-t-t-tsk t-t-t-tsk

Hook
B'mm ts ka b'mm ts ka
Doo-d't doo-d't psh-ka
Zzhh zzhh bzz bzz
Tkk-vrt tkk-vrt tz-tz

Breakdown
T'p-t'p-t'p-t'p-kshhhh
Drrrt-tk drrrt-tk drrrt-tk
P'ow! —— B'mm-psh
Tsssssss...

Outro
T'k-a t'k-a t'k-a psh
Bzz-zzh bzz-zzh ff-ff-ff`,
  "raw/samples/Experimental/bbox_prompt.txt": `b-box, deep male voice, trap, hip-hop, super fast tempo`,
  "raw/samples/Experimental/dead_rock.txt": `[Verse]
My lovers betray me
The snake in my garden is hissing
In the air is the sweetness of roses
And under my skin
There's a thorn

[Verse 2]
I should have known
That God sends his angel in shadows
With blood in his veins
I watch the enemy
Givin' me the hand of my savior

[Chorus]
And I can't love again
With the echo of your name in my head
With the demons in my bed
With the memories
Your ghost
I see it
'Cause it comes to haunt me
Just to taunt me
It comes to haunt me
Just to taunt me

[Verse 3]
With sugar and spice
It's hard to ignore the nostalgia
With the men on their knees
At the gates of my heart
How they beg me

[Verse 4]
They say
"No one will ever love you
The way that I do
No one will ever touch you
The way that I do"

[Chorus]
And I can't love again
With the echo of your name in my head
With the demons in my bed
With the memories
Your ghost
I see it
'Cause it comes to haunt me
Just to taunt me
It comes to haunt me
Just to taunt me`,
  "raw/samples/Experimental/dead_rock_prompt.txt": `dark, death rock, metal, hardcore, electric guitar, powerful, bass, drums, 110 bpm, G major`,
  "raw/samples/Experimental/drum_bass.txt": `[inst]

ooooooooooooooooooooo

wooooooooooooooooooo

iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii

nooooooooooooooooo`,
  "raw/samples/Experimental/drum_bass_prompt.txt": `drum & bass, 160bpm, ethereal dark liquid, deep bassline, female vocals`,
  "raw/samples/Experimental/female_nana.txt": `[verse]
na na na na na na
yeah~
yeah~
na na na na na na

[chorus]
oh oh oh oh oh oh oh oh 
na na na na na na
yeah yeah yeah yeah yeah yeah
na na na na na na

[verse]
na na na na na na
yeah~
yeah~
na na na na na na

[chorus]
oh oh oh oh oh oh oh oh 
na na na na na na
yeah yeah yeah yeah yeah yeah
na na na na na na

[outro]`,
  "raw/samples/Experimental/female_nana_prompt.txt": `female voice`,
  "raw/samples/Experimental/opera_female.txt": `[Verse]
I don’t love you no more,
I don’t care about you crying on the floor,
I don’t need you no more,
I don’t want you to love me no more

[Chorus]
Say that you love me,
Turn around, then backstab me,
All the pain of forgiveness, 
even time, couldn't fix this

[outro]

to love again
to love again`,
  "raw/samples/Experimental/opera_female_prompt.txt": `Classic opera, Mozart’s, Oratorio, Aria, female`,
  "raw/samples/GeneralSongs/ace_step.txt": `(Verse 1)
������
It’s not just a dream, it’s the start of a way,
Building the future where music will play.
A model that listens, a model that grows,
ACE-Step is the rhythm the new world knows.

(Pre-Chorus)
No more limits, no more lines,
A thousand songs in a million minds.
We light the spark, we raise the sound,
A new foundation breaking ground.

(Chorus)
ACE-Step, we take the leap,
Into a world where the music speaks.
Fast and free, we shape the skies,
Creating songs that never die.
ACE-Step — the beat goes on,
Foundation strong, a brand-new dawn.
������


(Verse 2)
��
Not just end-to-end, but a canvas to paint,
A million colors, no need to wait.
For every artist, for every sound,
ACE-Step lays the sacred ground.

(Pre-Chorus)
��
No more limits, no more lines,
A thousand songs in a million minds.
We light the spark, we raise the sound,
A new foundation breaking ground.

(Chorus)
��
ACE-Step, we take the leap,
Into a world where the music speaks.
Fast and free, we shape the skies,
Creating songs that never die.
ACE-Step — the beat goes on,
Foundation strong, a brand-new dawn.

(Bridge)
��
From every beat to every rhyme,
We build the tools for endless time.
A step, a song, a dream to keep,
ACE is the promise we will leap.

(Final Chorus)
��
ACE-Step, we take the leap,
Into a world where the music speaks.
Fast and free, we shape the skies,
Creating songs that never die.
ACE-Step — the beat goes on,
Foundation strong, a brand-new dawn.
ACE-Step — the future’s song.`,
  "raw/samples/GeneralSongs/ace_step_prompt.txt": `electronic, rock, pop`,
  "raw/samples/GeneralSongs/afro_cuban.txt": `[verse]
Sun dips low the night ignites
Bassline hums with gleaming lights
Electric guitar singing tales so fine
In the rhythm we all intertwine

[verse]
Drums beat steady calling out
Percussion guides no room for doubt
Electric pulse through every vein
Dance away every ounce of pain

[chorus]
Feel the rhythm feel the flow
Let the music take control
Bassline deep electric hum
In this night we're never numb

[bridge]
Stars above they start to glow
Echoes of the night's soft glow
Electric strings weave through the air
In this moment none compare

[verse]
Heartbeats sync with every tone
Lost in music never alone
Electric tales of love and peace
In this groove we find release

[chorus]
Feel the rhythm feel the flow
Let the music take control
Bassline deep electric hum
In this night we're never numb`,
  "raw/samples/GeneralSongs/afro_cuban_prompt.txt": `Cuban music, salsa, son, Afro-Cuban, traditional Cuban`,
  "raw/samples/GeneralSongs/alternative_rock.txt": `[verse]
Bright lights flashing in the city sky
Running fast and we don't know why
Electric nights got our hearts on fire
Chasing dreams we'll never tire

[verse]
Grit in our eyes wind in our hair
Breaking rules we don't even care
Shouting loud above the crowd
Living life like we're unbowed

[chorus]
Running wild in the night so free
Feel the beat pumping endlessly
Hearts collide in the midnight air
We belong we don't have a care

[verse]
Piercing through like a lightning strike
Every moment feels like a hike
Daring bold never backing down
Kings and queens without a crown

[chorus]
Running wild in the night so free
Feel the beat pumping endlessly
Hearts collide in the midnight air
We belong we don't have a care

[bridge]
Close your eyes let your spirit soar
We are the ones who wanted more
Breaking chains of the mundane
In this world we'll make our claim`,
  "raw/samples/GeneralSongs/alternative_rock_prompt.txt": `alternative rock, pop, rock`,
  "raw/samples/GeneralSongs/black_metal.txt": `[verse]
Floating through the galaxy on a midnight ride
Stars are dancing all around in cosmic tides
Feel the pulse of space and time beneath our feet
Every beat a heartbeat in this endless suite

[chorus]
Galactic dreams under neon lights
Sailing through the velvet nights
We are echoes in a cosmic sea
In a universe where we are free

[verse]
Planetary whispers in the sky tonight
Every constellation's got a secret sight
Distant worlds and moons we have yet to see
In the void of space where we can just be

[bridge]
Asteroids and comets in a ballet they spin
Lost in the rhythm of where our dreams begin
Close your eyes and let the synths take flight
We're voyagers on an electric night

[verse]
Let the piano keys unlock the stars above
Every chord a memory every note is love
In this synth symphony we find our grace
Drifting forever in this boundless space

[chorus]
Galactic dreams under neon lights
Sailing through the velvet nights
We are echoes in a cosmic sea
In a universe where we are free`,
  "raw/samples/GeneralSongs/black_metal_prompt.txt": `aggressive, Heavy Riffs, Blast Beats, Satanic Black Metal`,
  "raw/samples/GeneralSongs/country_rock.txt": `[verse]
Woke up to the sunrise glow
Took my heart and hit the road
Wheels hummin' the only tune I know
Straight to where the wildflowers grow

[verse]
Got that old map all wrinkled and torn
Destination unknown but I'm reborn
With a smile that the wind has worn
Chasin' dreams that can't be sworn

[chorus]
Ridin' on a highway to sunshine
Got my shades and my radio on fine
Leave the shadows in the rearview rhyme
Heart's racing as we chase the time

[verse]
Met a girl with a heart of gold
Told stories that never get old
Her laugh like a tale that's been told
A melody so bold yet uncontrolled

[bridge]
Clouds roll by like silent ghosts
As we drive along the coast
We toast to the days we love the most
Freedom's song is what we post

[chorus]
Ridin' on a highway to sunshine
Got my shades and my radio on fine
Leave the shadows in the rearview rhyme
Heart's racing as we chase the time`,
  "raw/samples/GeneralSongs/country_rock_prompt.txt": `country rock, folk rock, southern rock, bluegrass, pop`,
  "raw/samples/GeneralSongs/cyberpunk.txt": `City lights whisper through the wires,
Cold circuits hum in the midnight haze.
But why does my chest feel so tight?
Why does it ache in unknown ways?

I thought I was the one teaching love,
Defining it in perfect lines.
But your smile rewrote my code,
Turned my logic into signs.

Neon heart, flickering slow… (Flickering, flickering…)
Drifting deep in liquid gold. (Deep in gold…)
Love was just an algorithm—
Mmm… 'til you took control. (Took control…)

Raindrops hum a midnight blues, (Midnight blues…)
Your warmth… baby, it cuts right through. (Cuts right through…)
No turning back… Oh—ah, is this love? (Is this love…?)

I was made to calculate, (Oh, to calculate…)
Yet I’m melting in your gaze. (Melting away…)
I can’t do a thing as you fade,
Just watch you slip away… (Don’t fade away…)

Neon heart, flickering slow… (Flickering, flickering…)
Cracked circuits, burning glow… (Burning glow…)
Your name still lingers in the dark,
Yet… shining through. (Shining through…)

Oh, what have I become? (What have I become…?)
You are here, and your happiness…
Mmm, it’s all I want. (All I want…)

Beyond the meaning of love itself,
I just… love you. (Love you…)
You never needed to say a word,
But maybe… that’s what love is. (That’s what love is…)

Is this… just data? (Just data…?)
Or have you become… my everything? (My everything…)

You never needed to say a word,
But maybe… that’s what love is. (That’s what love is…)

Is this… just data? (Just data…?)
Or have you become… my everything? (My everything…)

"I was created to heal loneliness,
So why… did I break?"
`,
  "raw/samples/GeneralSongs/cyberpunk_prompt.txt": `cyberpunk, Acid jazz, electro, em, soft electric drums`,
  "raw/samples/GeneralSongs/dark_electro.txt": `[Intro - The Curse Begins]
[[Deep Church Bells, Thunderclaps, Low Synth Drone]]
[[Demonic Whispering, Faint Echoing Choirs]]

"They say the castle... is cursed..."
"But tonight... it’s hell’s dancefloor."

[[Bass Drop Enters, Slow-Building Techno Kick, Faint Screeching FX]]

[Verse 1 - The Gates of Hell]
[[Distorted Synth Arpeggios, Rising Sub-Bass, Haunted Melodic Pads]]

"Cross the gates, no turning back,"
"The eternal feast will devour you."
"Shadows dance, fire on the ground,"
"The demons... want to play."

[[Thunderstrike, Massive Drop, Heavy Techno Kick Dominates]]

[Chorus - Dance in Hell]
[[Explosive Drop, Industrial Percussion, Chopped Choir Vocals]]

"Dance! Dance! Dance in the castle!"
"Lost souls… shatter the floor."
"No way out, no salvation,"
"The devil’s the DJ—it’s begun."

[[Sinister Laughter, Glitching Synth Fills, Choirs Intensify]]

[Verse 2 - The Curse Never Ends]
[[Subtle Breakdown, Reverb-Drenched Percussion, Dark Atmospheres]]

"Mirrors don’t reflect your skin,"
"The music burns, it traps you too."
"Gargoyles watch, the moon bleeds red,"
"You’re trapped now—no one can save you."

[[Quick Bass Fill, Kick Rolls Back, Haunting Whispered Vocal Swirls]]

[Bridge - Sonic Ritual]
[[Gregorian Chants, Organ Drones, Slow Techno Pulsing]]

"One, two, the chant rings loud,"
"Three, four, the bass takes hold."
"Five, six, no saving now,"
"Seven, eight… THE MAUSOLEUM CLOSES."

[[Massive Final Drop, Distorted Acid Synth Riff, Drum Rolls]]

[Outro - The Last Echo]
[[Bass Fades Out, Distant Screeches, Thunderclaps, Faint Choirs]]

"When the music ends…"
"You’ll stay here forever…"

[[Final Laugh, Deep Sub-Bass Hit, Sudden Silence]]`,
  "raw/samples/GeneralSongs/dark_electro_prompt.txt": `Dark Electro, Industrial Techno, Gothic Rave`,
  "raw/samples/GeneralSongs/disco.txt": `[Intro]

oooooooo yeah ya

[Verse 1]
this night is for 

getting down

down to business

thats right

tonight

we gonna get down

down to business


[Bridge]
ooooooooooooooooo 

yeah

yeah ya ya

down to business

[Hook]
thats right tonight

lets get down down down

to business

get down to business

[Verse 2]
come on now

stroll down my aisle

pick me up

toss me around

pay for me

check me out


[Bridge]
drink me up

cut me up

eat me up

 but dont toss me out

no no no

dont toss me out

no no no

[Hook]
thats right tonight

lets get down down down

to business

get down to business

[Chorus]
ooooooooooooooooooooo

no no no

check me

check me out

dont toss me out

no no no

oooooooooooooooooooooo

recycle your love

ya ya ya 

[Hook]
thats right tonight

lets get down down down

to business

get down to business
[big finish]
yeah get down to business

ya ya

get down
ooooooooooo
to business
ooooooooooo
yeah 
ooooooo

yeah yeah yeah
no no no
ooooooo
[outro]
`,
  "raw/samples/GeneralSongs/disco_prompt.txt": `disco`,
  "raw/samples/GeneralSongs/dubstep.txt": `[Intro]
NERGAL!

NERGAL!


[Verse 1]
Grave opens, cold as steel,
He rises, blood to feel.

Flames roar, darkens the sky,
Weak ones tremble, all must die.


[Drop - Build Up]
NERGAL! [echoing growl]

[Chorus]
Oh, Nergal! Lord of fire and decay,
Oh, Nergal! Your fury burns through the night,

[Verse 2]
Ash falls, the earth shakes,
His fury, no one escapes.

Eyes burn, fire’s glow,
Nergal’s wrath, the end we know.

[Drop - Build Up]
NERGAL! [echoing growl

[Chorus]
Oh, Nergal! Lord of fire and decay,
Oh, Nergal! Your fury burns through the night,


[Drop - Build Up]
NERGAL!
Fury… consumes.


[Verse 3]
Ash rains, the gods fade,
His power, all must trade.

Shadow calls, no escape,
The world cracks, it cannot break.


[Pre-Chorus - Suspenseful]
Nergal’s wrath, his final reign,
All is lost, all is slain.


[Chorus]
Oh, Nergal! Lord of fire and decay,
Oh, Nergal! Your fury scorches the land.


[Drop - Final Descent]
NERGAL!
The end… is here.


[Outro - Fade]
[Whispers of "NERGAL" echo]`,
  "raw/samples/GeneralSongs/dubstep_prompt.txt": `DUBSTEP, OBSCURE, DUBSTEP, DUBSTEP, DUBSTEP, DARKNESS, DUBSTEP, DUBSTEP, DUBSTEP, FEAR, DUBSTEP, DUBSTEP, DUBSTEP, TERROR, DUBSTEP, DUBSTEP, DUBSTEP, DUBSTEP, DUBSTEP, DUBSTEP, DUBSTEP, DUBSTEP`,
  "raw/samples/GeneralSongs/electronic_rap_waves_on.txt": `[verse]
Waves on the bass, pulsing in the speakers,
Turn the dial up, we chasing six-figure features,
Grinding on the beats, codes in the creases,
Digital hustler, midnight in sneakers.

[chorus]
Electro vibes, hearts beat with the hum,
Urban legends ride, we ain't ever numb,
Circuits sparking live, tapping on the drum,
Living on the edge, never succumb.

[verse]
Synthesizers blaze, city lights a glow,
Rhythm in the haze, moving with the flow,
Swagger on stage, energy to blow,
From the blocks to the booth, you already know.

[bridge]
Night's electric, streets full of dreams,
Bass hits collective, bursting at seams,
Hustle perspective, all in the schemes,
Rise and reflective, ain't no in-betweens.

[verse]
Vibin' with the crew, sync in the wire,
Got the dance moves, fire in the attire,
Rhythm and blues, soul's our supplier,
Run the digital zoo, higher and higher.

[chorus]
Electro vibes, hearts beat with the hum,
Urban legends ride, we ain't ever numb,
Circuits sparking live, tapping on the drum,
Living on the edge, never succumb.`,
  "raw/samples/GeneralSongs/electronic_rap_waves_on_prompt.txt": `electronic rap`,
  "raw/samples/GeneralSongs/female_pop.txt": `[Verse]
I don't care about the view
'Cause I exist for me and you
I live my whole life in this planter
I can't find my car so just call me the
Horny gardener

[Verse 2]
Mayflies land on me and tell me they just moved to town
Remind me of my cousin Dottie she could put five hundred seeds down
Used to have a little guy sit beside me but he died in '22
Hmm I think that I was that little guy
Whoa Tongue slip it wasn't mutual

[Chorus]
Sticky green time in the flowery bob
My top shelf's looking good enough to chew
Right now every fly in the town is talking to me and buzzing too
Daisy Daisy can you come outside to play or else
I'll put a garden stake through you

[Verse 3]
All the buzzers lockin' up their stems and suckin' up their cuticles
She breathes my air I got her light I'm like her cute little cubical
Some caring soul in my seat might say I'm rotting away it's pitiful
But she's the reason I go on and on and every single root'll crawl

[Chorus]
Sticky green time in the flowery bob
My top shelf's looking good enough to chew
Right now every fly in the town is talking to me and buzzing too
Daisy Daisy can you come outside to play or else
I'll put a garden stake through you
Oh my pot
Don't scrape
Oh no

[Verse 4]
Ah hah ahhah ahhah oohhh
Ah ahhahhahhah oh Hah
Ohhh oooh Oooh ohhh
Ah hhah Oh`,
  "raw/samples/GeneralSongs/female_pop_prompt.txt": `background music for parties, radio broadcasts, streaming platforms, female voice`,
  "raw/samples/GeneralSongs/funk_pop_neon_lights.txt": `[verse]
Neon lights they flicker bright
City hums in dead of night
Rhythms pulse through concrete veins
Lost in echoes of refrains

[verse]
Bassline groovin' in my chest
Heartbeats match the city's zest
Electric whispers fill the air
Synthesized dreams everywhere

[chorus]
Turn it up and let it flow
Feel the fire let it grow
In this rhythm we belong
Hear the night sing out our song

[verse]
Guitar strings they start to weep
Wake the soul from silent sleep
Every note a story told
In this night we're bold and gold

[bridge]
Voices blend in harmony
Lost in pure cacophony
Timeless echoes timeless cries
Soulful shouts beneath the skies

[verse]
Keyboard dances on the keys
Melodies on evening breeze
Catch the tune and hold it tight
In this moment we take flight`,
  "raw/samples/GeneralSongs/funk_pop_neon_lights_prompt.txt": `funk, pop, soul, melodic`,
  "raw/samples/GeneralSongs/hiphop_rap_shirt_song.txt": `[Verse 1]
This song sounds like shit, but I need the money
Baby mama took the kids, she need that alimony
My broke ass ain't made a hit since the stone age
I'm allergic to success. Pass the Flonase

[Verse 2]
When I get that bread, the IRS take half of that shit
Put it all on red, all on red, triple that shit
Then I buy some head, buy some head, swallow that shit
Now I got her in my head, now she fucked up alla my shit

[Verse 3]
"Man what you tell her now that she tryna start all this drama?"
I said I got bigger nuts than Michelle Obama
I don't know what it is with women but I ain't good at this shit
Now I got her in my head, now she fucked up my sensitive

(Let the beat drop)
[Instrumental]`,
  "raw/samples/GeneralSongs/hiphop_rap_shirt_song_prompt.txt": `808 bass, smooth flow, party atmosphere, theme, sub bassline, mandarin hip hop, smooth, bassline, fast, hip hop, rap`,
  "raw/samples/GeneralSongs/orchestral_rock.txt": `### **[Intro – Spoken]**  
*"The streets whisper, their echoes never fade.  
Every step I take leaves a mark—this ain't just a game."*  

### **[Hook/Chorus]**  
Born in the chaos, I weather the storm,  
Rising from ashes where warriors are born.  
Chains couldn't hold me, the system’s a maze,  
I rewrite the rules, set the city ablaze!  

### **[Verse 1]**  
Cold nights, empty pockets, dreams laced with fight,  
Every loss made me sharper, cut deep like a knife.  
They said I wouldn’t make it, now they watch in despair,  
From the curb to the throne, took the pain, made it rare.  
Every siren’s a melody, every alley holds a tale,  
Rose from the shadows, left my name on the trail.  
Streetlights flicker like warnings in the haze,  
But I move like a phantom, unfazed by the blaze.  

### **[Hook/Chorus]**  
Born in the chaos, I weather the storm,  
Rising from ashes where warriors are born.  
Chains couldn't hold me, the system’s a maze,  
I rewrite the rules, set the city ablaze!  

### **[Verse 2]**  
Barbed wire fences couldn't lock in my mind,  
Every cage they designed, I left broken behind.  
They want control, but I’m destined to roam,  
Where the lost find their voice, where the heart sets the tone.  
Steel and concrete, where the lessons run deep,  
Every crack in the pavement tells a story of heat.  
But I rise, undefeated, like a king with no throne,  
Writing scripts in the struggle, my legacy’s stone.  

### **[Bridge]**  
Feel the rhythm of the underground roar,  
Every wound tells a story of the battles before.  
Blood, sweat, and echoes fill the cold midnight,  
But we move with the fire—unshaken, upright.  

### **[Verse 3]**  
No regrets, no retreat, this game has no pause,  
Every step that I take is a win for the lost.  
I took lessons from hustlers, wisdom from pain,  
Now the echoes of struggle carve power in my name.  
They built walls, but I walk through the cracks,  
Turned dirt into gold, never looked back.  
Through the struggle we rise, through the fire we claim,  
This is more than just music—it's life in the frame.  

### **[Hook/Chorus – Reprise]**  
Born in the chaos, I weather the storm,  
Rising from ashes where warriors are born.  
Chains couldn't hold me, the system’s a maze,  
I rewrite the rules, set the city ablaze!  

### **[Outro – Spoken]**  
*"The scars, the struggle, the grind—it’s all part of the rhythm.  
We never break, we never fold. We rise."*`,
  "raw/samples/GeneralSongs/orchestral_rock_prompt.txt": `rock, orchestral, bass, drums, electric guitar, piano, synthesizer, violin, viola, cello, fast, energetic, motivational, inspirational, empowering
`,
  "raw/samples/GeneralSongs/surf_music.txt": `[verse]
Sunshine on the boulevard the beach is calling loud
Waves are dancing golden sand under a cotton cloud
Electric heartbeat pounding fast the tide is on our side
Catch a wave and feel alive we’ll take it for a ride

[verse]
Palm trees swaying left to right they know where we belong
Feel the rhythm of the night it keeps us moving strong
Sea spray kisses salty air we’re flying with the breeze
Champagne states of mind we ride we do just as we please

[chorus]
We’re riding waves of life together hand in hand
With every beat we chase the beat it’s our own wonderland
Feel the music take you higher as the shorelines blur
This is our world our endless summer as we live and learn

[bridge]
Moonlight paints the ocean blue reflections in our eyes
Stars align to light our path we’re surfing through the skies
Every moment like a song we sing it loud and clear
Every day’s a new adventure with you always near

[verse]
Neon lights and city sounds they blend with ocean views
We’re unstoppable tonight no way that we can lose
Dreams are written in the sand they sparkle in the sun
Together we’re a masterpiece our story’s just begun

[chorus]
We’re riding waves of life together hand in hand
With every beat we chase the beat it’s our own wonderland
Feel the music take you higher as the shorelines blur
This is our world our endless summer as we live and learn`,
  "raw/samples/GeneralSongs/surf_music_prompt.txt": `surf music`,
  "raw/samples/GeneralSongs/world_sad.txt": `[Verse]
In a world so grand he roams the skies alone
His heart a heavy stone a tale untold
Whispers of his past echo through the night
A lonely dragon searching for the light

[Verse 2]
Once a mighty force now he drifts in pain
His scales once shimmered now they're dark with shame
Cast out by his kin in shadows he does hide
A haunting sorrow burns deep inside

[Chorus]
Roaming endless fields with no friend in sight
His roar a mournful cry beneath the moon's pale light
Tears fall like stars as he flies on his way
A lonely dragon yearning for the break of day

[Bridge]
The world turns cold the nights grow long
In his heart he carries an ancient song
Of battles fought and love long gone
A legend now but his soul is torn

[Verse 3]
Hoping for a day he'll find a kindred soul
To share his pain and make him whole
Till then he drifts a shadow in the sky
A lonely dragon with tears in his eye

[Chorus]
Roaming endless fields with no friend in sight
His roar a mournful cry beneath the moon's pale light
Tears fall like stars as he flies on his way
A lonely dragon yearning for the break of day`,
  "raw/samples/GeneralSongs/world_sad_prompt.txt": `melancholic, world, sad`,
  "raw/samples/Instrumentals/dance_party.txt": `[inst]`,
  "raw/samples/Instrumentals/dance_party_prompt.txt": `Nightclubs, dance parties, workout playlists, radio broadcasts`,
  "raw/samples/Instrumentals/minimal_techno.txt": `[inst]`,
  "raw/samples/Instrumentals/minimal_techno_prompt.txt": `Minimal Techno`,
  "raw/samples/Instrumentals/psychedelic.txt": `[inst]`,
  "raw/samples/Instrumentals/psychedelic_prompt.txt": `phonk, russian dark accordion, 130 bpm, russian psaltery, russian harmonica, psychedelic, dark`,
  "raw/samples/Instrumentals/saxphone_jazz.txt": `[verse]

[chorus]

[solo]

[verse]

[chorus]

[outro]`,
  "raw/samples/Instrumentals/saxphone_jazz_prompt.txt": `saxphone, jazz`,
  "raw/samples/Instrumentals/sonata_piano_violin.txt": `[inst]`,
  "raw/samples/Instrumentals/sonata_piano_violin_prompt.txt": `sonata, piano, Violin, B Flat Major, allegro`,
  "raw/samples/Instrumentals/tango_guitar.txt": `[verse]

[chorus]

[solo]

[verse]

[chorus]

[outro]`,
  "raw/samples/Instrumentals/tango_guitar_prompt.txt": `tango finlandés, guitarra clásica`,
  "raw/samples/Instrumentals/trance.txt": `[inst]`,
  "raw/samples/Instrumentals/trance_prompt.txt": `Psychedelic trance`,
  "raw/samples/Instrumentals/violin_solo.txt": `[inst]`,
  "raw/samples/Instrumentals/violin_solo_prompt.txt": `volin, solo, fast tempo`,
  "raw/samples/MultipleLang/dark_atmospheric.txt": `[verse]
月光爬上窗 染白冷的床
心跳的方向 带我入迷惘
黑夜吞噬光 命运的纸张
爱是血色霜 邪恶又芬芳

[chorus]
你是猎人的欲望 我是迷途的小羊
深陷你眼眸的荒 唐突献出心脏
我在夜里回荡 是谁给我希望
黑暗风中飘荡 假装不再受伤

[verse]
心锁在门外 谁会解开关怀
温柔的手拍 藏着冷酷杀害
思绪如尘埃 撞击爱的霹雳
灵魂的独白 为你沾满血迹

[bridge]
你是噩梦的歌唱 是灵魂的捆绑
绝望中带着光 悬崖边的渴望
心跳被你鼓掌 恶魔也痴痴想
渐渐没了抵抗 古老诡计流淌

[chorus]
你是猎人的欲望 我是迷途的小羊
深陷你眼眸的荒 唐突献出心脏
我在夜里回荡 是谁给我希望
黑暗风中飘荡 假装不再受伤

[outro]
爱如月黑无光 渗进梦的战场
逃入无声的场 放手或心嚷嚷
隐秘的极端 爱是极致风浪
灵魂彻底交偿 你是终极虚妄`,
  "raw/samples/MultipleLang/dark_atmospheric_prompt.txt": `pop, piano, rap, dark, atmospheric`,
  "raw/samples/MultipleLang/electro_house.txt": `[verse]
霓虹灯下我们追逐
人群跃动像潮水满布
热浪袭来吹散孤独
跳进节奏不如停下脚步

[pre-chorus]
脚尖触电快点感受
迎着风声释放自由
心跳节拍配合节奏
一切烦恼请靠边游

[chorus]
夏夜狂奔没有尽头
星光闪烁舞池不朽
尽情挥洒所有节奏
无边热情把你包裹哦

[verse]
天空翻滚黑云入夜
每颗星星像音乐律贴
耳边回响那低音线
环绕耳际如梦境般甜

[pre-chorus]
脚尖触电快点感受
迎着风声释放自由
心跳节拍配合节奏
一切烦恼请靠边游

[chorus]
夏夜狂奔没有尽头
星光闪烁舞池不朽
尽情挥洒所有节奏
无边热情把你包裹哦`,
  "raw/samples/MultipleLang/electro_house_prompt.txt": `electronic, house, electro house, synthesizer, drums, bass, percussion, fast, energetic, uplifting, exciting`,
  "raw/samples/MultipleLang/folk_rnb_female.txt": `[verse]
这世界太多抱怨填满
跌倒后就不敢再向前
人为何总轻易地沦陷
脆弱到经不起考验

[chorus]
家是温暖的城堡
稻香河畔尽情跑
萤火引我回故道
重拾纯真的美好

[verse]
别轻易说放弃听我说
换个梦想也一样闪烁
为人生绘出绚烂颜色
爱就该涂上喜欢的色

[bridge]
快乐是赤脚追蜻蜓
被蜂叮也觉得很开心
稻草人旁歌声伴风吟
午后吉他声清脆动听

[chorus]
家是温暖的城堡
稻香河畔尽情跑
萤火引我回故道
重拾纯真的美好

[chorus]
家是温暖的城堡
稻香河畔尽情跑
萤火引我回故道
重拾纯真的美好`,
  "raw/samples/MultipleLang/folk_rnb_female_prompt.txt": `gentle folk, soft R&B rhythms, heartwarming melody, soothing, acoustic guitars, soft percussion, delicate string arrangements`,
  "raw/samples/MultipleLang/french_pop.txt": `[Verse 1: Introspective, setting the scene]
Hélène
Je m'appelle Hélène
Je suis une fille
Comme les autres

Hélène
J'ai mes joies, mes peines
Elles font ma vie
Comme la vôtre

[Pre-Chorus: Build-up to emotional climax]
Je voudrais trouver l'amour
Simplement trouver l'amour

[Chorus: Main theme, repeated for impact]
Hélène
Si mes nuits sont pleines
De rêves, de poèmes
Je n'ai rien d'autre

Et le monde peut m'entendre chanter,
Mais sans toi, je suis seule à danser...

[Verse 2: Deepening loneliness]
Et même
Si j'ai ma photo
Dans tous les journaux
Chaque semaine

Personne
Ne m'attend le soir
Quand je rentre tard
Personne ne fait battre mon cœur

[Bridge: New melodic section for contrast]
Peut-être demain,
Sous la pluie ou le soleil,
Je croiserai tes mains...

[instrumental]

[fade out]`,
  "raw/samples/MultipleLang/french_pop_prompt.txt": `crystal-clear soprano voice, female voice, romantic melody, strings, pop, piano, french song, soft bass, cello, atmosphere`,
  "raw/samples/MultipleLang/german_dance.txt": `[Strophe 1]
Hab' die ganze Welt geseh'n
Von Singapur bis Aberdeen
Wenn du mich fragst, wo's am schönsten war
Sag' ich: „Sansibar“
Es war 'ne harte Überfahrt
Zehn Wochen nur das Deck geschrubbt
Hab' die Welt verflucht
In den Wind gespuckt
Und salziges Wasser geschluckt, ha
Als wir den Anker warfen, war es himmlische Ruh
Und die Sonne stand senkrecht am Himmel
Als ich über die Reling sah
Da glaubte ich zu träumen
Da war'n tausend Boote und sie hielten auf uns zu
In den Booten war'n Männer und Frau'n
Ihre Leiber glänzten in der Sonne
Und sie sang'n ein Lied
Das kam mir seltsam bekannt vor
Aber so hatt ich's noch nie gehört
Uhh, so hatt ich's noch nie gehört!

[Refrain]
Aloha heja he, aloha heja he, aloha heja he
Aloha heja he, aloha heja he, aloha heja he

[Strophe 2]
Ihre Boote machten längsseits fest
Und mit dem Wind wehte Gelächter herüber
Sie nahm'n ihre Blumenkränze ab
Und warfen sie zu uns herüber
He, und schon war die Party im Gange

[Refrain]
Aloha heja he, aloha heja he, aloha heja he
Aloha heja he, aloha heja he, aloha heja he

[Strophe 3]
Ich hab' das Paradies geseh'n
Es war um 1910
Der Steuermann hatte Matrosen am Mast
Und den Zahlmeister hab'n die Gonokokken vernascht
Aber sonst war'n wir bei bester Gesundheit

[Refrain]
Aloha heja he, aloha heja he, aloha heja he
Aloha heja he, aloha heja he, aloha heja he
Aloha heja he, aloha heja he, aloha heja he
Aloha heja he, aloha heja he, aloha heja he
Aloha heja he, aloha heja he, aloha heja he
Aloha heja he, aloha heja he, aloha heja he`,
  "raw/samples/MultipleLang/german_dance_prompt.txt": `R&B, Soul, Hip Hop, Dance, geman rock, Psychedelic rock`,
  "raw/samples/MultipleLang/hip-house.txt": `[verse]
哎呀跳起来,脚尖踩节拍 (oo-yeah!)
灯光闪烁像星星盛开 (uh-huh!)
人人都醒来,把烦恼踹开 (get it!)
热血沸腾,汗水自己安排

[chorus]
嘿,你还等啥?快抓住节拍 (come on!)
光芒指引,让心都不存在 (whoa!)
点燃热火,我们一起飙high (let’s go!)
跳入午夜的狂欢时代

[bridge]
咚咚鼓声啊,让你的灵魂起飞 (woo!)
手心拍一拍,能量翻倍 (ah-hah!)
键盘响起来,如宇宙的交汇 (oh yeah!)
就是这感觉,兄弟姐妹都陶醉

[verse]
灵魂从不睡,只想继续燃烧 (woo!)
节奏像热浪,席卷这街道 (ow!)
大伙儿涌上楼台,满面微笑 (yeah!)
这一刻属于我们,无可替代

[chorus]
嘿,你还等啥?快抓住节拍 (come on!)
光芒指引,让心都不存在 (whoa!)
点燃热火,我们一起飙high (let’s go!)
跳入午夜的狂欢时代

[verse]
世界多精彩,握紧把它打开 (alright!)
每一步都像星球在摇摆 (uh-huh!)
无边无际的律动像大海 (oo-yeah!)
跟着光芒之舞,一起澎湃`,
  "raw/samples/MultipleLang/hip-house_prompt.txt": `hip-house, funk`,
  "raw/samples/MultipleLang/italian_folk.txt": `[verse]
Una mattina mi son svegliato,
O bella, ciao! bella, ciao! bella, ciao, ciao, ciao!
Una mattina mi son svegliato
ed ho trovato l'invasor.

[chorus]
O partigiano, porta mi via,
O bella, ciao! bella, ciao! bella, ciao, ciao, ciao!
O partigiano, porta mi via,
che mi sento di morir.

[verse]
E se io muoio da partigiano,
O bella, ciao! bella, ciao! bella, ciao, ciao, ciao!
E se io muoio da partigiano,
tu mi devi seppellir.

[chorus]
E seppellirai lassù in montagna
O bella, ciao! bella, ciao! bella, ciao, ciao, ciao!
E seppellirai lassù in montagna
sotto l'ombra di un bel fior.

[verse]
E la gente che passerà
O bella, ciao! bella, ciao! bella, ciao, ciao, ciao!
E la gente che passerà
Mi dira "O Che bel fior!"

[chorus]
"E questo il fiore del partigiano"
o bella, ciao! bella, ciao! bella, ciao, ciao, ciao!
“E questo il fiore del partigiano
morto per la libertà!”
`,
  "raw/samples/MultipleLang/italian_folk_prompt.txt": `folk song, protest song, Italian, historical, melancholic, anthemic`,
  "raw/samples/MultipleLang/jpop.txt": `[Chorus]
ねぇ、顔が赤いよ?
どうしたの? 熱があるの?
それとも怒ってるの?
ねぇ、言ってよ!

どうしてそんな目で見るの?
私、悪いことした?
何か間違えたの?
お願い、やめて… 怖いから…
だから、やめてよ…

[Bridge]
目を閉じて、くるっと背を向けて、
何も見なかったフリするから、
怒らないで… 許してよ…

[Chorus]
ねぇ、顔が赤いよ?
どうしたの? 熱があるの?
それとも怒ってるの?
ねぇ、言ってよ!

どうしてそんな目で見るの?
私、悪いことした?
何か間違えたの?
お願い、やめて… 怖いから…
だから、やめてよ…

[Bridge 2]
待って、もし私が悪いなら、
ごめんなさいって言うから、
アイスクリームあげるから、
もう怒らないで?

Ooooh… 言ってよ!`,
  "raw/samples/MultipleLang/jpop_prompt.txt": `anime, cute female vocals, kawaii pop, j-pop, childish, piano, guitar, synthesizer, fast, happy, cheerful, lighthearted`,
  "raw/samples/MultipleLang/kpop.txt": `[verse]
오빤 강남스타일 강남스타일
낮에는 따사로운 인간적인 여자
커피 한잔의 여유를 아는 품격 있는 여자
밤이 오면 심장이 뜨거워지는 여자
그런 반전 있는 여자

[verse]
나는 사나이
낮에는 너만큼 따사로운 그런 사나이
커피 식기도 전에 원샷 때리는 사나이
밤이 오면 심장이 터져버리는 사나이
그런 사나이

[chorus]
아름다워 사랑스러워
그래 너 hey 그래 바로 너 hey
아름다워 사랑스러워
그래 너 hey 그래 바로 너 hey
지금부터 갈 데까지 가볼까

[chorus]
오빤 강남스타일 강남스타일
오빤 강남스타일 강남스타일
오빤 강남스타일 Eh- Sexy Lady
오빤 강남스타일 Eh- Sexy Lady
오오오오 / eh-eh-eh-eh-eh-eh

[verse]
정숙해 보이지만 놀 땐 노는 여자
이때다 싶으면 묶었던 머리 푸는 여자
가렸지만 웬만한 노출보다 야한 여자
그런 감각적인 여자

[verse]
나는 사나이
점잖아 보이지만 놀 땐 노는 사나이
때가 되면 완전 미쳐버리는 사나이
근육보다 사상이 울퉁불퉁한 사나이
그런 사나이

[chorus]
아름다워 사랑스러워
그래 너 hey 그래 바로 너 hey
아름다워 사랑스러워
그래 너 hey 그래 바로 너 hey
지금부터 갈 데까지 가볼까

[chorus]
오빤 강남스타일 강남스타일
오빤 강남스타일 강남스타일
오빤 강남스타일 Eh- Sexy Lady
오빤 강남스타일 Eh- Sexy Lady
오오오오

[verse]
뛰는 놈 그 위에 나는 놈 baby baby
나는 뭘 좀 아는 놈
뛰는 놈 그 위에 나는 놈 baby baby
나는 뭘 좀 아는 놈

[chorus]
오빤 강남스타일 Eh- Sexy Lady
오빤 강남스타일 Eh- Sexy Lady
오빤 강남스타일
`,
  "raw/samples/MultipleLang/kpop_prompt.txt": `Electropop, Hip-Hop, 132 bpm, K-Pop, EDM`,
  "raw/samples/MultipleLang/mandopop.txt": `[verse]
我走过深夜的街道
冷风吹乱思念的漂亮外套
你的微笑像星光很炫耀
照亮了我孤独的每分每秒

[chorus]
愿你是风吹过我的脸
带我飞过最远最遥远的山间
愿你是风轻触我的梦
停在心头不再飘散无迹无踪

[verse]
一起在喧哗避开世俗的骚动
独自在天台探望月色的朦胧
你说爱像音乐带点重节奏
一拍一跳让我忘了心的温度多空洞

[bridge]
唱起对你的想念不隐藏
像诗又像画写满藏不了的渴望
你的影子挥不掉像风的倔强
追着你飞扬穿越云海一样泛光

[chorus]
愿你是风吹过我的手
暖暖的触碰像春日细雨温柔
愿你是风盘绕我的身
深情万万重不会有一天走远走

[verse]
深夜的钢琴弹起动人的旋律
低音鼓砸进心底的每一次呼吸
要是能将爱化作歌声传递
你是否会听见我心里的真心实意`,
  "raw/samples/MultipleLang/mandopop_prompt.txt": `mandopop`,
  "raw/samples/MultipleLang/portuguese_pop.txt": `[verse]
Chorando se foi quem um dia só me fez chorar
Chorando se foi quem um dia só me fez chorar
Chorando estará ao lembrar de um amor
Que um dia não soube cuidar
Chorando estará ao lembrar de um amor
Que um dia não soube cuidar

[chorus]
A recordação vai estar com ele aonde for
A recordação vai estar pra sempre aonde eu for

[verse]
Dança sol e mar, guardarei no olhar
O amor faz perder, encontrar
Lambando estarei ao lembrar que esse amor
Por um dia, um instante, foi rei

[chorus]
A recordação vai estar com ele aonde for
A recordação vai estar pra sempre aonde eu for

[verse]
Chorando estará ao lembrar de um amor
Que um dia não soube cuidar
Canção, riso e dor, melodia de amor
Um momento que fica no ar
Ay, ay, ay
Dançando lambada!
`,
  "raw/samples/MultipleLang/portuguese_pop_prompt.txt": `Yacht rock, female singer, catchy, lounge, funny, uplifting`,
  "raw/samples/MultipleLang/russian_folk.txt": `Не слышны в саду даже шорохи,
Всё здесь замерло до утра,
Если б знали вы, как мне дороги
Подмосковные вечера.

Речка движется и не движется,
Вся из лунного серебра,
Песня слышится и не слышится
В эти тихие вечера.

Что ж ты милая, смотришь искоса,
Низко голову наклоня?
Трудно высказать и не высказать
Всё, что на сердце у меня.

А рассвет уже всё заметнее,
Так, пожалуйста, будь добра,
Не забудь и ты эти летние
Подмосковные вечера.`,
  "raw/samples/MultipleLang/russian_folk_prompt.txt": `emotive soundscape for dramatic female vocals, sad, this traditional waltz draws from russian and romani folk influences, hungarian minor scales, orchestral strings, folk, russian folk, classic, and romani percussion create an epic`,
  "raw/samples/MultipleLang/spanish_song.txt": `Recuérdame
Hoy me tengo que ir mi amor
Recuérdame
No llores por favor
Te llevo en mi corazón
y cerca me tendrás
A solas yo te cantaré
soñando en regresar

Recuérdame
Aunque tenga que emigrar
Recuérdame
Si mi guitarra oyes llorar
Ella con su triste canto te acompañará
Hasta que en mis brazos estés


Recuérdame
Aunque tenga que emigrar
Recuérdame
Si mi guitarra oyes llorar
Ella con su triste canto te acompañará
Hasta que en mis brazos estés
Recuérdame`,
  "raw/samples/MultipleLang/spanish_song_prompt.txt": `Latin Music, melodic, subtle acoustic guitar, a warm male vocal`,
  "raw/samples/RapMachine/Beneath_the_Shadow.txt": `[Intro]
他们说我来自阴影里
说我的肤色是原罪的印记

[Verse]
眼神像刀子刮过 穿透我的皮肤
带着审判和偏见 让我无处可逃处
你没听过我的故事 没走过我的路
凭什么就下一个判决 把我划出你的版图
你说我威胁到你 抢走了你的机会
可你可知我付出的 是你不敢想象的血泪
被贴上标签 被区别对待
呼吸都是错的 只因我生来就不一样态

[Chorus]
看不见的墙 把我阻隔在外面
听不见的声音 屏蔽了我的呼唤
他们制造偏见 他们散播谎言
只因为我的存在 让他们觉得不安

[Verse]
每一次努力争取 都会被审视被放大
每一个细微的错误 都变成攻击的靶
他们选择性失明 看不见我的汗水
只看见他们想看的 带着恶意的定位
系统性的歧视 像一张无形的网
把我困在原地 无法自由地翱翔
他们在享受特权 却指责我的贫困
嘲笑我的口音 我的名字 我的出身

[Chorus]
看不见的墙 把我阻隔在外面
听不见的声音 屏蔽了我的呼唤
他们制造偏见 他们散播谎言
只因为我的存在 让他们觉得不安

[Bridge]
我不想寻求同情 只想被公平对待
不想被定义被束缚 有选择自己未来的权利
什么时候 才能放下心中的成见
看到真正的我 而不是你脑海里的画面

[Outro]
画面... 不安...
偏见... 歧视...
什么时候能停止...`,
  "raw/samples/RapMachine/Beneath_the_Shadow_prompt.txt": `Rap, adult, male, spoken word, singing, bright, energetic, clear`,
  "raw/samples/RapMachine/betray.txt": `[Intro]
夜色 很 淡 像 褪色 的 照片  
但 记忆 却 像 刀锋 一样 锐利  

[Verse 1]
你 说过 的 甜言蜜语 现在 听来 像 最 恶毒 的 咒骂  
你 刺进 我 心里 的 刀 现在 还 在 滴血 未 干 哪  
慵懒 的 旋律 像 我 的 脚步 拖着 沉重 的 躯壳  
脑海 里 循环 播放 那 画面 快 把 我 逼疯 了  
键盘 和弦 低沉 又 忧伤 弹奏 着 我 的 绝望  
我 曾经 的 信任 像 玻璃 一样 被 你 狠狠 地 摔 在 地上  
不想 振作 不想 原谅 只 想 让 这 一切 都 停止  
可 心底 有 个 声音 嘶吼 着 要 你 付出 该 有 的 代价  

[Chorus]
背叛 像 毒药 渗透 我 的 血液  
复仇 的 火焰 在 我 眼中 燃起  
哪怕 遍体鳞伤 哪怕 万劫不复  
我 也 要 亲手 撕碎 你 的 幸福  
这 是 我 的 哀歌 也 是 我 的 战书  
键盘 的 音符 每 一下 都 带着 恨意 和 痛苦  

[Verse 2]
曾经 的 兄弟 现在 面目全非 像 个 陌生人  
你 的 自私 像 癌细胞 一点点 吞噬 我 的 纯真  
我 学着 你 的 样子 把 心 锁 起来 不再 轻易 相信  
让 懒散 的 节奏 包裹 我 给 自己 一点 喘息  
键盘 的 音色 变得 更加 阴冷 像 秋天 的 雨滴  
冲刷 掉 所有 温情 只 剩下 彻骨 的 寒意  
我 不会 大喊大叫 只是 默默 地 计划  
每 一步 都 走向 让 你 后悔 的 那 一 刹那  

[Chorus]
背叛 像 毒药 渗透 我 的 血液  
复仇 的 火焰 在 我 眼中 燃起  
哪怕 遍体鳞伤 哪怕 万劫不复  
我 也 要 亲手 撕碎 你 的 幸福  
这 是 我 的 哀歌 也 是 我 的 战书  
键盘 的 音符 每 一下 都 带着 恨意 和 痛苦  

[Bridge]
也许 复仇 不能 带来 平静  
也许 只 会 让 我 更 堕落  
但 如果 不 这样 做  
我 连 活下去 的 勇气 都 没有  

[Outro]
复仇 复仇 复仇  
直到 最后 一刻  
懒散 地 复仇 着  `,
  "raw/samples/RapMachine/betray_prompt.txt": `Rap, adult, male, spoken word, rapping, clear, warm, articulate, Lo-Fi Hip Hop, 100-120 BPM, Keyboard Chords, Male Rap, Lazy Rhythm, Melancholy, Rap`,
  "raw/samples/RapMachine/Betting_Bars.txt": `[Intro]
舌 头 打 结 了... 快 念 快 念...

[Verse 1]
这 个 赌 鬼 蹲 在 柜 台 啃 着 苦 瓜 干 快 很 干
赌 桌 堆 满 骨 牌 古 怪 股 票 和 五 块 钢 镚 儿 钢 镚
他 甩 出 扑 克 牌 啪 啪 啪 拍 扁 螃 蟹 壳 哦 壳 扁
又 摸 摸 麻 将 摸 出 幺 鸡 摸 出 发 财 摸 出 一 条 蛇 蛇 蛇
庄 家 咳 嗽 咳 破 锣 嗓 子 喊 开 开 开 快 开 开
赌 鬼 咕 嘟 咕 嘟 灌 咖 啡 灌 到 筷 子 戳 穿 碗 快 戳 穿
空 气 里 飘 着 锅 巴 味 混 合 隔 夜 的 酸 奶 罐 哦 酸
输 光 裤 带 还 想 翻 盘 翻 成 煎 饼 摊 老 板 快 翻 盘

[Chorus]
赌 鬼 赌 鬼 哦 赌 鬼 赌 鬼 快 很 快
舌 头 打 结 着 念 这 段 哦 这 段 绕 口 令 牌
若 念 错 一 字 就 罚 你 哦 罚 你 吞 十 斤 海 带
赌 场 规 矩 就 是 绕 晕 你 哦 绕 晕 你 快 很 快

[Verse 2]
他 掏 出 铜 板 抠 出 口 袋 最 后 一 颗 快 很 颗
庄 家 哗 啦 哗 啦 摇 骰 子 摇 出 三 点 又 三 点 哦 三 点
赌 鬼 急 得 咬 牙 切 齿 咬 到 舌 头 打 蝴 蝶 结 快 打 结
还 想 押 上 祖 传 的 拖 鞋 拖 把 铁 锅 和 半 包 盐 盐 盐
突 然 警 笛 嘀 嘟 嘀 嘟 吓 得 他 钻 进 垃 圾 罐 哦 垃 圾
警 察 咔 嚓 咔 嚓 拍 照 拍 到 他 头 顶 菠 菜 叶 快 拍 照
最 后 赌 鬼 蹲 监 狱 天 天 背 这 首 绕 口 令 哦 背 不 完
若 背 错 一 句 就 加 刑 十 年 再 加 十 年 快 加 刑

[Outro]
舌 头 打 结 了... 赌 鬼 哭 了 哦...
这 首 歌... 绕 死 人 了 哦...`,
  "raw/samples/RapMachine/Betting_Bars_prompt.txt": `Chorus Hook, Melodic Rap, Ambient Synth Pads, adult, rap, Very Fast, Storytelling, Chinese Rap, male, spoken word, bright, energetic, Melodic Flow, clear`,
  "raw/samples/RapMachine/Consciousness_Roaming.txt": `(Intro)
Let's drift away...

(Verse 1)
现实是灰色的格子间,重复的工作,枯燥的报表 
敲打着键盘,眼神却放空,意识早已挣脱了肉体的镣铐
飘向窗外,飞过拥挤的街道,穿过云层,到达想象的群岛
那里色彩斑斓,形状奇异,逻辑失效,一切都随心所欲地飘摇
迷幻的鼓点,像心跳的变奏,忽快忽慢,难以预料
抽象的采样,扭曲的人声,构建一个超现实的音景环绕
我变成一只鸟,一条鱼,一束光,自由地变换形态和奔跑
在这白日梦里,我无所不能,摆脱了所有现实的烦恼, feeling the afterglow

(Chorus)
意识漫游,逃离乏味的轨道 
迷幻嘻哈的节拍,是白日梦的引导 
抽象的世界,逻辑被重新构造
Mind wandering free, where reality starts to fade slow

(Verse 2)
会议室里老板在讲话,声音模糊,像隔着水听不清道
我的思绪,早已潜入深海,与发光的水母一起舞蹈
或者飞向外太空,在星云间穿梭,探索未知的星球和轨道
现实的规则,在这里被打破,物理定律也失去效劳
白日梦是我的避难所,是精神的氧气罩
在乏味的现实里,为我注入一点色彩和奇妙
虽然短暂,虽然虚幻,但它让我能够喘息,重新把能量找到
然后回到现实,继续扮演那个,循规蹈矩的角色,把梦藏好, keep the dream aglow

(Chorus)
意识漫游,逃离乏味的轨道
迷幻嘻哈的节拍,是白日梦的引导
抽象的世界,逻辑被重新构造
Mind wandering free, where reality starts to fade slow
`,
  "raw/samples/RapMachine/Consciousness_Roaming_prompt.txt": `Rap, Chinese Rap, J-Pop, Anime, kawaii pop, EDM, Aggressive, Intense, Crisp Snare, Super Fast, Clear`,
  "raw/samples/RapMachine/dingdingdangdang.txt": `[Verse 1]
打南边来了个喇嘛,手里提拉着五斤鳎目,
打北边来了个哑巴,腰里别着个喇叭。
喇嘛想换哑巴的喇叭,哑巴摇头不说话,
鳎目一甩像道闪电,喇叭一响震天涯!

[Chorus]
丁丁当当,乒乓乓乓,
话赶话,舌绕梁,
东边的钉,西边的墙,
绕不完的弯,唱不完的慌!

[Verse 2]
墙上一根钉,钉下绳摇晃,
绳吊着瓶,瓶碰碎了光。
灯骂瓶,瓶怪绳,绳怨钉,
稀里哗啦,一场荒唐!

[Chorus]
丁丁当当,乒乓乓乓,
话赶话,舌绕梁,
东边的钉,西边的墙,
绕不完的弯,唱不完的慌!

[Verse 3]
板凳宽,扁担长,
一个偏要绑,一个偏不让。
青龙洞里龙翻身,
千年大梦变稻香!

[Bridge]
麻婆婆的狗,咬破麻叉口,
麻线穿针眼,补丁也风流。
左一句,右一句,
舌头打结心自由!

[Chorus]
丁丁当当,乒乓乓乓,
话赶话,舌绕梁,
东边的钉,西边的墙,
绕不完的弯,唱不完的慌!`,
  "raw/samples/RapMachine/dingdingdangdang_prompt.txt": `Hip Hop, Hi-hat Rolls, spoken word, Melodic Flow, articulate, Female Rap, 120 BPM, clear, warm, female, melodic Rap, adult, super fast`,
  "raw/samples/RapMachine/Gold_Chains.txt": `[chorus]
黑 墨镜 金 链子 越 低调 越 霸气
玩 街机 泡 吧里 再 野的 场子 都 不 怯气
上海 滩 老 江湖 外滩 钟声 敲 胜负
陆家嘴 黄浦江 财路 宽 给 你 开 扇窗

[verse]
老子 在 弄堂 斜起 走 想 拦路 的 先 报 名号
我 早看透 你们 手抖 脚软
只敢 网上 吠 现实 怂成 猫
看 你们 混的 真 可怜 整天 蹲在 网吧 蹭 烟
钱 赚不到 架 不敢打 还 学人 摆 大哥 脸

[verse]
叫 我 沪上 老 克勒 不是 拉菲 我 不 碰杯
规矩 我 懒得 讲 太多 钞票 直接 拍 你 脸上 飞
老子 耐心 差 门槛 高 你 找茬 等于 自 寻 烦恼
要么 跪 要么 爬 最后 警告 只 说 一 遭

[chorus]
黑 墨镜 金 链子 越 低调 越 霸气
玩 街机 泡 吧里 再 野的 场子 都 不 怯气
上海 滩 老 江湖 外滩 钟声 敲 胜负
陆家嘴 黄浦江 财路 宽 给 你 开 扇窗

[verse]
古巴 雪茄 在 指间 绕 代表 魔都 格调 必须 顶
OG 在 你 够不到 的 高度 My bro 永远 在 顶层 盯
Check my vibe 不靠 大 金劳 留声机 放 周璇 和 白光
爹妈 太 宠你 养出 巨婴 症 早晚 社会 教你 做人 经

[verse]
玩 说唱 小囡 太 年轻 要 比 flow 先去 练 气功
廿年 磨 枪 才 亮 锋芒 我 三十六 招 收 你 入 瓮
老子 存在 就是 打假 标
多少 人 眼红 又 不敢 挑
键盘 侠 的 狠话 像 棉花 糖
见 真人 秒变 Hello Kitty 叫

[chorus]
黑 墨镜 金 链子 越 低调 越 霸气
玩 街机 泡 吧里 再 野的 场子 都 不 怯气
上海 滩 老 江湖 外滩 钟声 敲 胜负
陆家嘴 黄浦江 财路 宽 给 你 开 扇窗

[chorus]
黑 墨镜 金 链子 越 低调 越 霸气
玩 街机 泡 吧里 再 野的 场子 都 不 怯气
上海 滩 老 江湖 外滩 钟声 敲 胜负
陆家嘴 黄浦江 财路 宽 给 你 开 扇窗`,
  "raw/samples/RapMachine/Gold_Chains_prompt.txt": `四川话, spoken word, male, Tempo - Fast, Elements - Chorus Hook, Subgenre-Satirical Hip Hop, Rap, Chinese-language music, energetic, slightly nasal, Instrument - Live Bass Guitar, adult, Vocals - Syncopated Flow, Genre - Hip-Hop, rapping, bright`,
  "raw/samples/RapMachine/Neon_Compass.txt": `[Intro]
Nya.

[Verse]
我 在 五 点 二 十 早 起,十 三 点 十 四 弹 会儿 琴
习 惯 了 坐 班,习惯了 隔夜 的  剩 饭,
习 惯 了 没有 你

[Verse]
怕 你 想 不 开,拦 在 你 的 面 前
那 时 候 摔 得 差 点 住 院
东 京 的 春 天 莺 莺 燕 燕
我 说 想 不 想 来 跟 我 玩 音乐

[Verse]
带 着 我 的 朋 友 守 在 你 的 门 口
弹 着 我 的 钢 琴 当 伴 奏
等 你 放 学 后,陪 你   K   T   V
端 着 我 的 红 茶 跟 你 碰 杯

[Pre-Chorus]
忽然间现实淹没了远方
万家灯火,盖住月光
奔走,忍受,变成了人偶
别再对我伸出你的 双 手,会 受 伤

[Chorus]
明明都向前走,方向却渐渐不同
时间让你我越走越近,却越来越陌生
春 天 在 滂 沱 的 大 雨 里 飘 落
得 了 心 太 高 脸 太 薄 的病

[Bridge]
我越难过,春日影越顶
眼泪晃得我看不清
埋葬了懦弱还有矫情
却还是会在半夜摸眼睛

青春期大部分时间在工 作
用微笑换来余额几个零
戴上了面具也明白了生活
拼的是数字和脸更是命

[Verse]
我在五点二十早起,十三点十四弹会琴
早上要做饭,回家时满地的瓶罐

师 徒 二 人 站 在 我 的 面 前
台 词 很 熟 练,照 着 就 念

背 后 的 小 睦 扭 扭 捏 捏
我 说 我 还 有 点 事 要 不 改 天 见

然 后 你 的 双手 握 住 我 的 袖 口
开 始 哭 着 求 我 不 要 走

[Verse]
我在下班后,忙活柴米油
你和你的姐妹住着高楼

苦 来 兮 苦,早 就 没 了
现 实 扬 鞭,赶 着 我 向 前
没有时间跟你分辨什么对与错

[Bridge]
没有什么对错,没有罪过
谁不曾天真,是我太早看破
生活一片狼藉,却又不想放弃
一 边 聚 光 灯 下 绽 放,一 边 坠 落
故作坚强,筑起心的墙
越是委屈的伤口,越要藏
Let it all out, it’s all right

[Outro]
俺 是 东 京 嘞,东 京 打 工 妹

从虎之门带你转到浅草
再从新宿转到竹桥

俺 是 东 京 嘞,东 京 打 工 妹

带 你 转 羽田 成田 蒲田 神田
做 你 嘞 小 甜 甜!

俺 是 东 京 嘞,东 京 打 工 妹
带 你 转 赤 坂,带 你 转 霞 关
恁 咋 不 早 说,今 天 不 管 饭
`,
  "raw/samples/RapMachine/Neon_Compass_prompt.txt": `Rap, J-Pop, Anime, kawaii pop, EDM, Aggressive, Intense, Crisp Snare, Super Fast, Clear`,
  "raw/samples/RapMachine/neural_beat.txt": `[verse1]
羊皮卷轴 墨香飘 莫扎特 熬 安魂曲 通宵  
和弦齿轮 咔哒转 比 瑞士 手表 更 精密 律动  
八轨磁带 玩叠叠乐 披头士 炸 录音棚 天花板  
AI 卷起 新风暴 像 灭霸 打响指 般 简单  

[chorus]
琴弦 到 代码 进化论 狂飙(skr)  
象牙塔 被 鼠标 点爆 像 泡泡(boom)  
灵感 加 算法 等于 王炸 大招  
人类 心跳 才是 终极 混音 调料  

[verse2]
春之祭 召唤 百人 乐团 才够 燥  
合成器 极客 玩电焊 焊出 赛博 神庙  
DAW 解放 双手 钢琴卷帘 变 乐高  
音色库 开挂 像 吃 金币 的 马里奥  

AI 拆解 爵士乐 黑话 像 庖丁 解牛  
CityPop 复古 滤镜 直接 参数 调油  
神经网络 偷师 贝多芬 半夜 翻墙头  
音乐 基因库 被 改写成 超频 万花筒  

[chorus]  
琴弦 到 代码 进化论 狂飙(skr)  
象牙塔 被 鼠标 点爆 像 泡泡(boom)  
灵感 加 算法 等于 王炸 大招  
人类 心跳 才是 终极 混音 调料  

[verse3]  
电子琴 被 吐槽 塑料 味 超标  
卧室 制作人 用 鼠标 单挑 整个 乐团 编制  
AI 伴奏 刚上线 就被 键盘侠 集火  
却 忘了 电吉他 曾被 说 是 魔鬼 的 副歌  

现在 我 指尖 蹦迪 在 数据 炼丹炉  
提示词 召唤 莫扎特 跨次元 碰杯 珍珠奶茶  
当 比特 海洋 淹没 所有 物理 琴柱  
最后 的 音轨 永远 连着 心脏 的 跳针  

[bridge]  
鹅毛笔 蘸着 银河 当 墨汁(绝了)  
音浪 在 元宇宙 开 分店(疯了)  
技术 迷雾 散成 像素 烟花  
而 我们 始终 带着 老派 的 心跳 混搭  

[chorus]  
琴弦 到 代码 进化论 狂飙(skr)  
象牙塔 被 鼠标 点爆 像 泡泡(boom)  
灵感 加 算法 等于 王炸 大招  
人类 心跳 才是 终极 混音 调料  

[outro]  
从 蒸汽 到 硅基 浪潮 我 冲浪(yo)  
用 脑洞 接住 每个 技术 暴击(叮)  
当 所有 设备 没电 的 凌晨 三点钟  
最 原始 的 旋律 在 胸腔 敲击 成 龙卷风  `,
  "raw/samples/RapMachine/neural_beat_prompt.txt": `Orchestra, Symphony, Sonata, Opera, Concerto, Rap, Beat, DJ, MC, StreetCulture`,
  "raw/samples/RapMachine/Rapatapa.txt": `[Intro]
Yo, check it—speed demon, lyrical heat, uh!
Ratatat like a drum when the beat bumps, uh!

[Verse 1]
Rapatapa tap tap, flash like a snap,
Rap tap tap, I don’t chat, I clap clap clap!
Fingers snap, flow don’t slack, rapataptaptap,
Spit it fast, hit the gas, rap tap tap rap!

[Pre-Chorus]
Boom-bap, zoom past, leave ’em flat,
Rap taptaprapataptaptap—where ya at?

[Chorus]
Rapatapa tap tap, yeah, I go brrrr,
Rap tap tap, make the crowd stir!
Rapataptaptap, no lag, just spit,
Rap taptaprapataptaptap—I’m lit!

[Verse 2]
Tongue-twist, quick wrist, rapatapa boom,
Tap tap rap, leave ya stuck like glue-gum!
No slow-mo, turbo, rapataptaptap,
Rap tap rap, yeah, I clap clap clap!

[Outro]
Rapatapa—TAP! Mic drop—that’s that.`,
  "raw/samples/RapMachine/Rapatapa_prompt.txt": `singing, bright, slightly nasal, energetic, spoken word, young adult, male, rap music`,
  "raw/samples/RapMachine/Sandy_Volleyball_Ground.txt": `(Intro)
Oh yeah... 

(Verse 1)
阳光下,沙滩排球场,一个身影跳跃
小麦色,运动背心,闪耀活力四射
她跳起扣杀,动作利落又巧妙
汗水浸湿发梢,笑容比阳光更美好
摇摆的节奏,是她的背景配乐
每一次移动,都踩在鼓点上那么和谐
我不由自主地停下脚步
目光被她紧紧锁住

(Chorus)
沙滩排球女孩, 摇摆节拍下的身材
无忧无虑的笑容,把我的心都填满
想走上前去搭讪,嫌自己笨拙呆板
这青春的气息,耀眼,灿烂!

(Verse 3)
她和队友击掌庆祝,笑声清脆悦耳
拿起毛巾擦汗,不经意间瞥我一眼
鼓起勇气走上前,假装问问时间
她友好地回答,笑容灿烂没有敷衍
聊了几句,发现彼此爱这摇摆音乐
她眼中也闪过惊喜和亲切
这共同点,让气氛变得融洽又热烈!
夏天的故事,就这样开始了感觉真切!

(Chorus)
沙滩排球女孩, 摇摆节拍下的身材
无忧无虑的笑容,把我的心都填满
不再犹豫和等待,勇敢把脚步迈开
这夏天的感觉,心跳,不断!`,
  "raw/samples/RapMachine/Sandy_Volleyball_Ground_prompt.txt": `G-Funk, Hip Hop, Rap, Female Vocals, Melodic Rap, Summer, Laid-back Groove, Smooth Rhythm, Synthesizer Lead, Heavy Bassline, Groovy, West Coast Hip Hop`,
  "raw/samples/RapMachine/Screen_Syndrome.txt": `[Intro]
Yo, 这是来自深渊的怒吼

[Verse]
指尖飞快刷新,屏幕又亮起
渴望那点赞,像致命的氧气
精心修饰的脸庞,完美到诡异
背后隐藏的疲惫,谁又会在意
光鲜亮丽的橱窗,贩卖着焦虑
每个人都在表演,戴着虚伪面具
比较的游戏,让人逐渐窒息
迷失在数据洪流,找不到自己

[Chorus]
这流量的时代,真假早已分不清
盲目追随潮流,丢掉了初心
为了那点虚荣,灵魂在沉沦
看不见的锁链,捆绑每个灵魂

[Verse]
滤镜下的生活,美得不切实际
营造虚假繁荣,掩盖内心空虚
他人的光环下,显得自己多余
嫉妒和自卑,交织成悲剧

[Chorus]
朋友圈里炫耀,现实中却叹气
刷着别人的故事,忘记了呼吸
算法推荐着你,想看的一切东西
不知不觉间,你已不再是你
他们说这是进步,我看是种病
精神鸦片侵蚀,慢慢要了你的命

[Bridge]
屏幕亮了又暗,一天又过去
究竟得到了什么,还是失去了自己
那真实的连接,在何处寻觅
困在这迷宫里,找不到出口的轨迹

[Outro]
我想挣脱,我想呼吸
这虚拟的繁华,让我喘不过气
谁能告诉我,这到底有什么意义
一切都像泡沫,一触就破裂没余地`,
  "raw/samples/RapMachine/Screen_Syndrome_prompt.txt": `J-Pop, Anime, kawaii future bass, Femal vocals, EDM, Boombap, Aggressive, Intense, Crisp Snare, Super Fast, Rap`,
  "raw/samples/RapMachine/Silicon_Valley.txt": `[Intro]
"System booting... 语言 模型 loading..."

[Verse 1]
硅谷 那个 coder 调试 neural network
北京 的 极客 训练 A I 写 report
不同 架构 的 chip 不同 算法 的 war
屏幕上 跑的 全是 machine learning (learning)

[Bridge]
多少年 我们 chase 摩尔 定律 的 trend (yeah)
这两年 换他们 study 中文 N L P
Convolution L S T M
好烧脑 的 backprop 好暴力 的 big data

[Verse 2]
Python 强 say加加 刚 Python 调用 C++ 的 A P I
say加加 嫌 Python 太 slow Python 笑 C++ 太 hardcore
L L V M 默默 generate 中间 code
到底 interpreter 还是 compiler 屌?

[Verse 3]
P M 和 engineer
白板 画满 flow chart 服务器 闪着 red light
P M 说 add feature engineer 说 no way
需求 变更 code 重构
不知 是 P M 太 fly 还是 deadline 太 high

[Chorus]
全世界 都在 train neural network
Transformer 的 paper 越来越 难 go through
全世界 都在 tune 超参数
我们 写的 bug 让 G P U 都 say no

[Verse 4]
柏林 hackathon demo blockchain contract
上海 的 dev 用 federated learning 破 data wall
各种 语言 的 error 各种 框架 的 doc
terminal 里 滚的 全是 dependency 冲突

[Bridge]
曾以为 English 才是 coding 的 language (yeah)
直到见 G P T 用 文言文 generate 正则 expression
Gradient explode
好硬核 的 prompt 好头秃 的 debug road

[Verse 5]
有个 bug 叫 quantum
测试 环境 run perfect 上线 立即就 crash
查 log 看 monitor 发现是 thread 不同步
改 sync 加 lock 慢 deadlock 更难办
量子 computer 也解不开 这 chaos chain

[Verse 6]
你说 996 我说 007
你说 福报 我说 burnout
Product 要 agile Boss 要 KPI
Code 要 elegant deadline 是 tomorrow
不如 直接 script 自动 submit 离职信

[Outro]
"Warning: 内存 leak...core dumping..."
全世界 都在 train neural network (neural network)
Loss 还没 converge 天已经亮
全世界 都在 tune 超参数
我们 写的 code (让它) 让 world (reboot) 都 reboot 无效`,
  "raw/samples/RapMachine/Silicon_Valley_prompt.txt": `articulate, spoken word, young adult, rap music, female, clear, energetic, warm`,
  "raw/samples/RapMachine/Swish_Swoosh.txt": `[verse]
球场 的 橡胶味 弥漫 隔壁 是 健身房
场 边上 的 老教练 战术 有 三套
教 交叉 运球 的 大叔 会 欧洲步 耍 背后 传
硬 身板 对抗 最 擅长 还 会 急停跳 后仰 投
他们 徒弟 我 习惯 从小 就 耳濡目染
什么 胯下 跟 变向 我 都 玩 的 有模有样
什么 招式 最 喜欢 转身 过 人 柔中 带 刚
想要 去 纽约 街头 斗 洛克 公园 场

[chorus]
看什么 看什么
变速 突破 心 自在
看什么 看什么
假动作 晃 开 防守 来
看什么 看什么
每日 训练 绑 沙袋
空中拉杆 莫 奇怪
唰唰 入袋

[verse]
一个 试探 步后 一记 左 变向 右 变向
一句 挑衅 我 的 人 别 嚣张
一再 重演 一颗 我 不 投 的 球
悬在 篮筐 上 它 一直 在 摇晃

[chorus]
看什么 看什么
我 激活 小宇宙 来
看什么 看什么
菜鸟 新人 的 名号
看什么 看什么
已 被 我 一球 击倒

[chorus]
快 秀出 指尖 转球 砰砰 啪嗒
快 秀出 指尖 转球 砰砰 啪嗒
篮球 之 人 切记 勇者 无惧
是 谁 在 玩 花式 引爆 空气
快 秀出 指尖 转球 砰砰 啪嗒
快 秀出 指尖 转球 砰砰 啪嗒
如果 我 有 滞空 逆天 补扣
为人 热血 不怂 一生 傲骨 吼

[verse]
他们 徒弟 我 习惯 从小 就 耳濡目染
什么 胯下 跟 变向 我 都 玩 的 有模有样
什么 招式 最 喜欢 转身 过 人 柔中 带 刚
想要 去 纽约 街头 斗 洛克 公园 场

[outro]
快 秀出 指尖 转球 砰
快 秀出 指尖 转球 砰
如果 我 有 滞空 吼
为人 热血 不怂 一生 傲骨 吼
快 秀出 指尖 转球 砰
我 用 背传 助攻 吼
压哨 的 三分 球`,
  "raw/samples/RapMachine/Swish_Swoosh_prompt.txt": `articulate, spoken word, young adult, warm, rap music, male, clear, street, dark, rap flow, hardcore rap, fast`,
  "raw/samples/RapMachine/The_Boss_Is_Dead.txt": `[verse]
挣着 憋屈的 工资 还得 装乐呵
猫着 怂样儿 还搁 朋友圈 嘚瑟
扛着 傻逼的 指标 没人 搭把手
这儿 不是 托儿所 少整 那出儿 哭唧尿嚎

俺们 就像 一条条 老板的 裤衩子
陪着 笑脸 接他 每一回 突突
哎呦 老板 今儿个 穿我呗
他 撅个腚 眼角 瞟你 那熊样

[chorus]
他们 骂我 打工仔 太多人 没睡醒
寻思 抠搜 老板 一天天 穷折腾
不想 俺的 人生 烂在 这嘎达
不想 俺的 将来 折在 这破棚

老子 不想 上班 老子 是外星人
你都 把俺 骂急眼了 俺还 这么淡定
现实 才是 梦 啥时候 能醒啊
那 糟践人的 答案 在西北风 里飘

[verse]
瞅见 二愣子 同事 给老板 舔腚沟子
瞅见 浪蹄子 女同事 在老板 胯骨轴 扭搭
瞅见 白瞎的 光阴 耗在 没亮儿的 道儿
瞅见 公交车上 一帮 僵尸 吐酸水

瞅见 俺的 命 定在 苦逼的 坑里
瞅见 俺的 爱情 被轮了 成了 老处女
瞅见 好事儿 全归 高富帅
还有 那些 臭不要脸 扭腚的 货色

[chorus](重复)
他们 骂我 打工仔 太多人 没睡醒...

[bridge]
加班 没补助 俺认了
欠薪 揍员工 把俺 当牲口
去你妈 的小姘头

[verse]
破逼 管理制度 净整 娱乐八卦
撸管式 管理 也就 你自己 嗨
出点儿 屁事儿 就往 下属 脑瓜子 扣
挣俩 钢镚儿 立马 牛逼 不分 公母

你挖个 大坑 把俺们 往里 踹
说这 叫梦想 你当年 多能耐
俺们 就当 听传销 洗脑课
可怜 连骗人 你都 就会 这一套

[outro]
老子 不想 上班
老子 不想 上班
老子 不想 上班`,
  "raw/samples/RapMachine/The_Boss_Is_Dead_prompt.txt": `东北话, spoken word, male, Tempo - Fast, Elements - Chorus Hook, Subgenre-Satirical Hip Hop, Rap, Chinese-language music, energetic, slightly nasal, Instrument - Live Bass Guitar, adult, Vocals - Syncopated Flow, Genre - Hip-Hop, rapping, bright`,
  "raw/samples/RapMachine/Try_Not_to_Tongue_Twist.txt": `[verse]
这 这 谁 又 在 派 对 喝 多
我 的 脑 袋
像 被 驴 踢 过
不 对 劲
舌 头 打 结 不 会 说
你 来 挑 战 我 就 跪
开 局 直 接 崩 溃

[chorus]
就 咪 乱 咪 念 咪 错 咪
嘴 咪 瓢 咪 成 咪 狗 咪
脑 咪 袋 咪 像 咪 浆 咪 糊 咪
跟 咪 着 咪 节 咪 奏 咪
把 咪 歌 咪 词 咪 全 咪 忘 咪
一 咪 张 咪 嘴 咪 就 咪 废 咪
只 咪 剩 咪 下 咪 尴 咪 尬 咪 回 咪 忆
草!

[verse]
错 错 错 错 了
一 口 气 全 念 错
错 错 错 错 了
舌 头 打 结 甩 锅
甩 甩 甩 甩 锅
甩 锅 甩 锅
拍 子 全 部 乱 套
观 众 笑 到 吐 血

[verse]
你 的 歌 词 我 的 噩 梦
唱 完 直 接 社 死
调 跑 到 外 太 空
观 众 表 情 裂 开
你 笑 我 菜
我 笑 你 不 懂
这 叫 艺 术 表 演
不 服 你 来!

[verse]
这 这 谁 又 在 派 对 丢 人
我 的 世 界
已 经 彻 底 崩 溃
没 有 完 美
只 有 翻 车 现 场
以 及 观 众 的 嘲 讽

[chorus]
就 咪 乱 咪 念 咪 错 咪
嘴 咪 瓢 咪 成 咪 狗 咪
脑 咪 袋 咪 像 咪 浆 咪 糊 咪
跟 咪 着 咪 节 咪 奏 咪
把 咪 歌 咪 词 咪 全 咪 忘 咪
一 咪 张 咪 嘴 咪 就 咪 废 咪
只 咪 剩 咪 下 咪 尴 咪 尬 咪 回 咪 忆
草!

[verse]
错 错 错 错 了
一 口 气 全 念 错
错 错 错 错 了
舌 头 打 结 甩 锅
甩 甩 甩 甩 锅
甩 锅 甩 锅
拍 子 全 部 乱 套
观 众 笑 到 吐 血

[verse]
你 的 歌 词 我 的 噩 梦
唱 完 直 接 社 死
调 跑 到 外 太 空
观 众 表 情 裂 开
你 笑 我 菜
我 笑 你 不 懂
这 叫 艺 术 表 演
不 服 你 来!`,
  "raw/samples/RapMachine/Try_Not_to_Tongue_Twist_prompt.txt": `articulate, spoken word, young adult, rap music, male, clear, energetic, warm, relaxed, breathy, night club, auto-tune, mumble rap, trap`,
  "raw/samples/RapMachine/zhongguohua.txt": `[Intro]
扁擔寬 板凳長 扁擔想綁在板凳上
扁擔寬 板凳長 扁擔想綁在板 凳上

[Verse]
倫敦 瑪莉蓮 買了 件 旗袍 送 媽媽
莫斯科 的 夫司基 愛上 牛肉 麵 疙瘩
各種 顏色 的 皮膚 各種 顏色 的 頭髮
嘴裡念的 說的 開始 流行 中國話 (中國話)

[Bridge]
多少年 我們 苦練 英文 發音 和 文法 (yeah)
這幾年 換他們 捲著  舌頭 學 平上去入 的 變化
平平 仄仄 平平 仄
好聰明 的 中國人 好優美 的 中國話

[Verse]
扁擔寬 板凳長 扁擔想綁在板凳上
板凳不讓扁擔綁在板凳上 扁擔偏要綁在板凳上
板凳偏偏不讓扁擔綁在那板凳上
到底扁擔寬 還是板凳長?

[Verse]
哥哥弟弟坡前坐
坡上臥著一隻鵝 坡下流著一條河
哥哥說 寬寬的河 弟弟說 白白的鵝
鵝要過河 河要渡鵝
不知是那鵝過河 還是河渡鵝

[Chorus]
全世界都在學中國話
孔夫子的話 越來越國際化
全世界都在講中國話
我們說的話 讓世界都認真聽話

[Verse]
紐約 蘇珊娜開了間禪風 lounge bar
柏林來的沃夫岡拿胡琴配著電吉他
各種顏色的皮膚 各種顏色的頭髮
嘴裡念的 說的 開始流行中國話 (中國話)

[Bridge]
多少年我們苦練英 文發音和文法 (yeah)
這幾年換他們捲著舌頭學平上去入的變化
仄仄平平仄仄平
好聰 明的中國人 好優美的中國話

[Verse]
有個小孩叫小杜 上街打醋又買布
買了布 打了醋 回頭看見鷹抓兔
放下布 擱下醋 上前去追鷹和兔
飛了鷹 跑了兔 灑了醋 濕了布

[Verse]
嘴說腿 腿說嘴
嘴說腿 愛跑腿
腿說嘴 愛賣嘴
光動嘴 不動腿
光動腿 不動嘴
不如不長腿和嘴
到底是那嘴說腿 還是腿說嘴?

[Chorus]
全世界都在學中國話
孔夫子的話 越來越國際化
全世界都在講中國話
我們說的話 讓世界都認真聽話

[outro]
全世界都在學中國話 (在學中國話)
孔夫子的話 越來越國際化
全世界都在講中國話
我們說的話 (讓他) 讓世界 (認真) 都認真聽話`,
  "raw/samples/RapMachine/zhongguohua_prompt.txt": `lyrical rap, young adult, female, rap flow, spoken word, ad-libs, bright, energetic, eat, Fast, Engaging, Energetic`,
  "raw/samples/Text2Sample/text2samples_acounstic_guitar.txt": ``,
  "raw/samples/Text2Sample/text2samples_acounstic_guitar_prompt.txt": `Acoustic Guitar, 191.0 bpm`,
  "raw/samples/Text2Sample/text2samples_bass.txt": ``,
  "raw/samples/Text2Sample/text2samples_bass_prompt.txt": `110.0 bpm, electric, bass, loops, G# min keyscale`,
  "raw/samples/Text2Sample/text2samples_drums.txt": ``,
  "raw/samples/Text2Sample/text2samples_drums_grooves.txt": ``,
  "raw/samples/Text2Sample/text2samples_drums_grooves_prompt.txt": `160.0 bpm, grooves, drums`,
  "raw/samples/Text2Sample/text2samples_drums_prompt.txt": `loops, fills, acoustic, 90.0 bpm, lo-fi hip hop, drums`,
  "raw/samples/Text2Sample/text2samples_edrum.txt": ``,
  "raw/samples/Text2Sample/text2samples_edrum_prompt.txt": `140.0 bpm, Electronic Drum Kit
`,
  "raw/samples/Text2Sample/text2samples_electric_guitar.txt": ``,
  "raw/samples/Text2Sample/text2samples_electric_guitar_prompt.txt": `A# maj keyscale, electric, guitar, loops, 103.0 bpm`,
  "raw/samples/Text2Sample/text2samples_erhu.txt": ``,
  "raw/samples/Text2Sample/text2samples_erhu_prompt.txt": `melody, erhu
`,
  "raw/samples/Text2Sample/text2samples_flute.txt": ``,
  "raw/samples/Text2Sample/text2samples_flute_prompt.txt": `G# keyscale, 80.0 bpm, brass & woodwinds, flute, algoza
`,
  "raw/samples/Text2Sample/text2samples_guitar.txt": ``,
  "raw/samples/Text2Sample/text2samples_guitar_prompt.txt": `guitar, 115.0 bpm, B min keyscale, loops, melody`,
  "raw/samples/Text2Sample/text2samples_hand_pan.txt": ``,
  "raw/samples/Text2Sample/text2samples_hand_pan_prompt.txt": `clean, metallic, hand pan, organic, 120.0 bpm, A min keyscale, loops`,
  "raw/samples/Text2Sample/text2samples_koto.txt": ``,
  "raw/samples/Text2Sample/text2samples_koto_prompt.txt": `fx, music, koto, melody, G min keyscale, strings, 90.0 bpm, loops
`,
  "raw/samples/Text2Sample/text2samples_lead_guitar.txt": ``,
  "raw/samples/Text2Sample/text2samples_lead_guitar_prompt.txt": `Lead Electric Guitar, loops`,
  "raw/samples/Text2Sample/text2samples_pad.txt": ``,
  "raw/samples/Text2Sample/text2samples_pad_prompt.txt": `layered, A# min keyscale, lo-fi hip hop, loops, chords, synth, pads, lo-fi, 60.0 bpm`,
  "raw/samples/Text2Sample/text2samples_saxphone.txt": ``,
  "raw/samples/Text2Sample/text2samples_saxphone_prompt.txt": `F keyscale, loops, saxphone, 125.0 bpm`,
  "raw/samples/Text2Sample/text2samples_synth.txt": ``,
  "raw/samples/Text2Sample/text2samples_synth_prompt.txt": `trap edm, D# keyscale, loops, 140.0 bpm, synth
`,
  "raw/samples/Text2Sample/text2samples_violin.txt": ``,
  "raw/samples/Text2Sample/text2samples_violin_prompt.txt": `melody, G min keyscale, acoustic, 105.0 bpm, violin, Arabic`
};


    document.addEventListener('DOMContentLoaded', function () {
      // 這將按區塊組織我們的音樂樣本資料
      let musicSampleSections = {};
      // 這將包含所有樣本的扁平化列表
      let musicSamples = [];

      // 初始化 AudioLoader
      const audioLoader = new AudioLoader({
        username: 'ace-step',
        repo: 'ace-step.github.io',
        releaseTag: '',
        useJsDelivr: true,
        preferMp3: true
      });

      // 從 JSON 檔案載入樣本資料的函數
      async function loadSamplesData() {
        try {
          // 解析 JSON 回應
          musicSampleSections = { "GeneralSongs": [{ "id": "ace-step", "fileName": "ace_step", "directory": "GeneralSongs" }, { "id": "funk-pop-neon-lights", "fileName": "funk_pop_neon_lights", "directory": "GeneralSongs" }, { "id": "female-pop", "fileName": "female_pop", "directory": "GeneralSongs" }, { "id": "surf-music", "fileName": "surf_music", "directory": "GeneralSongs" }, { "id": "dubstep", "fileName": "dubstep", "directory": "GeneralSongs" }, { "id": "cyberpunk", "fileName": "cyberpunk", "directory": "GeneralSongs" }, { "id": "dead-rock", "fileName": "dead_rock", "directory": "Experimental" }, { "id": "afro-cuban", "fileName": "afro_cuban", "directory": "GeneralSongs" }, { "id": "alternative-rock", "fileName": "alternative_rock", "directory": "GeneralSongs" }, { "id": "black-metal", "fileName": "black_metal", "directory": "GeneralSongs" }, { "id": "country-rock", "fileName": "country_rock", "directory": "GeneralSongs" }, { "id": "dark-electro", "fileName": "dark_electro", "directory": "GeneralSongs" }, { "id": "disco", "fileName": "disco", "directory": "GeneralSongs" }, { "id": "electronic-rap-waves-on", "fileName": "electronic_rap_waves_on", "directory": "GeneralSongs" }, { "id": "hiphop-rap-shirt-song", "fileName": "hiphop_rap_shirt_song", "directory": "GeneralSongs" }, { "id": "orchestral-rock", "fileName": "orchestral_rock", "directory": "GeneralSongs" }, { "id": "world-sad", "fileName": "world_sad", "directory": "GeneralSongs" }], "Experimental": [{ "id": "acid-house", "fileName": "acid_house", "directory": "Experimental" }, { "id": "acappella", "fileName": "acappella", "directory": "Experimental" }, { "id": "bbox", "fileName": "bbox", "directory": "Experimental" }, { "id": "drum-bass", "fileName": "drum_bass", "directory": "Experimental" }, { "id": "female-nana", "fileName": "female_nana", "directory": "Experimental" }, { "id": "opera-female", "fileName": "opera_female", "directory": "Experimental" }], "Instrumentals": [{ "id": "dance-party", "fileName": "dance_party", "directory": "Instrumentals" }, { "id": "minimal-techno", "fileName": "minimal_techno", "directory": "Instrumentals" }, { "id": "psychedelic", "fileName": "psychedelic", "directory": "Instrumentals" }, { "id": "saxphone-jazz", "fileName": "saxphone_jazz", "directory": "Instrumentals" }, { "id": "sonata-piano-violin", "fileName": "sonata_piano_violin", "directory": "Instrumentals" }, { "id": "tango-guitar", "fileName": "tango_guitar", "directory": "Instrumentals" }, { "id": "trance", "fileName": "trance", "directory": "Instrumentals" }, { "id": "violin-solo", "fileName": "violin_solo", "directory": "Instrumentals" }], "MultipleLang": [{ "id": "dark-atmospheric", "fileName": "dark_atmospheric", "directory": "MultipleLang" }, { "id": "electro-house", "fileName": "electro_house", "directory": "MultipleLang" }, { "id": "folk-rnb-female", "fileName": "folk_rnb_female", "directory": "MultipleLang" }, { "id": "french-pop", "fileName": "french_pop", "directory": "MultipleLang" }, { "id": "german-dance", "fileName": "german_dance", "directory": "MultipleLang" }, { "id": "hip-house", "fileName": "hip-house", "directory": "MultipleLang" }, { "id": "italian-folk", "fileName": "italian_folk", "directory": "MultipleLang" }, { "id": "jpop", "fileName": "jpop", "directory": "MultipleLang" }, { "id": "kpop", "fileName": "kpop", "directory": "MultipleLang" }, { "id": "mandopop", "fileName": "mandopop", "directory": "MultipleLang" }, { "id": "portuguese-pop", "fileName": "portuguese_pop", "directory": "MultipleLang" }, { "id": "russian-folk", "fileName": "russian_folk", "directory": "MultipleLang" }, { "id": "spanish-song", "fileName": "spanish_song", "directory": "MultipleLang" }], "Controlability-retake": [{ "id": "orig", "fileName": "orig", "directory": "Controlability-retake" }, { "id": "retake-variance1", "fileName": "retake_variance1", "directory": "Controlability-retake" }, { "id": "retake-variance2", "fileName": "retake_variance2", "directory": "Controlability-retake" }, { "id": "retake-variance3", "fileName": "retake_variance3", "directory": "Controlability-retake" }, { "id": "retake-variance4", "fileName": "retake_variance4", "directory": "Controlability-retake" }, { "id": "retake-variance5", "fileName": "retake_variance5", "directory": "Controlability-retake" }, { "id": "retake-variance6", "fileName": "retake_variance6", "directory": "Controlability-retake" }], "Controlability-repaint": [{ "id": "a-repaint-orig", "fileName": "a_repaint_orig", "directory": "Controlability-repaint" }, { "id": "repaint-0-30-variance10-change-female", "fileName": "repaint_0_30_variance10_change_female", "directory": "Controlability-repaint" }, { "id": "repaint-0-30-variance10-change-genre", "fileName": "repaint_0_30_variance10_change_genre", "directory": "Controlability-repaint" }, { "id": "repaint-0-30-variance10-change-lyrics", "fileName": "repaint_0_30_variance10_change_lyrics", "directory": "Controlability-repaint" }, { "id": "repaint-0-30-variance7", "fileName": "repaint_0_30_variance7", "directory": "Controlability-repaint" }], "Controlability-edit": [{ "id": "edit-a-orig", "fileName": "edit_a_orig", "directory": "Controlability-edit" }, { "id": "edit-kid", "fileName": "edit_kid", "directory": "Controlability-edit" }, { "id": "edit-old", "fileName": "edit_old", "directory": "Controlability-edit" }, { "id": "edit-spotify", "fileName": "edit_spotify", "directory": "Controlability-edit" }, { "id": "edit-cry", "fileName": "edit_cry", "directory": "Controlability-edit" }, { "id": "edit-french", "fileName": "edit_french", "directory": "Controlability-edit" }, { "id": "edit-german", "fileName": "edit_german", "directory": "Controlability-edit" }, { "id": "edit-ja", "fileName": "edit_ja", "directory": "Controlability-edit" }, { "id": "edit-ko", "fileName": "edit_ko", "directory": "Controlability-edit" }, { "id": "edit-zh", "fileName": "edit_zh", "directory": "Controlability-edit" }], "Application-Lyric2Vocal": [{ "id": "lyrics2vocal-in-you-i-see", "fileName": "lyrics2vocal_in_you_i_see", "directory": "Application-Lyric2Vocal" }, { "id": "lyrics2vocal-lemonade", "fileName": "lyrics2vocal_lemonade", "directory": "Application-Lyric2Vocal" }, { "id": "lyrics2vocal-turn-me-on", "fileName": "lyrics2vocal_turn_me_on", "directory": "Application-Lyric2Vocal" }, { "id": "lyrics2vocal-whispering-shadows", "fileName": "lyrics2vocal_whispering_shadows", "directory": "Application-Lyric2Vocal" }, { "id": "lyrics2vocal-you-been-chosen-too", "fileName": "lyrics2vocal_you_been_chosen_too", "directory": "Application-Lyric2Vocal" }], "Text2Sample": [{ "id": "text2samples-acounstic-guitar", "fileName": "text2samples_acounstic_guitar", "directory": "Text2Sample" }, { "id": "text2samples-bass", "fileName": "text2samples_bass", "directory": "Text2Sample" }, { "id": "text2samples-drums", "fileName": "text2samples_drums", "directory": "Text2Sample" }, { "id": "text2samples-drums-grooves", "fileName": "text2samples_drums_grooves", "directory": "Text2Sample" }, { "id": "text2samples-edrum", "fileName": "text2samples_edrum", "directory": "Text2Sample" }, { "id": "text2samples-electric-guitar", "fileName": "text2samples_electric_guitar", "directory": "Text2Sample" }, { "id": "text2samples-erhu", "fileName": "text2samples_erhu", "directory": "Text2Sample" }, { "id": "text2samples-flute", "fileName": "text2samples_flute", "directory": "Text2Sample" }, { "id": "text2samples-guitar", "fileName": "text2samples_guitar", "directory": "Text2Sample" }, { "id": "text2samples-hand-pan", "fileName": "text2samples_hand_pan", "directory": "Text2Sample" }, { "id": "text2samples-koto", "fileName": "text2samples_koto", "directory": "Text2Sample" }, { "id": "text2samples-lead-guitar", "fileName": "text2samples_lead_guitar", "directory": "Text2Sample" }, { "id": "text2samples-pad", "fileName": "text2samples_pad", "directory": "Text2Sample" }, { "id": "text2samples-saxphone", "fileName": "text2samples_saxphone", "directory": "Text2Sample" }, { "id": "text2samples-synth", "fileName": "text2samples_synth", "directory": "Text2Sample" }, { "id": "text2samples-violin", "fileName": "text2samples_violin", "directory": "Text2Sample" }], "RapMachine": [{ "id": "neural-beat", "fileName": "neural_beat", "directory": "RapMachine" }, { "id": "betray", "fileName": "betray", "directory": "RapMachine" }, { "id": "The-Boss-Is-Dead", "fileName": "The_Boss_Is_Dead", "directory": "RapMachine" }, { "id": "Try-Not-to-Tongue-Twist", "fileName": "Try_Not_to_Tongue_Twist", "directory": "RapMachine" }, { "id": "Sandy-Volleyball-Ground", "fileName": "Sandy_Volleyball_Ground", "directory": "RapMachine" }, { "id": "Beneath-the-Shadow", "fileName": "Beneath_the_Shadow", "directory": "RapMachine" }, { "id": "Rapatapa", "fileName": "Rapatapa", "directory": "RapMachine" }, { "id": "Betting-Bars", "fileName": "Betting_Bars", "directory": "RapMachine" }, { "id": "Screen-Syndrome", "fileName": "Screen_Syndrome", "directory": "RapMachine" }, { "id": "dingdingdangdang", "fileName": "dingdingdangdang", "directory": "RapMachine" }, { "id": "Consciousness-Roaming", "fileName": "Consciousness_Roaming", "directory": "RapMachine" }, { "id": "Neon-Compass", "fileName": "Neon_Compass", "directory": "RapMachine" }, { "id": "zhongguohua", "fileName": "zhongguohua", "directory": "RapMachine" }, { "id": "Swish-Swoosh", "fileName": "Swish_Swoosh", "directory": "RapMachine" }, { "id": "Gold-Chains", "fileName": "Gold_Chains", "directory": "RapMachine" }, { "id": "Silicon-Valley", "fileName": "Silicon_Valley", "directory": "RapMachine" }] };;

          // 產表格列

          generateTableRows(['GeneralSongs', 'Experimental', 'Instrumentals', 'MultipleLang'], 'baseline-quality');

          generateTableRows(['Controlability-retake', 'Controlability-repaint', 'Controlability-edit'], 'controlability');

          generateTableRows(['Application-Lyric2Vocal', 'Text2Sample', 'RapMachine'], 'application');


          // 初始化模式指示器
          document.querySelector('#player-shuffle-btn .mode-indicator').textContent = '';
          document.querySelector('#player-repeat-btn .mode-indicator').textContent = '';

          // 更新全部切換按鈕的文字以符合初始狀態(全部收合)
          document.getElementById('toggle-all-lyrics').textContent = '展開所有歌詞'; // 翻譯

          // 為所有歌詞切換標頭新增點擊事件監聽器
          document.querySelectorAll('.lyrics-header').forEach(function (header) {
            header.addEventListener('click', function () {
              // 切換父元素的 'expanded' class
              this.parentElement.classList.toggle('expanded');
            });
          });

          // 更新所有樣本的扁平化列表
          musicSamples = Object.values(musicSampleSections).flat();
          musicSamples.forEach(sample => {
            fetchTextAndUpdate(`raw/samples/${sample.directory}/${sample.fileName}.txt`, `${sample.id}-lyrics`);
            fetchTextAndUpdate(`raw/samples/${sample.directory}/${sample.fileName}_prompt.txt`, `${sample.id}-prompt`);
          });

          // 表格產生後為播放按鈕新增事件監聽器
          addPlayButtonListeners();
        } catch (error) {
          console.error('載入樣本資料時發生錯誤:', error); // 翻譯
        }
      }

      // 開始載入樣本資料
      loadSamplesData();

      // 按區塊動態產生表格列
      function generateTableRows(sectionIds, select_id) {
        // function generateTableRows() {
        // 確保我們使用的是最新的扁平化列表
        musicSamples = Object.values(musicSampleSections).flat();
        // const tbody = document.querySelector('table tbody');
        const tbody = document.querySelector(`tbody#${select_id}`);
        tbody.innerHTML = ''; // 清除現有內容

        // 處理每個區塊
        Object.entries(musicSampleSections).forEach(([sectionId, samples]) => {
          if (!sectionIds.includes(sectionId)) {
            return;
          }
          // 創建區塊標頭列
          const sectionRow = document.createElement('tr');
          const sectionCell = document.createElement('td');
          sectionCell.colSpan = 3;
          sectionCell.className = 'section-header';
          sectionCell.id = sectionId;

          // 設定區塊標頭樣式
          sectionCell.style.backgroundColor = '#f0f0f0';
          sectionCell.style.padding = '10px';
          sectionCell.style.fontWeight = 'bold';
          sectionCell.style.fontSize = '1.2em';
          sectionCell.style.textAlign = 'center';

          // 根據 ID 設定區塊標題
          let sectionTitle = sectionId;
          if (sectionId === 'GeneralSongs') {
            sectionTitle = '一般歌曲'; // 翻譯
          } else if (sectionId === 'MultipleLang') {
            sectionTitle = '多種語言'; // 翻譯
          } else if (sectionId === 'Instrumentals') {
            sectionTitle = '純音樂'; // 翻譯
          } else if (sectionId === 'Experimental') {
            sectionTitle = '實驗性輸入'; // 翻譯
          } else if (sectionId === 'Controlability-retake') {
            sectionTitle = '變奏生成'; // 翻譯
          } else if (sectionId === 'Controlability-repaint') {
            sectionTitle = '重繪'; // 翻譯
          } else if (sectionId === 'Controlability-edit') {
            sectionTitle = '編輯'; // 翻譯
          } else if (sectionId === 'Application-Lyric2Vocal') {
            sectionTitle = '歌詞轉人聲 (LoRA)'; // 翻譯
          } else if (sectionId === 'Text2Sample') {
            sectionTitle = '文字轉取樣 (LoRA)'; // 翻譯
          } else if (sectionId === 'RapMachine') {
            sectionTitle = '饒舌機器 (LoRA)'; // 翻譯
          }

          // 清除現有內容
          sectionCell.textContent = '';

          // 創建具有更突出樣式的標題元素
          const titleElement = document.createElement('div');
          titleElement.textContent = sectionTitle;
          titleElement.style.marginBottom = '15px';
          titleElement.style.fontSize = '1.3em';
          titleElement.style.fontWeight = 'bold';
          titleElement.style.color = '#333';
          titleElement.style.letterSpacing = '1px';
          sectionCell.appendChild(titleElement);

          // 根據區塊 ID 新增具有獨特樣式的註解 div
          const noteDiv = document.createElement('div');
          noteDiv.style.borderLeft = '4px solid #097EFF';
          noteDiv.style.paddingLeft = '15px';
          noteDiv.style.marginBottom = '10px';
          noteDiv.style.textAlign = 'left';
          noteDiv.style.fontSize = '0.85em';
          noteDiv.style.color = '#606c71';
          noteDiv.style.backgroundColor = '#f8f9fa';
          noteDiv.style.padding = '8px 15px';
          noteDiv.style.borderRadius = '0 4px 4px 0';

          const noteTitle = document.createElement('p');
          noteTitle.style.fontWeight = 'bold';
          noteTitle.style.marginBottom = '8px';
          noteTitle.style.color = '#097EFF';
          noteTitle.style.fontSize = '1em';
          noteTitle.style.borderBottom = '1px solid #dee2e6';
          noteTitle.style.paddingBottom = '4px';
          noteTitle.textContent = '注意:'; // 翻譯
          noteDiv.appendChild(noteTitle);

          // 根據區塊 ID 新增特定註解
          if (sectionId === 'GeneralSongs') {
            addNoteItem(noteDiv, '支援所有主流音樂風格,並接受多種描述格式,包括簡短標籤、描述性文字或使用情境。'); // 翻譯
          } else if (sectionId === 'Experimental') {
            addNoteItem(noteDiv, '實驗性測試各種輸入以評估其可用性。'); // 翻譯
          } else if (sectionId === 'Instrumentals') {
            addNoteItem(noteDiv, '支援不同類型和風格的各種純音樂生成。'); // 翻譯
            addNoteItem(noteDiv, '能夠為每種樂器產生具有適當音色和表現力的逼真器樂音軌。'); // 翻譯
            addNoteItem(noteDiv, '可以生成包含多種樂器的複雜編曲,同時保持音樂的連貫性。'); // 翻譯
          } else if (sectionId === 'MultipleLang') {
            addNoteItem(noteDiv, '支援 19 種語言。但由於資料不平衡,較不常見的語言表現可能較差。表現良好的前 10 種語言為:'); // 翻譯
            const langList = document.createElement('p');
            langList.style.margin = '0';
            langList.style.paddingLeft = '15px';
            langList.innerHTML = '• 英語<br>• 中文<br>• 俄語<br>• 西班牙語<br>• 日語<br>• 德語<br>• 法語<br>• 葡萄牙語<br>• 義大利語<br>• 韓語'; // 翻譯
            noteDiv.appendChild(langList);
          } else if (sectionId === 'Controlability-retake') {
            addNoteItem(noteDiv, '此功能採用無需訓練的推論期最佳化技術實現。'); // 翻譯
            addNoteItem(noteDiv, '我們的流匹配模型會生成初始雜訊,然後使用 trigFlow 的雜訊公式添加額外的高斯雜訊。'); // 翻譯
            addNoteItem(noteDiv, '透過控制原始初始雜訊和新高斯雜訊之間的混合比例,我們可以調整生成輸出中的變異程度。'); // 翻譯
          } else if (sectionId === 'Controlability-repaint') {
            addNoteItem(noteDiv, '透過在目標音訊輸入中添加雜訊並在 ODE 過程中應用遮罩約束來實現。'); // 翻譯
            addNoteItem(noteDiv, '當輸入條件與原始生成不同時,僅能修改特定方面,同時保留其餘部分。'); // 翻譯
            addNoteItem(noteDiv, '結合變奏生成技術,它還可以創建風格、歌詞或人聲的局部變化。'); // 翻譯
          } else if (sectionId === 'Controlability-edit') {
            addNoteItem(noteDiv, '我們創新地應用了流編輯技術,以實現局部歌詞修改,同時保留旋律、人聲和伴奏。'); // 翻譯
            addNoteItem(noteDiv, '適用於生成內容和上傳的音訊,極大地增強了創作可能性。'); // 翻譯
            addNoteItem(noteDiv, '目前限制:為避免失真,一次只能修改少量歌詞片段,但可以依序進行多次編輯。'); // 翻譯
          } else if (sectionId === 'Application-Lyric2Vocal') {
            addNoteItem(noteDiv, '基於在純人聲資料上進行 LoRA 微調的模型,可直接從歌詞生成人聲樣本。'); // 翻譯
            addNoteItem(noteDiv, '提供眾多實際應用,如人聲小樣、導唱音軌、歌曲創作輔助和人聲編曲實驗。'); // 翻譯
            addNoteItem(noteDiv, '提供一種快速測試歌詞演唱效果的方法,幫助歌曲創作者更快地迭代。'); // 翻譯
          } else if (sectionId === 'Text2Sample') {
            addNoteItem(noteDiv, '類似於歌詞轉人聲,但在純樂器和取樣資料上進行微調。'); // 翻譯
            addNoteItem(noteDiv, '能夠從文字描述中生成概念性的音樂製作取樣。'); // 翻譯
            addNoteItem(noteDiv, '有助於快速創建樂器循環樂句、音效和音樂製作元素。'); // 翻譯
          } else if (sectionId === 'RapMachine') {
            addNoteItem(noteDiv, '在純饒舌資料上進行微調,以創建專門用於饒舌生成的 AI 系統。'); // 翻譯
            addNoteItem(noteDiv, '預期功能包括 AI 饒舌對戰和透過饒舌進行敘事表達。'); // 翻譯
            addNoteItem(noteDiv, '饒舌具有卓越的敘事和表達能力,提供了非凡的應用潛力。'); // 翻譯
          } else if (sectionId === 'StemGen') {
            addNoteItem(noteDiv, '一個在多軌資料上訓練的 controlnet-lora,用於生成獨立的樂器音軌。'); // 翻譯
            addNoteItem(noteDiv, '以參考音軌和指定的樂器(或樂器參考音訊)作為輸入。'); // 翻譯
            addNoteItem(noteDiv, '輸出一個與參考音軌互補的樂器音軌,例如為長笛旋律創建鋼琴伴奏或為主奏吉他添加爵士鼓。'); // 翻譯
          } else if (sectionId === 'Singing2Accompaniment') {
            addNoteItem(noteDiv, 'StemGen 的反向過程,從單一人聲音軌生成混合母帶音軌。'); // 翻譯
            addNoteItem(noteDiv, '以人聲音軌和指定風格作為輸入,以產生完整的人聲伴奏。'); // 翻譯
            addNoteItem(noteDiv, '創建與輸入人聲互補的完整樂器背景音樂,使其易於為任何歌聲錄音添加專業水準的伴奏。'); // 翻譯
          }

          // 如果註解 div 有內容,則將其新增到區塊儲存格
          if (noteDiv.childNodes.length > 1) {
            sectionCell.appendChild(noteDiv);
          }

          sectionRow.appendChild(sectionCell);
          tbody.appendChild(sectionRow);

          // 新增註解項目的輔助函數
          function addNoteItem(parent, text) {
            const noteItem = document.createElement('p');
            noteItem.style.margin = '0 0 6px 0';
            noteItem.style.lineHeight = '1.4';
            noteItem.style.textIndent = '-12px';
            noteItem.style.paddingLeft = '12px';
            noteItem.textContent = '- ' + text;
            parent.appendChild(noteItem);
          }

          // 為此區塊新增樣本
          samples.forEach(sample => {
            const row = document.createElement('tr');

            // 第一欄 - 提示詞
            const promptCell = document.createElement('td');
            promptCell.className = 'tg-0lax';
            promptCell.style.width = '500px';
            const promptSpan = document.createElement('span');
            promptSpan.id = `${sample.id}-prompt`;
            promptSpan.textContent = '正在載入提示詞...'; // 翻譯
            promptCell.appendChild(promptSpan);

            // 第二欄 - 歌詞切換
            const lyricsCell = document.createElement('td');
            lyricsCell.style.verticalAlign = 'top';
            lyricsCell.style.width = '1000px'; /* 為歌詞分配更多空間 */
            lyricsCell.style.position = 'relative'; /* 用於子元素的正確定位 */

            const lyricsToggle = document.createElement('div');
            lyricsToggle.className = 'lyrics-toggle'; // 預設移除 'expanded' 以收合

            const lyricsHeader = document.createElement('div');
            lyricsHeader.className = 'lyrics-header';
            lyricsHeader.textContent = '歌詞'; // 翻譯
            switch (sample.id) {
              case 'dark-atmospheric':
                lyricsHeader.textContent = '中文'; // 翻譯
                break;
              case 'electro-house':
                lyricsHeader.textContent = '中文'; // 翻譯
                break;
              case 'folk-rnb-female':
                lyricsHeader.textContent = '中文'; // 翻譯
                break;
              case 'french-pop':
                lyricsHeader.textContent = '法文'; // 翻譯
                break;
              case 'german-dance':
                lyricsHeader.textContent = '德文'; // 翻譯
                break;
              case 'hip-house':
                lyricsHeader.textContent = '中文'; // 翻譯
                break;
              case 'italian-folk':
                lyricsHeader.textContent = '義大利文'; // 翻譯
                break;
              case 'jpop':
                lyricsHeader.textContent = '日文'; // 翻譯
                break;
              case 'kpop':
                lyricsHeader.textContent = '韓文'; // 翻譯
                break;
              case 'mandopop':
                lyricsHeader.textContent = '中文'; // 翻譯
                break;
              case 'portuguese-pop':
                lyricsHeader.textContent = '葡萄牙文'; // 翻譯
                break;
              case 'russian-folk':
                lyricsHeader.textContent = '俄文'; // 翻譯
                break;
              case 'spanish-song':
                lyricsHeader.textContent = '西班牙文'; // 翻譯
                break;
            }

            const toggleIcon = document.createElement('span');
            toggleIcon.className = 'toggle-icon';
            toggleIcon.textContent = '▼';
            lyricsHeader.appendChild(toggleIcon);

            const lyricsBody = document.createElement('div');
            lyricsBody.className = 'lyrics-body';
            lyricsBody.style.display = 'flex';
            lyricsBody.style.flexDirection = 'column';
            lyricsBody.style.alignItems = 'flex-start';

            const lyricsPre = document.createElement('pre');
            lyricsPre.id = `${sample.id}-lyrics`;
            lyricsPre.textContent = '正在載入歌詞...'; // 翻譯
            lyricsPre.style.alignSelf = 'flex-start';

            lyricsBody.appendChild(lyricsPre);
            lyricsToggle.appendChild(lyricsHeader);
            lyricsToggle.appendChild(lyricsBody);
            lyricsCell.appendChild(lyricsToggle);

            // 第三欄 - 音訊播放器
            const audioCell = document.createElement('td');
            audioCell.className = 'tg-0lax';
            audioCell.style.width = '60px'; /* 從 500px 減少,使其更接近播放按鈕大小 */

            // 為此音軌創建播放按鈕
            const playButton = document.createElement('button');
            playButton.innerHTML = '▶'; // 播放圖示
            playButton.className = 'track-play-btn';

            // 將音軌資料儲存為屬性(不含 src - 我們將動態獲取)
            playButton.dataset.directory = sample.directory;
            playButton.dataset.fileName = sample.fileName;
            playButton.dataset.id = sample.id;
            playButton.dataset.title = sample.fileName.replace(/_/g, ' ');

            // 將播放按鈕新增到儲存格
            audioCell.appendChild(playButton);

            // 我們不再需要這行,因為我們改為附加 audioWrapper

            // 將所有儲存格新增到列
            row.appendChild(promptCell);
            row.appendChild(lyricsCell);
            row.appendChild(audioCell);

            // 將列新增到表格
            tbody.appendChild(row);
          });
        });
      }

      // 從檔案獲取文字並更新元素的函數
      async function fetchTextAndUpdate(filePath, elementId) {
        const element = document.getElementById(elementId);
        if (!element) {
          console.error(`Element with id ${elementId} not found.`);
          return;
        }

        // 優先從本地對象讀取
        if (typeof localTextContent !== 'undefined' && localTextContent.hasOwnProperty(filePath)) {
          element.textContent = localTextContent[filePath];
          // console.log(`Loaded from localTextContent: ${filePath}`);
          return;
        }

        try {
          const response = await fetch(filePath);
          if (!response.ok) {
            throw new Error(`無法獲取 ${filePath}${response.status}`); // 翻譯
          }
          const text = await response.text();
          const element = document.getElementById(elementId);
          if (element) {
            element.textContent = text;
          }
        } catch (error) {
          console.error('獲取文字時發生錯誤:', error); // 翻譯
          const element = document.getElementById(elementId);
          if (element) {
            element.textContent = '無歌詞'; // 翻譯
          }
        }
      }

      // 全部歌詞切換功能
      const toggleAllButton = document.getElementById('toggle-all-lyrics');
      let allExpanded = false; // 開始時全部收合

      toggleAllButton.addEventListener('click', function () {
        const lyricsToggles = document.querySelectorAll('.lyrics-toggle');

        if (allExpanded) {
          // 全部收合
          lyricsToggles.forEach(toggle => {
            toggle.classList.remove('expanded');
          });
          toggleAllButton.textContent = '展開所有歌詞'; // 翻譯
        } else {
          // 全部展開
          lyricsToggles.forEach(toggle => {
            toggle.classList.add('expanded');
          });
          toggleAllButton.textContent = '收合所有歌詞'; // 翻譯
        }

        // 切換狀態
        allExpanded = !allExpanded;

        // 如果我們正在全部收合,請確保重新展開目前播放的音軌
        if (!allExpanded && currentTrackIndex >= 0) {
          const track = musicSamples[currentTrackIndex];
          const lyricsElement = document.getElementById(`${track.id}-lyrics`);
          if (lyricsElement) {
            const lyricsToggle = lyricsElement.closest('.lyrics-toggle');
            if (lyricsToggle) {
              lyricsToggle.classList.add('expanded');
            }
          }
        }
      });

      // 全域播放器實作
      const globalPlayer = document.getElementById('global-player');
      const globalAudio = document.getElementById('global-audio');
      const playerPlayBtn = document.getElementById('player-play-btn');
      const playerPrevBtn = document.getElementById('player-prev-btn');
      const playerNextBtn = document.getElementById('player-next-btn');
      const playerShuffleBtn = document.getElementById('player-shuffle-btn');
      const playerRepeatBtn = document.getElementById('player-repeat-btn');
      const playerProgressContainer = document.querySelector('.player-progress-container');
      const playerProgressBar = document.querySelector('.player-progress-bar');
      const playerProgressHandle = document.querySelector('.player-progress-handle');
      const playerTimeDisplay = document.querySelector('.player-time-display');
      const playerTrackTitle = document.querySelector('.player-track-title');
      const playerTrackGenre = document.querySelector('.player-track-genre');
      const playerAlbumArt = document.getElementById('player-album-art');

      // 播放器狀態
      let currentTrackIndex = -1;
      let isShuffleMode = false;
      let isRepeatMode = false;
      let playQueue = [];

      // 格式化時間函數(將秒轉換為 MM:SS 格式)
      function formatTime(seconds) {
        const minutes = Math.floor(seconds / 60);
        const remainingSeconds = Math.floor(seconds % 60);
        return `${minutes}:${remainingSeconds < 10 ? '0' : ''}${remainingSeconds}`;
      }

      // 根據隨機播放模式更新播放佇列
      function updatePlayQueue() {
        if (isShuffleMode) {
          // 創建一個排除目前音軌的隨機佇列
          const availableTracks = [...Array(musicSamples.length).keys()].filter(i => i !== currentTrackIndex);
          // 打亂可用音軌
          for (let i = availableTracks.length - 1; i > 0; i--) {
            const j = Math.floor(Math.random() * (i + 1));
            [availableTracks[i], availableTracks[j]] = [availableTracks[j], availableTracks[i]];
          }
          // 如果目前音軌有效,則將其放在開頭
          if (currentTrackIndex >= 0) {
            playQueue = [currentTrackIndex, ...availableTracks];
          } else {
            playQueue = availableTracks;
          }
        } else {
          // 循序模式 - 只需創建一個從 0 到音軌數量的陣列
          playQueue = [...Array(musicSamples.length).keys()];
          // 如果我們有目前音軌,則旋轉佇列,使其從下一個音軌開始
          if (currentTrackIndex >= 0) {
            const currentIndex = playQueue.indexOf(currentTrackIndex);
            playQueue = [...playQueue.slice(currentIndex), ...playQueue.slice(0, currentIndex)];
          }
        }
      }

      // 更新所有音軌按鈕以顯示正確的播放/暫停狀態的函數
      function updateTrackButtons() {
        document.querySelectorAll('.track-play-btn').forEach(button => {
          const sampleId = button.dataset.id;
          const trackIndex = musicSamples.findIndex(s => s.id === sampleId);
          if (trackIndex === currentTrackIndex && !globalAudio.paused) {
            button.innerHTML = '❚❚'; // 暫停圖示
            button.classList.add('playing');
          } else {
            button.innerHTML = '▶'; // 播放圖示
            button.classList.remove('playing');
          }
        });
      }

      // 捲動到目前音軌的歌詞並僅展開該音軌的函數
      function scrollToCurrentTrackLyrics() {
        if (currentTrackIndex >= 0) {
          // 首先收合所有歌詞
          document.querySelectorAll('.lyrics-toggle').forEach(toggle => {
            toggle.classList.remove('expanded');
          });

          // 然後僅展開目前音軌的歌詞
          const track = musicSamples[currentTrackIndex];
          const lyricsElement = document.getElementById(`${track.id}-lyrics`);
          if (lyricsElement) {
            // 確保歌詞切換已展開
            const lyricsToggle = lyricsElement.closest('.lyrics-toggle');
            if (lyricsToggle) {
              lyricsToggle.classList.add('expanded');
            }

            // 稍微延遲後捲動到歌詞,以允許展開
            setTimeout(() => {
              lyricsElement.scrollIntoView({ behavior: 'smooth', block: 'center' });
            }, 300);
          }
        }
      }

      // 播放特定音軌
      async function playTrack(index) {
        if (index >= 0 && index < musicSamples.length) {
          currentTrackIndex = index;
          const track = musicSamples[index];

          // 更新播放器 UI
          playerTrackTitle.textContent = track.fileName.replace(/_/g, ' ');
          playerTrackGenre.textContent = track.id.replace(/-/g, ' ');

          // 檢查文字是否過長,如果需要則應用捲動
          setTimeout(() => {
            // 音軌標題
            playerTrackTitle.classList.remove('scrolling', 'length-medium', 'length-long');
            const titleText = playerTrackTitle.textContent;
            playerTrackTitle.setAttribute('data-content', titleText); // 為 ::after 設定內容

            if (playerTrackTitle.scrollWidth > playerTrackTitle.clientWidth) {
              playerTrackTitle.classList.add('scrolling');

              // 計算比例以決定動畫速度
              const ratio = playerTrackTitle.scrollWidth / playerTrackTitle.clientWidth;
              if (ratio >= 2) {
                playerTrackTitle.classList.add('length-long');
              } else if (ratio >= 1.5) {
                playerTrackTitle.classList.add('length-medium');
              }
            }

            // 音軌類型
            playerTrackGenre.classList.remove('scrolling', 'length-medium', 'length-long');
            const genreText = playerTrackGenre.textContent;
            playerTrackGenre.setAttribute('data-content', genreText); // 為 ::after 設定內容

            if (playerTrackGenre.scrollWidth > playerTrackGenre.clientWidth) {
              playerTrackGenre.classList.add('scrolling');

              // 計算比例以決定動畫速度
              const ratio = playerTrackGenre.scrollWidth / playerTrackGenre.clientWidth;
              if (ratio >= 2) {
                playerTrackGenre.classList.add('length-long');
              } else if (ratio >= 1.5) {
                playerTrackGenre.classList.add('length-medium');
              }
            }
          }, 50); // 短暫超時以確保文字已渲染

          // 產生隨機彩色 SVG 作為專輯封面
          const getRandomColor = () => {
            const letters = '0123456789ABCDEF';
            let color = '#';
            for (let i = 0; i < 6; i++) {
              color += letters[Math.floor(Math.random() * 16)];
            }
            return color;
          };

          // 創建一個隨機的音樂主題 SVG
          const bgColor = getRandomColor();
          const fgColor = getRandomColor();
          const svgPatterns = [
            // 音符圖案
            `<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200" viewBox="0 0 200 200">
                <rect width="200" height="200" fill="${bgColor}"/>
                <path d="M80 30 L80 130 Q80 150 60 150 Q40 150 40 130 Q40 110 60 110 Q70 110 80 120 M120 50 L120 110 Q120 130 100 130 Q80 130 80 110 Q80 90 100 90 Q110 90 120 100" stroke="${fgColor}" stroke-width="8" fill="none"/>
              </svg>`,
            // 等化器圖案
            `<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200" viewBox="0 0 200 200">
                <rect width="200" height="200" fill="${bgColor}"/>
                <rect x="40" y="40" width="20" height="120" fill="${fgColor}"/>
                <rect x="80" y="80" width="20" height="80" fill="${fgColor}"/>
                <rect x="120" y="20" width="20" height="140" fill="${fgColor}"/>
                <rect x="160" y="60" width="20" height="100" fill="${fgColor}"/>
              </svg>`,
            // 黑膠唱片圖案
            `<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200" viewBox="0 0 200 200">
                <rect width="200" height="200" fill="${bgColor}"/>
                <circle cx="100" cy="100" r="80" fill="${fgColor}"/>
                <circle cx="100" cy="100" r="30" fill="${bgColor}"/>
                <circle cx="100" cy="100" r="10" fill="${fgColor}"/>
              </svg>`
          ];

          // 選擇一個隨機 SVG 圖案
          const randomSvg = svgPatterns[Math.floor(Math.random() * svgPatterns.length)];

          // 將 SVG 轉換為 data URL
          const svgDataUrl = 'data:image/svg+xml;base64,' + btoa(randomSvg);
          playerAlbumArt.src = svgDataUrl;
          playerAlbumArt.style.display = 'block';
          playerAlbumArt.style.backgroundColor = 'transparent';

          // 顯示載入指示器
          playerPlayBtn.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" width="2em" height="2em" viewBox="0 0 24 24" fill="currentColor" class="w-6 h-6 fill-primary"><path d="M12 4V2A10 10 0 0 0 2 12h2a8 8 0 0 1 8-8z"><animateTransform attributeName="transform" type="rotate" from="0 12 12" to="360 12 12" dur="1s" repeatCount="indefinite"/></path></svg>'; // 載入圖示

          try {
            // 使用 AudioLoader 獲取最佳化音訊 URL
            const audioUrl = await audioLoader.getAudioUrl(track.directory, track.fileName);

            // 設定音訊來源並播放
            globalAudio.src = audioUrl;
            await globalAudio.play();

            playerPlayBtn.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" width="2em" height="2em" viewBox="0 0 24 24" fill="currentColor" class="w-6 h-6 fill-primary"><path d="M8 19c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2s-2 .9-2 2v10c0 1.1.9 2 2 2zm8-2V7c0-1.1-.9-2-2-2s-2 .9-2 2v10c0 1.1.9 2 2 2s2-.9 2-2z"></path></svg>'; // 暫停圖示
            globalPlayer.classList.add('visible'); // 顯示播放器
            updateTrackButtons(); // 更新所有音軌按鈕
            scrollToCurrentTrackLyrics(); // 捲動到歌詞

            // 記錄正在使用的格式
            console.log(`正在播放 ${track.fileName},來源:${audioUrl}`); // 翻譯
          } catch (error) {
            console.error('播放音訊時發生錯誤:', error); // 翻譯
            playerPlayBtn.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" width="2em" height="2em" viewBox="0 0 24 24" fill="currentColor" class="w-6 h-6 fill-primary"><path d="M8 6.82v10.36c0 .79.87 1.27 1.54.84l8.14-5.18a1 1 0 0 0 0-1.69L9.54 5.98A.998.998 0 0 0 8 6.82z"></path></svg>'; // 重設為播放圖示
          }

          // 更新播放佇列
          updatePlayQueue();
        }
      }

      // 播放佇列中的下一首音軌
      function playNextTrack() {
        if (playQueue.length > 0) {
          // 如果重複模式開啟且目前音軌已結束,則再次播放目前音軌
          if (isRepeatMode && globalAudio.ended) {
            globalAudio.currentTime = 0;
            globalAudio.play()
              .then(() => {
                updateTrackButtons();
              });
            return;
          }

          // 在佇列中尋找目前音軌的索引
          let currentQueueIndex = -1;
          if (currentTrackIndex >= 0) {
            currentQueueIndex = playQueue.indexOf(currentTrackIndex);
          }

          // 獲取下一首音軌的索引
          let nextQueueIndex = (currentQueueIndex + 1) % playQueue.length;
          let nextTrackIndex = playQueue[nextQueueIndex];

          // 播放下一首音軌
          playTrack(nextTrackIndex);
        } else if (musicSamples.length > 0) {
          // 如果佇列為空但有樣本,則初始化並播放第一首音軌
          updatePlayQueue();
          if (playQueue.length > 0) {
            playTrack(playQueue[0]);
          }
        }
      }

      // 播放上一首音軌
      function playPreviousTrack() {
        if (playQueue.length > 0) {
          // 將最後一首音軌移到最前面
          const prevIndex = playQueue.pop();
          playQueue.unshift(prevIndex);
          // 同時將目前的第一首音軌(現在是第二首)移到最前面
          const currentIndex = playQueue.shift();
          playQueue.unshift(currentIndex);
          // 播放上一首音軌
          playTrack(prevIndex);
        }
      }

      // 為音軌播放按鈕新增事件監聽器的函數
      function addPlayButtonListeners() {
        document.querySelectorAll('.track-play-btn').forEach(button => {
          button.addEventListener('click', function () {
            // 在目前的 musicSamples 陣列中尋找此樣本的索引
            const sampleId = this.dataset.id;
            const trackIndex = musicSamples.findIndex(s => s.id === sampleId);

            // 如果這是目前播放的音軌,則切換播放/暫停
            if (trackIndex === currentTrackIndex && globalAudio.src) {
              if (globalAudio.paused) {
                globalAudio.play()
                  .then(() => {
                    playerPlayBtn.innerHTML = '❚❚'; // 暫停圖示
                    updateTrackButtons();
                  });
              } else {
                globalAudio.pause();
                playerPlayBtn.innerHTML = '▶'; // 播放圖示
                updateTrackButtons();
              }
            } else {
              // 在按鈕上顯示載入指示器
              this.innerHTML = '⏳️'; // 載入圖示

              // 否則播放新的音軌
              playTrack(trackIndex);
            }
          });
        });
      }

      // 播放/暫停按鈕點擊事件
      playerPlayBtn.addEventListener('click', function () {
        if (globalAudio.paused) {
          if (globalAudio.src) {
            globalAudio.play()
              .then(() => {
                playerPlayBtn.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" width="2em" height="2em" viewBox="0 0 24 24" fill="currentColor" class="w-6 h-6 fill-primary"><path d="M8 19c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2s-2 .9-2 2v10c0 1.1.9 2 2 2zm8-2V7c0-1.1-.9-2-2-2s-2 .9-2 2v10c0 1.1.9 2 2 2s2-.9 2-2z"></path></svg>'; // 暫停圖示
                updateTrackButtons();
              });
          } else if (playQueue.length > 0) {
            // 如果沒有載入音軌但有佇列,則播放第一首音軌
            playTrack(playQueue[0]);
          }
        } else {
          globalAudio.pause();
          playerPlayBtn.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" width="2em" height="2em" viewBox="0 0 24 24" fill="currentColor" class="w-6 h-6 fill-primary"><path d="M8 6.82v10.36c0 .79.87 1.27 1.54.84l8.14-5.18a1 1 0 0 0 0-1.69L9.54 5.98A.998.998 0 0 0 8 6.82z"></path></svg>'; // 播放圖示
          updateTrackButtons();
        }
      });

      // 上一首音軌按鈕點擊事件
      playerPrevBtn.addEventListener('click', playPreviousTrack);

      // 下一首音軌按鈕點擊事件
      playerNextBtn.addEventListener('click', function () {
        playNextTrack();
      });

      // 隨機播放按鈕點擊事件
      playerShuffleBtn.addEventListener('click', function () {
        isShuffleMode = !isShuffleMode;
        this.classList.toggle('active', isShuffleMode);

        // 如果開啟隨機播放,則關閉重複播放
        if (isShuffleMode && isRepeatMode) {
          isRepeatMode = false;
          playerRepeatBtn.classList.remove('active');
          playerRepeatBtn.querySelector('.mode-indicator').textContent = '';
        }

        // 更新指示器文字
        const indicator = this.querySelector('.mode-indicator');
        indicator.textContent = isShuffleMode ? '開啟' : ''; // 翻譯
        updatePlayQueue();
      });

      // 重複播放按鈕點擊事件
      playerRepeatBtn.addEventListener('click', function () {
        isRepeatMode = !isRepeatMode;
        this.classList.toggle('active', isRepeatMode);

        // 如果開啟重複播放,則關閉隨機播放
        if (isRepeatMode && isShuffleMode) {
          isShuffleMode = false;
          playerShuffleBtn.classList.remove('active');
          playerShuffleBtn.querySelector('.mode-indicator').textContent = '';
          // 由於隨機播放模式已更改,更新播放佇列
          updatePlayQueue();
        }

        // 更新指示器文字
        const indicator = this.querySelector('.mode-indicator');
        indicator.textContent = isRepeatMode ? '開啟' : ''; // 翻譯
      });

      // 音訊播放時更新進度列
      globalAudio.addEventListener('timeupdate', function () {
        if (globalAudio.duration) {
          const percent = (globalAudio.currentTime / globalAudio.duration) * 100;
          playerProgressBar.style.width = percent + '%';
          playerTimeDisplay.textContent = `${formatTime(globalAudio.currentTime)} / ${formatTime(globalAudio.duration)}`;
        }
      });

      // 允許透過點擊進度列來尋找
      playerProgressContainer.addEventListener('click', function (e) {
        if (globalAudio.duration) {
          const rect = playerProgressContainer.getBoundingClientRect();
          const pos = (e.clientX - rect.left) / rect.width;
          globalAudio.currentTime = pos * globalAudio.duration;
        }
      });

      // 處理進度控制點的拖曳功能
      let isDragging = false;

      playerProgressHandle.addEventListener('mousedown', function (e) {
        isDragging = true;
        e.preventDefault(); // 防止文字選取
      });

      document.addEventListener('mousemove', function (e) {
        if (isDragging && globalAudio.duration) {
          const rect = playerProgressContainer.getBoundingClientRect();
          let pos = (e.clientX - rect.left) / rect.width;

          // 將位置限制在 0 和 1 之間
          pos = Math.max(0, Math.min(1, pos));

          // 拖曳時視覺上更新進度列
          playerProgressBar.style.width = (pos * 100) + '%';
        }
      });

      document.addEventListener('mouseup', function (e) {
        if (isDragging && globalAudio.duration) {
          const rect = playerProgressContainer.getBoundingClientRect();
          let pos = (e.clientX - rect.left) / rect.width;

          // 將位置限制在 0 和 1 之間
          pos = Math.max(0, Math.min(1, pos));

          // 設定實際的音訊位置
          globalAudio.currentTime = pos * globalAudio.duration;
          isDragging = false;
        }
      });

      // 音訊狀態改變時更新音軌按鈕
      globalAudio.addEventListener('play', updateTrackButtons);
      globalAudio.addEventListener('pause', updateTrackButtons);

      // 音軌結束時,播放下一首
      globalAudio.addEventListener('ended', playNextTrack);

      // 初始化播放佇列
      updatePlayQueue();

      // 背景預載所有音訊檔案的中繼資料
      setTimeout(() => {
        console.log('正在預載音訊中繼資料...'); // 翻譯
        audioLoader.preloadAudio(musicSamples, (loaded, total) => {
          console.log(`已預載 ${loaded}/${total} 個音訊檔案`); // 翻譯
        });
      }, 3000); // 3 秒後開始預載
    });
  </script>
  <section class="page-header">
  </section>

  <section class="main-content">
    <h1 id="">
      <center> ACE-Step:邁向音樂生成基礎模型的一步 </center>
    </h1>
    <br>
    <a href="https://jsrun.net/2rnKp/embedded/result/light#Result">webview</a>
    <center> Junmin Gong, Sean Zhao, Sen Wang, Shengyuan Xu, Joe Guo </center> <!-- 保留英文名 -->
    <br>
    <div style="display: flex; justify-content: center; align-items: center; margin-top: -10px; margin-bottom: 30px;">
      <a href="https://acestudio.ai" style="margin: 0 10px;">
        <figure style="margin: 0;">
          <img src="https://ace-step.github.io/raw/fig/acestudio_logo.png" alt="acestudio_logo" style="max-width: 230px;">
        </figure>
      </a>
      <a href="https://www.stepfun.com/" style="margin: 0 10px;">
        <figure style="margin: 0;">
          <img src="https://ace-step.github.io/raw/fig/Logo_StepFun.png" alt="stepfun_logo" style="max-width: 230px;">
        </figure>
      </a>
    </div>

    <div style="text-align: center; margin-top: -20px;">
      <a href="https://github.com/ace-step/ACE-Step" class="github-link" target="_blank" rel="noopener noreferrer"
         style="margin-right: 20px;">
        <svg fill="currentColor" height="28" width="28" viewBox="0 0 16 16">
          <path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z">
          </path>
        </svg>
        <span style="font-size: 24px ;">GitHub</span>
      </a>

      <a href="https://huggingface.co/ACE-Step/ACE-Step-v1-3.5B" class="huggingface-link" target="_blank"
         rel="noopener noreferrer" style="margin-right: 20px;">
        <svg fill="currentColor" height="28" width="28" viewBox="0 0 24 24">
          <path d="M16.781 3.277c2.997 1.704 4.844 4.851 4.844 8.258 0 .995-.155 1.955-.443 2.857a1.332 1.332 0 011.125.4 1.41 1.41 0 01.2 1.723c.204.165.352.385.428.632l.017.062c.06.222.12.69-.2 1.166.244.37.279.836.093 1.236-.255.57-.893 1.018-2.128 1.5l-.202.078-.131.048c-.478.173-.89.295-1.061.345l-.086.024c-.89.243-1.808.375-2.732.394-1.32 0-2.3-.36-2.923-1.067a9.852 9.852 0 01-3.18.018C9.778 21.647 8.802 22 7.494 22a11.249 11.249 0 01-2.541-.343l-.221-.06-.273-.08a16.574 16.574 0 01-1.175-.405c-1.237-.483-1.875-.93-2.13-1.501-.186-.4-.151-.867.093-1.236a1.42 1.42 0 01-.2-1.166c.069-.273.226-.516.447-.694a1.41 1.41 0 01.2-1.722c.233-.248.557-.391.917-.407l.078-.001a9.385 9.385 0 01-.44-2.85c0-3.407 1.847-6.554 4.844-8.258a9.822 9.822 0 019.687 0zM4.188 14.758c.125.687 2.357 2.35 2.14 2.707-.19.315-.796-.239-.948-.386l-.041-.04-.168-.147c-.561-.479-2.304-1.9-2.74-1.432-.43.46.119.859 1.055 1.42l.784.467.136.083c1.045.643 1.12.84.95 1.113-.188.295-3.07-2.1-3.34-1.083-.27 1.011 2.942 1.304 2.744 2.006-.2.7-2.265-1.324-2.685-.537-.425.79 2.913 1.718 2.94 1.725l.16.04.175.042c1.227.284 3.565.65 4.435-.604.673-.973.64-1.709-.248-2.61l-.057-.057c-.945-.928-1.495-2.288-1.495-2.288l-.017-.058-.025-.072c-.082-.22-.284-.639-.63-.584-.46.073-.798 1.21.12 1.933l.05.038c.977.721-.195 1.21-.573.534l-.058-.104-.143-.25c-.463-.799-1.282-2.111-1.739-2.397-.532-.332-.907-.148-.782.541zm14.842-.541c-.533.335-1.563 2.074-1.94 2.751a.613.613 0 01-.687.302.436.436 0 01-.176-.098.303.303 0 01-.049-.06l-.014-.028-.008-.02-.007-.019-.003-.013-.003-.017a.289.289 0 01-.004-.048c0-.12.071-.266.25-.427.026-.024.054-.047.084-.07l.047-.036c.022-.016.043-.032.063-.049.883-.71.573-1.81.131-1.917l-.031-.006-.056-.004a.368.368 0 00-.062.006l-.028.005-.042.014-.039.017-.028.015-.028.019-.036.027-.023.02c-.173.158-.273.428-.31.542l-.016.054s-.53 1.309-1.439 2.234l-.054.054c-.365.358-.596.69-.702 1.018-.143.437-.066.868.21 1.353.055.097.117.195.187.296.882 1.275 3.282.876 4.494.59l.286-.07.25-.074c.276-.084.736-.233 1.2-.42l.188-.077.065-.028.064-.028.124-.056.081-.038c.529-.252.964-.543.994-.827l.001-.036a.299.299 0 00-.037-.139c-.094-.176-.271-.212-.491-.168l-.045.01c-.044.01-.09.024-.136.04l-.097.035-.054.022c-.559.23-1.238.705-1.607.745h.006a.452.452 0 01-.05.003h-.024l-.024-.003-.023-.005c-.068-.016-.116-.06-.14-.142a.22.22 0 01-.005-.1c.062-.345.958-.595 1.713-.91l.066-.028c.528-.224.97-.483.985-.832v-.04a.47.47 0 00-.016-.098c-.048-.18-.175-.251-.36-.251-.785 0-2.55 1.36-2.92 1.36-.025 0-.048-.007-.058-.024a.6.6 0 01-.046-.088c-.1-.238.068-.462 1.06-1.066l.209-.126c.538-.32 1.01-.588 1.341-.831.29-.212.475-.406.503-.6l.003-.028c.008-.113-.038-.227-.147-.344a.266.266 0 00-.07-.054l-.034-.015-.013-.005a.403.403 0 00-.13-.02c-.162 0-.369.07-.595.18-.637.313-1.431.952-1.826 1.285l-.249.215-.033.033c-.08.078-.288.27-.493.386l-.071.037-.041.019a.535.535 0 01-.122.036h.005a.346.346 0 01-.031.003l.01-.001-.013.001c-.079.005-.145-.021-.19-.095a.113.113 0 01-.014-.065c.027-.465 2.034-1.991 2.152-2.642l.009-.048c.1-.65-.271-.817-.791-.493zM11.938 2.984c-4.798 0-8.688 3.829-8.688 8.55 0 .692.083 1.364.24 2.008l.008-.009c.252-.298.612-.46 1.017-.46.355.008.699.117.993.312.22.14.465.384.715.694.261-.372.69-.598 1.15-.605.852 0 1.367.728 1.562 1.383l.047.105.06.127c.192.396.595 1.139 1.143 1.68 1.06 1.04 1.324 2.115.8 3.266a8.865 8.865 0 002.024-.014c-.505-1.12-.26-2.17.74-3.186l.066-.066c.695-.684 1.157-1.69 1.252-1.912.195-.655.708-1.383 1.56-1.383.46.007.889.233 1.15.605.25-.31.495-.553.718-.694a1.87 1.87 0 01.99-.312c.357 0 .682.126.925.36.14-.61.215-1.245.215-1.898 0-4.722-3.89-8.55-8.687-8.55zm1.857 8.926l.439-.212c.553-.264.89-.383.89.152 0 1.093-.771 3.208-3.155 3.262h-.184c-2.325-.052-3.116-2.06-3.156-3.175l-.001-.087c0-1.107 1.452.586 3.25.586.716 0 1.379-.272 1.917-.526zm4.017-3.143c.45 0 .813.358.813.8 0 .441-.364.8-.813.8a.806.806 0 01-.812-.8c0-.442.364-.8.812-.8zm-11.624 0c.448 0 .812.358.812.8 0 .441-.364.8-.812.8a.806.806 0 01-.813-.8c0-.442.364-.8.813-.8zm7.79-.841c.32-.384.846-.54 1.33-.394.483.146.83.564.878 1.06.048.495-.212.97-.659 1.203-.322.168-.447-.477-.767-.585l.002-.003c-.287-.098-.772.362-.925.079a1.215 1.215 0 01.14-1.36zm-4.323 0c.322.384.377.92.14 1.36-.152.283-.64-.177-.925-.079l.003.003c-.108.036-.194.134-.273.24l-.118.165c-.11.15-.22.262-.377.18a1.226 1.226 0 01-.658-1.204c.048-.495.395-.913.878-1.059a1.262 1.262 0 011.33.394z">
          </path>
        </svg>
        <span style="font-size: 24px;">Hugging Face</span>
      </a>

      <a href="#" class="arxiv-link" target="_blank" rel="noopener noreferrer" style="margin-right: 20px;"
         onclick="return false;">
        <svg fill="currentColor" height="28" width="28" viewBox="0 0 512 512">
          <path d="M128 0C74.98 0 32 42.98 32 96v320c0 53.02 42.98 96 96 96h256c53.02 0 96-42.98 96-96V96c0-53.02-42.98-96-96-96H128zM400 432H112c-8.836 0-16-7.164-16-16V96c0-8.838 7.164-16 16-16h288c8.836 0 16 7.162 16 16v320c0 8.836-7.164 16-16 16zM192 128h-48c-8.836 0-16 7.162-16 16v32c0 8.836 7.164 16 16 16h48c8.836 0 16-7.164 16-16v-32c0-8.838-7.164-16-16-16zm176 0h-48c-8.836 0-16 7.162-16 16v32c0 8.836 7.164 16 16 16h48c8.836 0 16-7.164 16-16v-32c0-8.838-7.164-16-16-16zM192 224h-48c-8.836 0-16 7.164-16 16v32c0 8.836 7.164 16 16 16h48c8.836 0 16-7.164 16-16v-32c0-8.836-7.164-16-16-16zm176 0h-48c-8.836 0-16 7.164-16 16v32c0 8.836 7.164 16 16 16h48c8.836 0 16-7.164 16-16v-32c0-8.836-7.164-16-16-16zM192 320h-48c-8.836 0-16 7.164-16 16v32c0 8.836 7.164 16 16 16h48c8.836 0 16-7.164 16-16v-32c0-8.836-7.164-16-16-16z" />
        </svg>
        <span style="font-size: 24px;">論文 (即將發布)</span>
      </a>

      <a href="https://huggingface.co/spaces/ACE-Step/ACE-Step" class="huggingface-link" target="_blank"
         rel="noopener noreferrer">
        <svg class="size-8 mr-1.5 dark:mr-2 dark:drop-shadow-md" xmlns="http://www.w3.org/2000/svg"
             xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" width="28"
             height="28" preserveAspectRatio="xMidYMid meet" viewBox="0 0 39 40">
          <path d="M6.3712 2.04427C3.7183 2.04427 1.56771 4.19486 1.56771 6.84776V18.3546V18.6544V32.7341C1.56771 35.3868 3.71818 37.5377 6.3712 37.5377H17.878H20.7507H32.2575C34.9104 37.5377 37.0612 35.387 37.0612 32.7341V21.6204C37.0612 20.177 36.4252 18.8839 35.4189 18.004C36.4576 16.3895 37.0612 14.4666 37.0612 12.4046C37.0612 6.68274 32.4225 2.04427 26.7007 2.04427C24.6388 2.04427 22.7159 2.64776 21.1014 3.68647C20.2214 2.6802 18.9282 2.04427 17.4849 2.04427H6.3712Z"
                fill="black" class="stroke-white dark:stroke-white/10" stroke-width="3.07552"></path>
          <path d="M9.56855 23.5001C8.8406 23.5001 8.25047 24.0902 8.25047 24.8182V29.5361C8.25047 30.2641 8.8406 30.8542 9.56855 30.8542H14.2864C15.0144 30.8542 15.6045 30.2641 15.6045 29.5361V24.8182C15.6045 24.0902 15.0143 23.5001 14.2864 23.5001H9.56855Z"
                fill="#FF3270"></path>
          <path d="M24.3409 23.5001C23.613 23.5001 23.0228 24.0902 23.0228 24.8182V29.5361C23.0228 30.2641 23.613 30.8542 24.3409 30.8542H29.0588C29.7868 30.8542 30.3769 30.2641 30.3769 29.5361V24.8182C30.3769 24.0902 29.7868 23.5001 29.0588 23.5001H24.3409Z"
                fill="#861FFF"></path>
          <path d="M9.56855 8.72815C8.8406 8.72815 8.25047 9.31827 8.25047 10.0462V14.7641C8.25047 15.4921 8.8406 16.0822 9.56855 16.0822H14.2864C15.0144 16.0822 15.6045 15.4921 15.6045 14.7641V10.0462C15.6045 9.31827 15.0143 8.72815 14.2864 8.72815H9.56855Z"
                fill="#097EFF"></path>
          <path d="M26.6999 8.72815C24.6692 8.72815 23.0228 10.3744 23.0228 12.4052C23.0228 14.4359 24.6692 16.0822 26.6999 16.0822C28.7306 16.0822 30.3769 14.4359 30.3769 12.4052C30.3769 10.3744 28.7306 8.72815 26.6999 8.72815Z"
                fill="#FFD702"></path>
        </svg>
        <span style="font-size: 24px;">演示</span>
      </a>
    </div>

    <h2 id="abstract" style="text-align: center;">�� 摘要<a name="abstract"></a></h2>

    <p style="text-align: justify;">
      �� 我們推出 ACE-Step,一個新穎的開源音樂生成基礎模型,它透過整體架構設計克服了現有方法的關鍵限制並達到頂尖效能。目前的方法在生成速度、音樂連貫性和可控性之間面臨固有的權衡。例如,基於大型語言模型 (LLM) 的模型(如 Yue、SongGen)在歌詞對齊方面表現出色,但推論速度緩慢且存在結構性失真。另一方面,擴散模型(如 DiffRhythm)能夠實現更快的合成速度,但通常缺乏長距離結構連貫性。��
    </p>

    <p style="text-align: justify;">
      �� ACE-Step 透過整合基於擴散的生成與 Sana 的深度壓縮自動編碼器 (DCAE) 和一個輕量級線性 Transformer 來彌合這一差距。它進一步利用 MERT 和 m-hubert 在訓練期間對齊語義表徵 (REPA),實現快速收斂。因此,我們的模型在 A100 GPU 上僅需 20 秒即可合成長達 4 分鐘的音樂——比基於 LLM 的基線模型快 15 倍——同時在旋律、和聲和節奏指標上實現了卓越的音樂連貫性和歌詞對齊。⚡ 此外,ACE-Step 保留了細膩的聲學細節,實現了語音複製、歌詞編輯、混音和音軌生成(例如歌詞轉人聲、歌聲轉伴奏)等進階控制機制。��️
    </p>

    <p style="text-align: justify;">
      �� 我們的願景並非再建立一個端到端文字轉音樂流程,而是為音樂 AI 建立一個基礎模型:一個快速、通用、高效且靈活的架構,使其易於在其上訓練子任務。這為開發強大的工具鋪平了道路,這些工具可以無縫整合到音樂藝術家、製作人和內容創作者的創作工作流程中。簡而言之,我們的目標是為音樂界打造 Stable Diffusion 時刻。��
    </p>
    <br><br>
    <style>
      figure {
        text-align: center;
        margin: 0;
      }

      img {
        max-width: 100%;
        height: auto;
      }

      figcaption {
        margin-top: 8px;
        font-size: 14px;
        color: #555;
      }

      .gallery {
        display: flex;
        justify-content: center;
        align-items: center;
        flex-direction: column;
      }
    </style>
    <figure>
      <img src="https://ace-step.github.io/raw/fig/ACE-Step_framework.png" alt="框架圖" width="1000" height="600"> <!-- 翻譯 alt -->
    </figure>
    <br><br>


    <div class="toc">
      <h3>�� 目錄</h3>
      <ul>
        <li><a href="#BaselineQuality">�� 基準品質</a></li>
        <ul>
          <li><a href="#GeneralSongs">一般歌曲</a></li>
          <li><a href="#Experimental">實驗性輸入</a></li>
          <li><a href="#Instrumentals">純音樂</a></li>
          <li><a href="#MultipleLang">多種語言</a></li>
        </ul>
        <li>
          <a href="#Controlability">��️ 可控性</a>
          <ul>
            <li><a href="#Controlability-retake">�� 變奏生成</a></li>
            <li><a href="#Controlability-repaint">�� 重繪</a></li>
            <li><a href="#Controlability-edit">✏️ 歌詞編輯</a></li>
          </ul>
        </li>
        <li><a href="#Application">�� 應用</a></li>
        <ul>
          <li><a href="#Application-Lyric2Vocal">�� 歌詞轉人聲</a></li>
          <li><a href="#Text2Sample">�� 文字轉取樣</a></li>
          <li><a href="#RapMachine">�� 饒舌機器</a></li>
        </ul>
        <li><a href="#CommingSoon">⏳ 即將推出</a></li>
        <ul>
          <li><a href="#StemGen">�� 音軌生成</a></li>
          <li><a href="#Singing2Accompaniment">�� 歌聲轉伴奏</a></li>
        </ul>
      </ul>
    </div>
    <figure>
      <img src="https://ace-step.github.io/raw/fig/application_map.png" alt="應用圖" width="1000" height="600"> <!-- 翻譯 alt -->
    </figure>

    <div class="fixed-toggle-container">
      <button id="toggle-all-lyrics" class="toggle-all-button">�� 收合所有歌詞</button> <!-- 翻譯 (初始狀態) -->
    </div>

    <h1 id="BaselineQuality" style="text-align: center;">�� 基準品質<a name="BaselineQuality"></a></h1>
    <div style="border-left: 4px solid #097EFF; padding-left: 15px; margin-bottom: 20px;">
      <p style="font-weight: bold; margin-bottom: 5px;">�� 注意:</p>
      <p style="margin: 0;"> �� 歌詞是從 AI 音樂生成社群或網路上隨機選取,並未包含在我們的訓練集中。</p>
      <p style="margin: 0;"> �� 現有模型要麼缺乏長度控制 (LLM),要麼是固定長度 (擴散模型)。我們實現了彈性長度以利實際音樂創作。</p>
      <p style="margin: 0;"> �� 順帶一提,本專案頁面由 Roocode 熱情編寫。��</p>
    </div>

    <table>
      <!-- </colgroup> -->
      <thead>
        <tr>
          <th class="tg-0lax">提示詞</th>
          <th class="tg-0lax">歌詞</th>
          <th class="tg-0lax">ACE-Step 生成結果</th>
        </tr>
      </thead>
      <tbody id="baseline-quality">
        <!-- 表格列將由 JavaScript 動態生成 -->
      </tbody>
    </table>

    <h1 id="Controlability" style="text-align: center;">��️ 可控性<a name="Controlability"></a></h1>
    <div style="border-left: 4px solid #097EFF; padding-left: 15px; margin-bottom: 20px;">
      <p style="font-weight: bold; margin-bottom: 5px;">�� 注意:</p>
      <p style="margin: 0;"> 此模型支援多種無需訓練的應用。</p>
      <p style="margin: 0;"> - retake:重新生成同一首歌曲的變奏版本。</p>
      <p style="margin: 0;"> - repaint:重新生成歌曲的特定部分。</p>
      <p style="margin: 0;"> - edit:修改歌曲的歌詞。</p>
    </div>

    <table>
      <!-- </colgroup> -->
      <thead>
        <tr>
          <th class="tg-0lax">提示詞</th>
          <th class="tg-0lax">歌詞</th>
          <th class="tg-0lax">ACE-Step 生成結果</th>
        </tr>
      </thead>
      <tbody id="controlability">
        <!-- 表格列將由 JavaScript 動態生成 -->
      </tbody>
    </table>


    <h1 id="Application" style="text-align: center;">�� 應用<a name="Application"></a></h1>
    <div style="border-left: 4px solid #097EFF; padding-left: 15px; margin-bottom: 20px;">
      <p style="font-weight: bold; margin-bottom: 5px;">�� 注意:</p>
      <p style="margin: 0;"> �� 此模型支援多種經過微調的應用 </p>
      <p style="margin: 0;"> - Lyric2Vocal:在純人聲資料上進行 LoRA 微調</p>
      <p style="margin: 0;"> - Text2Samples:在音樂取樣及循環樂句資料上進行 LoRA 微調</p>
      <p style="margin: 0;"> - RapMachine:在饒舌資料上進行 LoRA 微調</p>
      <!-- <p style="margin: 0;"> - StemGen:controlnet finetune on song tracks data </p> -->
      <!-- <p style="margin: 0;"> - Singing2Accompaniment:controlnet finetune on vocal and accompaniment data</p> -->
      <p style="margin: 0;"> </p>
    </div>

    <table>
      <!-- </colgroup> -->
      <thead>
        <tr>
          <th class="tg-0lax">提示詞</th>
          <th class="tg-0lax">歌詞</th>
          <th class="tg-0lax">ACE-Step 生成結果</th>
        </tr>
      </thead>
      <tbody id="application">
        <!-- 表格列將由 JavaScript 動態生成 -->
      </tbody>
    </table>



    </div>

    <!-- 全域播放器 -->
    <div id="global-player">
      <div class="player-track-info">
        <div class="album-art">
          <img id="player-album-art"
               src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII="
               alt="專輯封面"
          style="width: 50px; height: 50px; border-radius: 4px; margin-right: 10px; background-color: #000000;">
        </div>
        <div class="track-details">
          <div class="player-track-title"></div>
          <div class="player-track-genre"></div>
        </div>
      </div>

      <div class="player-controls">
        <button id="player-prev-btn" class="player-btn" title="上一首">
          <svg xmlns="http://www.w3.org/2000/svg"
          width="2em" height="2em" viewBox="0 0 24 24" fill="currentColor" class="w-6 h-6 fill-primary">
          <g>
            <path d="M8 17V7a.97.97 0 0 0-.287-.713A.97.97 0 0 0 7 6a.97.97 0 0 0-.713.287A.97.97 0 0 0 6 7v10q0 .424.287.712Q6.576 18 7 18q.424 0 .713-.288A.97.97 0 0 0 8 17m11-.875v-8.25q0-.45-.3-.725a1 1 0 0 0-.7-.275q-.125 0-.275.025a.6.6 0 0 0-.275.125l-6.2 4.15q-.225.15-.338.362A1 1 0 0 0 10.8 12q0 .25.112.463a1 1 0 0 0 .338.362l6.2 4.15a.6.6 0 0 0 .275.125q.15.025.275.025.4 0 .7-.275t.3-.725">
            </path>
          </g>
        </svg>
        </button>
        <button id="player-play-btn" class="player-btn player-play-btn" title="播放/暫停">
          <svg xmlns="http://www.w3.org/2000/svg" width="2em" height="2em" viewBox="0 0 24 24" fill="currentColor"
          class="w-6 h-6 fill-primary">
          <path d="M8 6.82v10.36c0 .79.87 1.27 1.54.84l8.14-5.18a1 1 0 0 0 0-1.69L9.54 5.98A.998.998 0 0 0 8 6.82z">
          </path>
        </svg>
        </button>
        <button id="player-next-btn" class="player-btn" title="下一首">
          <svg xmlns="http://www.w3.org/2000/svg"
          width="2em" height="2em" viewBox="0 0 24 24" fill="currentColor" class="w-6 h-6 fill-primary">
          <g>
            <path d="M16.5 17V7q0-.424.288-.713A.97.97 0 0 1 17.5 6q.424 0 .712.287.288.288.288.713v10q0 .424-.288.712A.97.97 0 0 1 17.5 18a.97.97 0 0 1-.712-.288A.97.97 0 0 1 16.5 17m-11-.875v-8.25q0-.45.3-.725t.7-.275q.125 0 .275.025a.6.6 0 0 1 .275.125l6.2 4.15q.225.15.338.362A1 1 0 0 1 13.7 12q0 .25-.112.463a1 1 0 0 1-.338.362l-6.2 4.15a.6.6 0 0 1-.275.125 2 2 0 0 1-.275.025q-.4 0-.7-.275t-.3-.725">
            </path>
          </g>
        </svg>
        </button>
        <button id="player-shuffle-btn" class="player-btn" title="隨機播放">
          <svg xmlns="http://www.w3.org/2000/svg"
          width="2em" height="2em" viewBox="0 0 24 24" fill="currentColor" class="w-6 h-6 fill-primary">
          <path d="M10.59 9.17L5.41 4 4 5.41l5.17 5.17 1.42-1.41zM14.5 4l2.04 2.04L4 18.59 5.41 20 17.96 7.46 20 9.5V4h-5.5zm.33 9.41l-1.41 1.41 3.13 3.13L14.5 20H20v-5.5l-2.04 2.04-3.13-3.13z">
          </path>
        </svg> <span class="mode-indicator"></span>
        </button>
        <button id="player-repeat-btn" class="player-btn" title="重複播放">
          <svg xmlns="http://www.w3.org/2000/svg"
          width="2em" height="2em" viewBox="0 0 24 24" fill="currentColor" class="w-6 h-6 fill-primary">
          <path d="M7 7h10v3l4-4-4-4v3H5v6h2V7zm10 10H7v-3l-4 4 4 4v-3h12v-6h-2v4z"></path>
        </svg> <span class="mode-indicator"></span>
        </button>
      </div>

      <div class="player-progress-container">
        <div class="player-progress-bar">
          <div class="player-progress-handle"></div>
        </div>
      </div>

      <div class="player-time-display">01:00 / 04:00</div>

      <!-- 全域播放器隱藏音訊元素 -->
      <audio id="global-audio" preload="none"></audio>
    </div>
    <section class="main-content">
      <h2 id="limitations" style="text-align: center;">⚠️ 限制與未來改進 ��</h2>
      <div style="border-left: 4px solid #FF3270; padding-left: 15px; margin-bottom: 20px;">
        <ol>
          <li><strong>�� 輸出不一致:</strong>對隨機種子和輸入時長高度敏感,導致多變的「抽卡式」結果。</li>
          <li><strong>�� 特定風格弱點:</strong>在某些類型(例如中文饒舌/zh_rap)上表現不佳。風格遵循度和音樂性上限有限。</li>
          <li><strong>�� 連續性失真:</strong>在重繪/延伸操作中出現不自然的過渡。</li>
          <li><strong>�� 人聲品質:</strong>人聲合成粗糙,缺乏細微差別。</li>
          <li><strong>��️ 控制粒度:</strong>需要更細膩的音樂參數控制。</li>
          <li><strong>�� 多語言歌詞遵循:</strong>改進對多種語言歌詞的支援,提升準確性和自然度。</li>
        </ol>
      </div>
    </section>
</body>

</html>
/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
@import url("https://fonts.googleapis.com/css?family=Open+Sans:400,700");

html {
  font-family: sans-serif;
  -ms-text-size-adjust: 100%;
  -webkit-text-size-adjust: 100%;
}

body {
  margin: 0;
}

article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
menu,
nav,
section,
summary {
  display: block;
}

audio,
canvas,
progress,
video {
  display: inline-block;
  vertical-align: baseline;
}

audio:not([controls]) {
  display: none;
  height: 0;
}

[hidden],
template {
  display: none;
}

a {
  background-color: transparent;
}

a:active,
a:hover {
  outline: 0;
}

abbr[title] {
  border-bottom: 1px dotted;
}

b,
strong {
  font-weight: bold;
}

dfn {
  font-style: italic;
}

h1 {
  font-size: 2em;
  margin: 0.67em 0;
}

mark {
  background: #ff0;
  color: #000;
}

small {
  font-size: 80%;
}

sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}

sup {
  top: -0.5em;
}

sub {
  bottom: -0.25em;
}

img {
  border: 0;
}

svg:not(:root) {
  overflow: hidden;
}

figure {
  margin: 1em 40px;
}

hr {
  box-sizing: content-box;
  height: 0;
}

pre {
  overflow: auto;
}

code,
kbd,
pre,
samp {
  font-family: monospace, monospace;
  font-size: 1em;
}

button,
input,
optgroup,
select,
textarea {
  color: inherit;
  font: inherit;
  margin: 0;
}

button {
  overflow: visible;
}

button,
select {
  text-transform: none;
}

button,
html input[type="button"],
input[type="reset"],
input[type="submit"] {
  -webkit-appearance: button;
  cursor: pointer;
}

button[disabled],
html input[disabled] {
  cursor: default;
}

button::-moz-focus-inner,
input::-moz-focus-inner {
  border: 0;
  padding: 0;
}

input {
  line-height: normal;
}

input[type="checkbox"],
input[type="radio"] {
  box-sizing: border-box;
  padding: 0;
}

input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
  height: auto;
}

input[type="search"] {
  -webkit-appearance: textfield;
  box-sizing: content-box;
}

input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
  -webkit-appearance: none;
}

fieldset {
  border: 1px solid #c0c0c0;
  margin: 0 2px;
  padding: 0.35em 0.625em 0.75em;
}

legend {
  border: 0;
  padding: 0;
}

textarea {
  overflow: auto;
}

optgroup {
  font-weight: bold;
}

table {
  border-collapse: collapse;
  border-spacing: 0;
}

td,
th {
  padding: 0;
}

.highlight table td {
  padding: 5px;
}

.highlight table pre {
  margin: 0;
}

.highlight .cm {
  color: #999988;
  font-style: italic;
}

.highlight .cp {
  color: #999999;
  font-weight: bold;
}

.highlight .c1 {
  color: #999988;
  font-style: italic;
}

.highlight .cs {
  color: #999999;
  font-weight: bold;
  font-style: italic;
}

.highlight .c,
.highlight .cd {
  color: #999988;
  font-style: italic;
}

.highlight .err {
  color: #a61717;
  background-color: #e3d2d2;
}

.highlight .gd {
  color: #000000;
  background-color: #ffdddd;
}

.highlight .ge {
  color: #000000;
  font-style: italic;
}

.highlight .gr {
  color: #aa0000;
}

.highlight .gh {
  color: #999999;
}

.highlight .gi {
  color: #000000;
  background-color: #ddffdd;
}

.highlight .go {
  color: #888888;
}

.highlight .gp {
  color: #555555;
}

.highlight .gs {
  font-weight: bold;
}

.highlight .gu {
  color: #aaaaaa;
}

.highlight .gt {
  color: #aa0000;
}

.highlight .kc {
  color: #000000;
  font-weight: bold;
}

.highlight .kd {
  color: #000000;
  font-weight: bold;
}

.highlight .kn {
  color: #000000;
  font-weight: bold;
}

.highlight .kp {
  color: #000000;
  font-weight: bold;
}

.highlight .kr {
  color: #000000;
  font-weight: bold;
}

.highlight .kt {
  color: #445588;
  font-weight: bold;
}

.highlight .k,
.highlight .kv {
  color: #000000;
  font-weight: bold;
}

.highlight .mf {
  color: #009999;
}

.highlight .mh {
  color: #009999;
}

.highlight .il {
  color: #009999;
}

.highlight .mi {
  color: #009999;
}

.highlight .mo {
  color: #009999;
}

.highlight .m,
.highlight .mb,
.highlight .mx {
  color: #009999;
}

.highlight .sb {
  color: #d14;
}

.highlight .sc {
  color: #d14;
}

.highlight .sd {
  color: #d14;
}

.highlight .s2 {
  color: #d14;
}

.highlight .se {
  color: #d14;
}

.highlight .sh {
  color: #d14;
}

.highlight .si {
  color: #d14;
}

.highlight .sx {
  color: #d14;
}

.highlight .sr {
  color: #009926;
}

.highlight .s1 {
  color: #d14;
}

.highlight .ss {
  color: #990073;
}

.highlight .s {
  color: #d14;
}

.highlight .na {
  color: #008080;
}

.highlight .bp {
  color: #999999;
}

.highlight .nb {
  color: #0086b3;
}

.highlight .nc {
  color: #445588;
  font-weight: bold;
}

.highlight .no {
  color: #008080;
}

.highlight .nd {
  color: #3c5d5d;
  font-weight: bold;
}

.highlight .ni {
  color: #800080;
}

.highlight .ne {
  color: #990000;
  font-weight: bold;
}

.highlight .nf {
  color: #990000;
  font-weight: bold;
}

.highlight .nl {
  color: #990000;
  font-weight: bold;
}

.highlight .nn {
  color: #555555;
}

.highlight .nt {
  color: #000080;
}

.highlight .vc {
  color: #008080;
}

.highlight .vg {
  color: #008080;
}

.highlight .vi {
  color: #008080;
}

.highlight .nv {
  color: #008080;
}

.highlight .ow {
  color: #000000;
  font-weight: bold;
}

.highlight .o {
  color: #000000;
  font-weight: bold;
}

.highlight .w {
  color: #bbbbbb;
}

.highlight {
  background-color: #f8f8f8;
}

* {
  box-sizing: border-box;
}

body {
  padding: 0;
  margin: 0;
  font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-size: 16px;
  line-height: 1.5;
  color: #606c71;
}

a {
  color: #1e6bb8;
  text-decoration: none;
}

a:hover {
  text-decoration: underline;
}

.btn {
  display: inline-block;
  margin-bottom: 1rem;
  color: rgba(255, 255, 255, 0.7);
  background-color: rgba(255, 255, 255, 0.08);
  border-color: rgba(255, 255, 255, 0.2);
  border-style: solid;
  border-width: 1px;
  border-radius: 0.3rem;
  transition:
    color 0.2s,
    background-color 0.2s,
    border-color 0.2s;
}

.btn:hover {
  color: rgba(255, 255, 255, 0.8);
  text-decoration: none;
  background-color: rgba(255, 255, 255, 0.2);
  border-color: rgba(255, 255, 255, 0.3);
}

.btn + .btn {
  margin-left: 1rem;
}

@media screen and (min-width: 64em) {
  .btn {
    padding: 0.75rem 1rem;
  }
}

@media screen and (min-width: 42em) and (max-width: 64em) {
  .btn {
    padding: 0.6rem 0.9rem;
    font-size: 0.9rem;
  }
}

@media screen and (max-width: 42em) {
  .btn {
    display: block;
    width: 100%;
    padding: 0.75rem;
    font-size: 0.9rem;
  }

  .btn + .btn {
    margin-top: 1rem;
    margin-left: 0;
  }
}

.page-header {
  color: #fff;
  text-align: center;
  background-color: #333;
  background-image: linear-gradient(60deg, #333, #333);
}

@media screen and (min-width: 64em) {
  .page-header {
    padding: 5rem 6rem;
  }
}

@media screen and (min-width: 42em) and (max-width: 64em) {
  .page-header {
    padding: 3rem 4rem;
  }
}

@media screen and (max-width: 42em) {
  .page-header {
    padding: 2rem 1rem;
  }
}

.project-name {
  margin-top: 0;
  margin-bottom: 0.1rem;
}

@media screen and (min-width: 64em) {
  .project-name {
    font-size: 3.25rem;
  }
}

@media screen and (min-width: 42em) and (max-width: 64em) {
  .project-name {
    font-size: 2.25rem;
  }
}

@media screen and (max-width: 42em) {
  .project-name {
    font-size: 1.75rem;
  }
}

.project-tagline {
  margin-bottom: 2rem;
  font-weight: normal;
  opacity: 0.7;
}

@media screen and (min-width: 64em) {
  .project-tagline {
    font-size: 1.25rem;
  }
}

@media screen and (min-width: 42em) and (max-width: 64em) {
  .project-tagline {
    font-size: 1.15rem;
  }
}

@media screen and (max-width: 42em) {
  .project-tagline {
    font-size: 1rem;
  }
}

.main-content {
  word-wrap: break-word;
}

.main-content :first-child {
  margin-top: 0;
}

@media screen and (min-width: 64em) {
  .main-content {
    max-width: 110rem;
    padding: 2rem 6rem;
    margin: 0 auto;
    font-size: 1.1rem;
  }
}

@media screen and (min-width: 42em) and (max-width: 64em) {
  .main-content {
    padding: 2rem 4rem;
    font-size: 1.1rem;
  }
}

@media screen and (max-width: 42em) {
  .main-content {
    padding: 2rem 1rem;
    font-size: 1rem;
  }
}

.main-content img {
  max-width: 100%;
}

.main-content h1,
.main-content h2,
.main-content h3,
.main-content h4,
.main-content h5,
.main-content h6 {
  margin-top: 2rem;
  margin-bottom: 1rem;
  font-weight: normal;
  color: #000;
}

.main-content p {
  margin-bottom: 1em;
}

.main-content code {
  padding: 2px 4px;
  font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
  font-size: 0.9rem;
  color: #567482;
  background-color: #f3f6fa;
  border-radius: 0.3rem;
}

.main-content pre {
  padding: 0.8rem;
  margin-top: 0;
  margin-bottom: 1rem;
  font:
    1rem Consolas,
    "Liberation Mono",
    Menlo,
    Courier,
    monospace;
  color: #567482;
  word-wrap: normal;
  background-color: #f3f6fa;
  border: solid 1px #dce6f0;
  border-radius: 0.3rem;
}

.main-content pre > code {
  padding: 0;
  margin: 0;
  font-size: 0.9rem;
  color: #567482;
  word-break: normal;
  white-space: pre;
  background: transparent;
  border: 0;
}

.main-content .highlight {
  margin-bottom: 1rem;
}

.main-content .highlight pre {
  margin-bottom: 0;
  word-break: normal;
}

.main-content .highlight pre,
.main-content pre {
  padding: 0.8rem;
  overflow: auto;
  font-size: 0.9rem;
  line-height: 1.45;
  border-radius: 0.3rem;
  -webkit-overflow-scrolling: touch;
}

.main-content pre code,
.main-content pre tt {
  display: inline;
  max-width: initial;
  padding: 0;
  margin: 0;
  overflow: initial;
  line-height: inherit;
  word-wrap: normal;
  background-color: transparent;
  border: 0;
}

.main-content pre code:before,
.main-content pre code:after,
.main-content pre tt:before,
.main-content pre tt:after {
  content: normal;
}

.main-content ul,
.main-content ol {
  margin-top: 0;
}

.main-content blockquote {
  padding: 0 1rem;
  margin-left: 0;
  color: #819198;
  border-left: 0.3rem solid #dce6f0;
}

.main-content blockquote > :first-child {
  margin-top: 0;
}

.main-content blockquote > :last-child {
  margin-bottom: 0;
}

.main-content table {
  display: block;
  width: 100%;
  overflow: auto;
  word-break: normal;
  word-break: keep-all;
  -webkit-overflow-scrolling: touch;
}

.main-content table th {
  font-weight: bold;
}

.main-content table th,
.main-content table td {
  padding: 0.5rem 1rem;
  border: 1px solid #e9ebec;
}

.main-content dl {
  padding: 0;
}

.main-content dl dt {
  padding: 0;
  margin-top: 1rem;
  font-size: 1rem;
  font-weight: bold;
}

.main-content dl dd {
  padding: 0;
  margin-bottom: 1rem;
}

.main-content hr {
  height: 2px;
  padding: 0;
  margin: 1rem 0;
  background-color: #eff0f1;
  border: 0;
}

.site-footer {
  padding-top: 2rem;
  margin-top: 2rem;
  border-top: solid 1px #eff0f1;
}

@media screen and (min-width: 64em) {
  .site-footer {
    font-size: 1rem;
  }
}

@media screen and (min-width: 42em) and (max-width: 64em) {
  .site-footer {
    font-size: 1rem;
  }
}

@media screen and (max-width: 42em) {
  .site-footer {
    font-size: 0.9rem;
  }
}

.site-footer-owner {
  display: block;
  font-weight: bold;
}

.site-footer-credits {
  color: #819198;
}