尝试给游戏加上背景音效
不知道大家有没有类似的想法,就是比如战斗的时候加上战斗的bgm或者喊叫声之类的,xy 快速逍遥的时候加上轻功的风声,我做了一个简单的实现,不知道大家觉得这个东西有没有意义,这个工作量很大,需要寻找合适的音效文件加在合适的地方用的是paotin,原理很简单:
本来想在windows下直接利用$run $system $script 去调用一个外部的脚本,但是都没成功,所以写了一个独立的 bgm.js,单独执行 node bgm.js,这个js监控buffer.log,这个log里包含了所有的输出,然后约定特定的输出,比如
okLog play 1 ,就播放 1.wav,在windows下后台播放wav需要独立的工具,下载了一个叫nircmd.exe的小工具,这个工具可以在后台播放wav而且可以指定播放的时间长度
附近包括了这个工具和bgm.js,以及一个测试wav文件
const fs = require('fs');
const path = require('path');
const { exec } = require('child_process');// 引入 child_process 模块
const logFilePath = 'C:/my-paotin/log/wendaokoujin/buffer.log';
// 用来存储最后读取的位置
let lastPosition = 0;
// 获取文件的初始大小
fs.stat(logFilePath, (err, stats) => {
if (err) {
console.error('无法获取文件信息:', err);
return;
}
lastPosition = stats.size;// 获取文件的初始大小
console.log('初始文件大小:', lastPosition);
});
// 监控文件变化
fs.watchFile(logFilePath, { interval: 1000 }, (curr, prev) => {
if (curr.size > prev.size) {
// 文件内容变大了,说明有新增内容
const stream = fs.createReadStream(logFilePath, {
encoding: 'utf8',
start: lastPosition, // 从上次读取的位置开始
end: curr.size // 读取到当前文件大小
});
// 读取新增的内容
let newContent = '';
stream.on('data', (chunk) => {
newContent += chunk;
});
stream.on('end', () => {
// 处理新增的内容
console.log('新增内容:', newContent);
// 根据内容做判断
// 根据内容做判断
if (newContent.includes('play 1')) {
console.log('检测到 play 1,正在播放 1.wav');
playAudio('1.wav');// 播放 1.wav 文件
}
// 更新最后读取的位置
lastPosition = curr.size;
});
}
});
console.log('开始监控文件变化...');
// 播放音频文件的函数,确保音频在后台播放
function playAudio(filename) {
const audioPath = path.join('C:/my-paotin/audio/', filename);// 假设音频文件在这个目录下
const nircmdPath = 'C:/my-paotin/audio/player/nircmd.exe';// nircmd.exe 的完整路径
// 对不同的操作系统进行处理
let command = '';
console.log('当前操作系统:', process.platform);
// Windows 操作系统
if (process.platform === 'win32') {
command = `${nircmdPath} mediaplay 10000 ${audioPath}`;
}
// macOS 操作系统
else if (process.platform === 'darwin') {
command = `afplay ${audioPath} &`;// 在后台运行 afplay
}
// Linux 操作系统
else if (process.platform === 'linux') {
command = `mpg123 ${audioPath} &`;// 使用 mpg123 在后台播放音频
}
exec(command, (err, stdout, stderr) => {
if (err) {
console.error(`播放音频文件时出错: ${err.message}`);
return;
}
if (stderr) {
console.error(`stderr: ${stderr}`);
return;
}
console.log(`stdout: ${stdout}`);
});
}
只能说,用合适的东西做合适的事情。
撇开是否适合用paotin听音乐这个问题
notify日志文件什么鬼……
直接监听http做个接口不好么……
页:
[1]