# 生生不息电话亭 ## 项目介绍 这是一个模拟电话亭的应用程序,允许用户通过数字键盘进行拨号并录制语音。系统支持通过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`方法 更新会即时生效,不需要重启应用程序。