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();
Back to home |
File page
Subscribe |
Register |
Login
| N