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