this.selectedElements.forEach(element => {
element.classList.remove('rhyme-select');
});
this.selectedElements.clear();

// 选择新元素
const elements = this.getTargetElements(target);
elements.forEach(element => {
element.classList.add('rhyme-select');
this.selectedElements.add(element);
});

return `选择了 ${target}`;
}

getTargetElements(target) {
if (target === 'all') {
return Array.from(document.querySelectorAll('.rhyme-element'));
}
const element = document.getElementById(target);
return element ? [element] : [];
}

executeCode() {
const code = document.getElementById('rhyme-code').value;
try {
// 简单的代码执行(实际实现应该更安全)
const lines = code.split('\n');
lines.forEach(line => {
line = line.trim();
if (line.startsWith('谐音系统.执行')) {
const match = line.match(/谐音系统\.执行\('([^']+)', '([^']*)'\)/);
if (match) {
const action = match[1];
const param = match[2];
this.executeAction(action, param);
}
}
});
this.showMessage('代码执行完成', 'success');
} catch (error) {
this.showMessage(`代码执行错误: ${error.message}`, 'error');
}
}

createNewRhyme() {
const name = document.getElementById('new-rhyme-name').value;
const desc = document.getElementById('new-rhyme-desc').value;

if (!name) {
this.showMessage('请输入谐音名称', 'error');
return;
}

this.actions.set(name, {
execute: (target, param) => {
const elements = this.getTargetElements(target);
elements.forEach(element => {
element.classList.remove('rhyme-pat');
void element.offsetWidth;
element.classList.add('rhyme-pat');

setTimeout(() => {
element.classList.remove('rhyme-pat');
}, 1000);
});
return `执行了 ${name}: ${desc}`;
},
description: desc
});

this.showMessage(`创建新谐音: ${name} - ${desc}`, 'success');

// 清空输入
document.getElementById('new-rhyme-name').value = '';
document.getElementById('new-rhyme-desc').value = '';

this.updateStatus();
}

updateStatus() {
document.getElementById('rhyme-status').textContent = '运行中';
document.getElementById('rhyme-actions').textContent = `已加载: ${this.actions.size}个动作`;

setTimeout(() => {
document.getElementById('rhyme-status').textContent = '就绪';
}, 1000);
}

showMessage(message, type) {
const messageDiv = document.createElement('div');
messageDiv.className = `message message-${type}`;
messageDiv.textContent = message;

document.getElementById('message-system').appendChild(messageDiv);

setTimeout(() => {
messageDiv.remove();
}, 3000);
}

play() {
this.executeAction('onckqck', 'all');
this.showMessage('谐音系统开始播放', 'info');
}

stop() {
document.querySelectorAll('.rhyme-element').forEach(element => {
element.className = 'rhyme-element';
});
this.selectedElements.clear();
this.showMessage('谐音系统已停止', 'info');
}
}

// ===== 音乐合成系统 =====
class MusicSystem {
constructor() {
this.isPlaying = false;
this.currentVoice = 'female1';
this.currentInstrument = 'piano';
this.bpm = 120;
this.initialize();
}

initialize() {
this.initializeEventListeners();
this.initializeAudioContext();
}

initializeEventListeners() {
// 发音人选择
document.querySelectorAll('[data-voice]').forEach(card => {
card.addEventListener('click', (e) => {
const voice = e.currentTarget.dataset.voice;
this.selectVoice(voice);
});
});

// 乐器选择
document.querySelectorAll('[data-instrument]').forEach(card => {
card.addEventListener('click', (e) => {
const instrument = e.currentTarget.dataset.instrument;
this.selectInstrument(instrument);
});
});

// 音乐控制
document.getElementById('music-play').addEventListener('click', () => {
this.play();
});

document.getElementById('music-stop').addEventListener('click', () => {
this.stop();

Prev | Next
Pg.: 1 ... 45 46 47 48 49 50 51 52 53 54 55 56


Back to home | File page

Subscribe | Register | Login | N