but 发表于 6 天前

尝试给游戏加上背景音效

不知道大家有没有类似的想法,就是比如战斗的时候加上战斗的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}`);
    });
}

jarlyyn 发表于 6 天前

只能说,用合适的东西做合适的事情。

撇开是否适合用paotin听音乐这个问题

notify日志文件什么鬼……

直接监听http做个接口不好么……
页: [1]
查看完整版本: 尝试给游戏加上背景音效