98 lines
4.8 KiB
Markdown
98 lines
4.8 KiB
Markdown
# 生生不息电话亭
|
||
|
||
## 项目介绍
|
||
|
||
这是一个模拟电话亭的应用程序,允许用户通过数字键盘进行拨号并录制语音。系统支持通过SignalR与服务器进行实时通信,实现配置的远程更新和音频文件的传输。
|
||
|
||
## 项目配置
|
||
|
||
### 1. 应用程序设置 (appsettings.json)
|
||
|
||
```json
|
||
{
|
||
"SignalRHubUrl": "http://localhost:5000/phonehub", // SignalR hub的URL
|
||
"ConfigBackupPath": "config.json", // 配置文件备份路径
|
||
"AutoConnectToServer": true // 是否自动连接到服务器
|
||
}
|
||
```
|
||
|
||
### 2. 电话亭配置 (config.json)
|
||
|
||
```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`方法
|
||
|
||
更新会即时生效,不需要重启应用程序。 |