| .. | ||
| Models | ||
| mp3 | ||
| Services | ||
| appsettings.json | ||
| AutoRestart.bat | ||
| config.json | ||
| old | ||
| Program.cs | ||
| README.md | ||
| ShengShengBuXi.ConsoleApp.csproj | ||
| ShengShengBuXi.ConsoleApp.sln | ||
生生不息电话亭
项目介绍
这是一个模拟电话亭的应用程序,允许用户通过数字键盘进行拨号并录制语音。系统支持通过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表示直接退出程序
}
}
使用方法
- 确保音频文件夹(默认为mp3)中包含所有必要的音频文件。
- 运行应用程序,它将自动连接到配置的SignalR服务器(如果启用)。
- 使用数字键盘(0-9)输入数字,达到配置的位数后会自动拨出。
- 也可以按回车键手动拨出。
- 录音过程中,可以通过回车键手动挂断(如果配置允许)。
- 系统也会在检测到指定时间无声音后自动挂断。
- 录音完成后,将尝试上传到服务器,并保存在本地的recordings文件夹中。
SignalR服务器接口
服务器需要提供以下方法:
GetLatestConfig- 获取最新配置UploadRecording- 上传录音文件
客户端监听以下方法:
ReceiveConfigUpdate- 接收配置更新ReceiveAudioFile- 接收音频文件更新
实时更新
系统支持实时更新以下内容:
- 所有的配置项 - 通过SignalR的
ReceiveConfigUpdate方法 - 音频文件 - 通过SignalR的
ReceiveAudioFile方法
更新会即时生效,不需要重启应用程序。