ShengShengBuXi/ShengShengBuXi.ConsoleApp
2025-03-29 10:16:44 +08:00
..
Models 321 2025-03-29 03:43:31 +08:00
mp3 11 2025-03-29 00:23:54 +08:00
Services 321 2025-03-29 03:43:31 +08:00
appsettings.json 提交 2025-03-29 01:05:06 +08:00
AutoRestart.bat 3123 2025-03-29 10:16:44 +08:00
config.json 321 2025-03-29 03:43:31 +08:00
old 添加项目文件。 2025-03-27 23:30:20 +08:00
Program.cs 123 2025-03-28 20:03:52 +08:00
README.md 321 2025-03-29 03:43:31 +08:00
ShengShengBuXi.ConsoleApp.csproj 321 2025-03-28 13:22:34 +08:00
ShengShengBuXi.ConsoleApp.sln 312 2025-03-28 02:39:13 +08:00

生生不息电话亭

项目介绍

这是一个模拟电话亭的应用程序允许用户通过数字键盘进行拨号并录制语音。系统支持通过SignalR与服务器进行实时通信实现配置的远程更新和音频文件的传输。

项目配置

1. 应用程序设置 (appsettings.json)

{
  "SignalRHubUrl": "http://localhost:5000/phonehub",  // SignalR hub的URL
  "ConfigBackupPath": "config.json",                  // 配置文件备份路径
  "AutoConnectToServer": true                         // 是否自动连接到服务器
}

2. 电话亭配置 (config.json)

{
  "AudioFiles": {
    "AudioBasePath": "mp3",                       // 音频文件基础路径
    "WaitingToneFile": "等待嘟音.wav",             // 等待嘟音文件
    "WaitForPickupFile": "等待接电话.mp3",          // 等待接电话音频文件
    "PhonePickupFile": "电话接起.mp3",              // 电话接起音频文件
    "PromptUserRecordFile": "提示用户录音.mp3",      // 提示用户录音音频文件
    "BeepPromptFile": "滴提示音.wav",               // 滴提示音文件
    "DigitToneFileTemplate": "{0}.mp3",            // 数字按键音频文件模板
    "MinKeyTonePlayTimeMs": 200,                  // 按键音的最小播放时间(毫秒)
    "KeyToneVolume": 1.0,                         // 按键音量倍数 (0.0-1.0)
    "WaitingToneVolume": 1.0,                     // 待机嘟声音量倍数 (0.0-1.0)
    "DialToneVolume": 0.9,                        // 拨出嘟声音量倍数 (0.0-1.0)
    "PromptAfterBeepVolume": 1.0,                 // 提示留言音量倍数 (0.0-1.0)
    "BeepPromptVolume": 1.0,                      // 滴提示音音量倍数 (0.0-1.0)
    "WindChimeFile": "风铃.wav"                    // 风铃提示音文件名
  },
  "Dial": {
    "MinDigitsToDialOut": 8,                      // 拨号所需的最小位数
    "AutoDialOutAfterSeconds": 5,                 // 无新按键后自动拨出的等待秒数
    "ResetTimeoutSeconds": 10                     // 位数不足时,无操作重置的等待秒数
  },
  "Recording": {
    "RecordingFolder": "recordings",              // 录音保存文件夹
    "RecordingDeviceNumber": 0,                   // 录音设备编号
    "SampleRate": 16000,                          // 录音采样率
    "Channels": 1,                                // 录音通道数1=单声道2=立体声)
    "BufferMilliseconds": 50,                    // 录音缓冲区大小(毫秒)
    "SilenceThreshold": 0.05,                     // 静音检测阈值
    "SilenceTimeoutSeconds": 30,                  // 无声音自动挂断的时间(秒)
    "AllowUserHangup": true,                      // 是否允许用户手动挂断(按回车键)
    "UploadRecordingToServer": false,             // 是否上传录音文件到服务器
    "EnableBackgroundMusic": true,                // 是否在录音时播放背景音乐
    "BackgroundMusicFile": "bj.mp3",              // 录音背景音乐文件名
    "BackgroundMusicVolume": 0.1,                 // 背景音乐音量 (0.0-1.0)
    "WindChimePromptSeconds": 7.5,                // 无声音播放风铃提示的时间(秒)
    "WindChimeFadeOutMs": 3000                    // 风铃声淡出的时间(毫秒)
  },
  "CallFlow": {
    "WaitForPickupMinSeconds": 3,                 // 等待接电话音频的最小持续时间(秒)
    "WaitForPickupMaxSeconds": 6,                 // 等待接电话音频的最大持续时间(秒)
    "PlayPickupProbability": 0.15,                // 播放电话接起音频的概率0-1之间的小数
    "ResetSystemAfterHangup": false                // 用户挂断后是否重置系统false表示直接退出程序
  }
}

使用方法

  1. 确保音频文件夹默认为mp3中包含所有必要的音频文件。
  2. 运行应用程序它将自动连接到配置的SignalR服务器如果启用
  3. 使用数字键盘0-9输入数字达到配置的位数后会自动拨出。
  4. 也可以按回车键手动拨出。
  5. 录音过程中,可以通过回车键手动挂断(如果配置允许)。
  6. 系统也会在检测到指定时间无声音后自动挂断。
  7. 录音完成后将尝试上传到服务器并保存在本地的recordings文件夹中。

SignalR服务器接口

服务器需要提供以下方法:

  1. GetLatestConfig - 获取最新配置
  2. UploadRecording - 上传录音文件

客户端监听以下方法:

  1. ReceiveConfigUpdate - 接收配置更新
  2. ReceiveAudioFile - 接收音频文件更新

实时更新

系统支持实时更新以下内容:

  1. 所有的配置项 - 通过SignalR的ReceiveConfigUpdate方法
  2. 音频文件 - 通过SignalR的ReceiveAudioFile方法

更新会即时生效,不需要重启应用程序。