You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
832 lines
34 KiB
832 lines
34 KiB
using DevicesService.Common; |
|
using DevicesService.Devices; |
|
using Device.ApiModel.DocumentServerModels; |
|
using Device.Caller; |
|
using Device.IICCardReader; |
|
using Functions.FileExt; |
|
using IDevice.Model.RFIDReader; |
|
using NAudio.Wave; |
|
using Newtonsoft.Json; |
|
using System; |
|
using System.Collections.Generic; |
|
using System.Drawing; |
|
using System.Drawing.Printing; |
|
using System.Globalization; |
|
using System.IO; |
|
using System.Linq; |
|
using System.Net; |
|
using System.Net.Http; |
|
using System.Runtime.InteropServices; |
|
using System.Speech.Synthesis; |
|
using System.Text; |
|
using System.Threading.Tasks; |
|
using System.Threading; |
|
using static System.Net.Mime.MediaTypeNames; |
|
using System.Text.RegularExpressions; |
|
using DevicesService.Commen; |
|
using System.Numerics; |
|
using System.Web; |
|
using NAudio.Wave.SampleProviders; |
|
using System.Configuration; |
|
using System.Diagnostics; |
|
|
|
namespace DevicesService.Common |
|
{ |
|
/// <summary> |
|
/// 网页调用C#方法 |
|
/// </summary> |
|
public class ScriptCallbackObject |
|
{ |
|
public DeviceCaller deviceCaller = new DeviceCaller(); |
|
public HScamera hScamera = new HScamera(0, 0, 1); |
|
private static SpeechSynthesizer speech = new SpeechSynthesizer(); |
|
//读取身份证 |
|
public string IDCardRead(string paramsString, string callback) |
|
{ |
|
Task.Run(() => |
|
GetCardInfo() |
|
); |
|
@event.WaitOne(); |
|
string json = JsonConvert.SerializeObject(resultModel); |
|
if (resultModel.Code == "1") |
|
{ |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":" + json + "}"; |
|
} |
|
else |
|
{ |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + resultModel.Message + "\" } "; |
|
} |
|
} |
|
private ResultModel<RFIDDataModel> resultModel = null; |
|
private AutoResetEvent @event = new AutoResetEvent(false); |
|
private async void GetCardInfo() |
|
{ |
|
ICCardReadControl iCCard = new ICCardReadControl(); |
|
resultModel = await iCCard.ReadIDCardData(); |
|
@event.Set(); |
|
} |
|
|
|
/// <summary> |
|
/// 打印排队票据 |
|
/// </summary> |
|
/// <param name="ph">排号</param> |
|
/// <param name="ddrs">等待人数</param> |
|
/// <param name="qrcode">二维码</param> |
|
/// <param name="ywmc">办理业务名称</param> |
|
/// <returns></returns> |
|
public string SendByPrint(string ph, string ddrs, string qrcode, string ywmc, string callback) |
|
{ |
|
try |
|
{ |
|
Task<ResultModel> resultModel = deviceCaller.SendByPrint(ph, ddrs, qrcode, ywmc); |
|
if (resultModel.Result.Code == "1") |
|
{ |
|
string json = JsonConvert.SerializeObject(resultModel.Result); |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":" + json + "}"; |
|
} |
|
else |
|
{ |
|
|
|
return "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + resultModel.Result.Message + "\"}"; |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + ex.Message + "\"}"; |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 文字语音播报 |
|
/// </summary> |
|
/// <param name="centont"></param> |
|
/// <param name="phone"></param> |
|
/// <returns></returns> |
|
public string payleText(string text, bool ispaye, string callback) |
|
{ |
|
try |
|
{ |
|
if (text.Length > 65535) |
|
{ |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":" + "文字太长" + "}"; |
|
} |
|
if (ispaye) |
|
{ |
|
speech.SpeakAsyncCancelAll(); |
|
} |
|
else |
|
{ |
|
try |
|
{ |
|
//if (text.Contains("http:")) |
|
//{ |
|
// DateTime dateTime = DateTime.Now; |
|
// string time = DateTime.Now.ToString( |
|
// "yyyyMMddHHmmss", DateTimeFormatInfo.InvariantInfo); |
|
// var dirpath = Path.Combine(Environment.CurrentDirectory, "wwwroot", "TempFile"); |
|
// FileExt.MakeSureDirExist(dirpath); |
|
// var filepath = Path.Combine(dirpath, time); |
|
// string path = dirpath + "\\" + time + ".txt"; |
|
// WebRequest request = WebRequest.Create(text); |
|
// WebResponse response = request.GetResponse(); |
|
// using (Stream stream = response.GetResponseStream()) |
|
// { |
|
// using (FileStream fileStream = new FileStream(path, FileMode.Create)) |
|
// { |
|
// stream.CopyTo(fileStream); |
|
// } |
|
// } |
|
// response.Close(); |
|
// using (StreamReader sr = new StreamReader(path)) |
|
// { |
|
// text = string.Empty; |
|
// string line; |
|
// while ((line = sr.ReadLine()) != null) |
|
// { |
|
// // 处理每一行数据 |
|
// text = text + line; |
|
// } |
|
// } |
|
//} |
|
text = text.Replace("(", "").Replace(")", "、"); |
|
speech.SpeakAsync(text); |
|
} |
|
catch { } |
|
} |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":" + "" + "}"; |
|
} |
|
catch (Exception ex) |
|
{ |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + ex.Message + "\"}"; |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 发送短信 |
|
/// </summary> |
|
/// <param name="centont"></param> |
|
/// <param name="phone"></param> |
|
/// <returns></returns> |
|
public string SendSSM(string content, string phone, string callback) |
|
{ |
|
try |
|
{ |
|
Task<ResultModel> resultModel = deviceCaller.SendSSM(content, phone); |
|
if (resultModel.Result.Code == "1") |
|
{ |
|
string json = JsonConvert.SerializeObject(resultModel.Result); |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":" + json + "}"; |
|
} |
|
else |
|
{ |
|
|
|
return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"400\",\"status\":false,\"data\":" + resultModel.Result.Message + "}"; |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + ex.Message + "\"}"; |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 打开高拍仪并且进行快速扫描文件 |
|
/// </summary> |
|
/// <returns></returns> |
|
public string openCamera(string url, string callback) |
|
{ |
|
try |
|
{ |
|
string data = hScamera.openCamera2(); |
|
if (!string.IsNullOrEmpty(data)) |
|
{ |
|
FileInfo fileInfo = new FileInfo(data); |
|
//压缩 |
|
string newdata = Util.CompressPictures(fileInfo); |
|
//转换 |
|
string base64 = Util.ImgToBase64String(newdata); |
|
return base64; |
|
} |
|
else |
|
{ |
|
data = hScamera.openCamera2(); |
|
if (!string.IsNullOrEmpty(data)) |
|
{ |
|
FileInfo fileInfo = new FileInfo(data); |
|
//压缩 |
|
string newdata = Util.CompressPictures(fileInfo); |
|
//转换 |
|
string base64 = Util.ImgToBase64String(newdata); |
|
return base64; |
|
} |
|
else |
|
{ |
|
|
|
return Util.str2Base64("400"); |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
////Log.Info("扫描仪异常:" + ex.Message); |
|
return Util.str2Base64("400"); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 打开签字版数据 |
|
/// </summary> |
|
/// <returns></returns> |
|
public string OpenSign(string paramsString, string callback) |
|
{ |
|
try |
|
{ |
|
string sourcepaht = Environment.CurrentDirectory + "\\fiveInch.png"; |
|
FileInfo fileInfo = new FileInfo(sourcepaht); |
|
if (!fileInfo.Exists) |
|
{ |
|
int width = 800; |
|
int height = 394; |
|
using (Bitmap blankImage = new Bitmap(width, height)) |
|
{ |
|
// 设置图片背景为完全透明 |
|
using (Graphics g = Graphics.FromImage(blankImage)) |
|
{ |
|
// 使用白色背景填充图片 |
|
g.Clear(Color.Transparent); |
|
} |
|
// 保存图片到文件系统 |
|
blankImage.Save(sourcepaht); |
|
} |
|
} |
|
int ret = SignDll.OpenComDevice(); |
|
if (ret == 0) |
|
{ |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":\"" + "开启签字版成功" + "\"}"; |
|
} |
|
else |
|
{ |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"400\",\"status\":false,\"data\":\"" + "开启签字版失败" + "\"}"; |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + ex.Message + "\"}"; |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 关闭签字版数据 |
|
/// </summary> |
|
/// <returns></returns> |
|
public string CloseSign(string paramsString, string callback) |
|
{ |
|
try |
|
{ |
|
int ret = SignDll.CloseComDevice(); |
|
if (ret == 0) |
|
{ |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":\"" + "关闭签字版成功" + "\"}"; |
|
} |
|
else |
|
{ |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"400\",\"status\":false,\"data\":\"" + "关闭签字版失败" + "\"}"; |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + ex.Message + "\"}"; |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 获取签字版数据 |
|
/// </summary> |
|
/// <returns></returns> |
|
public string GetSignData(string url, string callback) |
|
{ |
|
try |
|
{ |
|
string sourcepaht = Environment.CurrentDirectory + "\\fiveInch.png"; |
|
FileInfo fileInfo = new FileInfo(sourcepaht); |
|
if (fileInfo.Exists) |
|
{ |
|
double size = fileInfo.Length / 1024.0; |
|
if (size > 10) |
|
{ |
|
FileStream fs1 = fileInfo.OpenRead(); |
|
fs1.Close(); |
|
string base64 = Util.ImgToBase64StringSign(sourcepaht); |
|
int width = 800; |
|
int height = 394; |
|
using (Bitmap blankImage = new Bitmap(width, height)) |
|
{ |
|
// 设置图片背景为完全透明 |
|
using (Graphics g = Graphics.FromImage(blankImage)) |
|
{ |
|
// 使用白色背景填充图片 |
|
g.Clear(Color.Transparent); |
|
} |
|
// 保存图片到文件系统 |
|
blankImage.Save(sourcepaht); |
|
} |
|
return base64; |
|
} |
|
else |
|
{ |
|
return Util.str2Base64("400"); |
|
} |
|
} |
|
else |
|
{ |
|
return Util.str2Base64("400"); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
////Log.Info("获取签字版数据异常:" + ex.Message); |
|
return Util.str2Base64("400"); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 根据文件地址在线打印 |
|
/// </summary> |
|
/// <param name="filename"></param> |
|
/// <returns></returns> |
|
public string PrintFile(string url, string ext, string callback) |
|
{ |
|
try |
|
{ |
|
PrintDocument fPrintDocument = new PrintDocument(); |
|
if (string.IsNullOrEmpty(fPrintDocument.PrinterSettings.PrinterName)) |
|
{ |
|
return "{\"message\":\"success\",\"code\":\"400\",\"status\":false,\"data\":\"" + "请求设置默认打印机!" + "\"}"; |
|
} |
|
Task.Run(async () => |
|
{ |
|
//DateTime dateTime = DateTime.Now; |
|
//string time = DateTime.Now.ToString( |
|
// "yyyyMMddHHmmss", DateTimeFormatInfo.InvariantInfo); |
|
//var dirpath = Path.Combine(Environment.CurrentDirectory, "wwwroot", "PrintFile"); |
|
//FileExt.MakeSureDirExist(dirpath); |
|
//var filepath = Path.Combine(dirpath, time); |
|
//string path = dirpath + "\\" + time + "." + ext; |
|
//WebRequest request = WebRequest.Create(url); |
|
//WebResponse response = request.GetResponse(); |
|
//using (Stream stream = response.GetResponseStream()) |
|
//{ |
|
// using (FileStream fileStream = new FileStream(path, FileMode.Create)) |
|
// { |
|
// stream.CopyTo(fileStream); |
|
// } |
|
//} |
|
//response.Close(); |
|
Util.Print2(url, fPrintDocument.PrinterSettings.PrinterName); |
|
}); |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":\"" + "打印成功" + "\"}"; |
|
|
|
} |
|
catch (Exception ex) |
|
{ |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + ex.Message + "\"}"; |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 根据文件base64打印 |
|
/// </summary> |
|
/// <param name="base64"></param> |
|
/// <param name="ext"></param> |
|
/// <returns></returns> |
|
public string PrintBase64(string base64, string ext, string callback) |
|
{ |
|
try |
|
{ |
|
PrintDocument fPrintDocument = new PrintDocument(); |
|
if (string.IsNullOrEmpty(fPrintDocument.PrinterSettings.PrinterName)) |
|
{ |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"400\",\"status\":false,\"data\":\"" + "请求设置默认打印机!" + "\"}"; |
|
} |
|
Task.Run(async () => |
|
{ |
|
DateTime dateTime = DateTime.Now; |
|
string time = DateTime.Now.ToString( |
|
"yyyyMMddHHmmss", DateTimeFormatInfo.InvariantInfo); |
|
var dirpath = Path.Combine(Environment.CurrentDirectory, "wwwroot", "PrintFile"); |
|
FileExt.MakeSureDirExist(dirpath); |
|
var filepath = Path.Combine(dirpath, time); |
|
string path = dirpath + "\\" + time + "." + ext; |
|
byte[] bytes = Convert.FromBase64String(base64); |
|
System.IO.FileStream stream = new System.IO.FileStream(path, System.IO.FileMode.CreateNew); |
|
System.IO.BinaryWriter writer = new System.IO.BinaryWriter(stream); |
|
writer.Write(bytes, 0, bytes.Length); |
|
writer.Close(); |
|
Util.Print2(path, fPrintDocument.PrinterSettings.PrinterName); |
|
}); |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":\"" + "打印成功" + "\"}"; |
|
|
|
} |
|
catch (Exception ex) |
|
{ |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + ex.Message + "\"}"; |
|
} |
|
} |
|
|
|
|
|
/// <summary> |
|
/// 发送com数据 |
|
/// </summary> |
|
/// <returns></returns> |
|
public string SendMsg(string paramsString, string callback) |
|
{ |
|
try |
|
{ |
|
|
|
return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":\"" + "发送com数据" + "\"}"; |
|
} |
|
catch (Exception ex) |
|
{ |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + ex.Message + "\"}"; |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 开始录音 |
|
/// </summary> |
|
/// <returns></returns> |
|
public string SoundRecording(bool isopen, string url, string callback) |
|
{ |
|
try |
|
{ |
|
Task<ResultModel> resultModel = SoundRecor(isopen); |
|
if (resultModel.Result.Code == "1") |
|
{ |
|
//结束录音上传文件 |
|
if (!string.IsNullOrEmpty(url) && !isopen) |
|
{ |
|
string filename = Path.GetFileName(srpath); |
|
string path = ConfigurationManager.AppSettings["rootPath"].ToString() + "Record/" + filename; |
|
////Log.Info("结束录音上传文件" + path); |
|
return path; |
|
} |
|
else if (isopen)//开始录音 |
|
{ |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"suffix\":\"wav\",\"data\":\"" + "开始录音" + "\"}"; |
|
} |
|
else //取消录音 |
|
{ |
|
srpath = string.Empty; |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"suffix\":\"wav\",\"data\":\"" + "取消录音" + "\"}"; |
|
} |
|
} |
|
else |
|
{ |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + resultModel.Result.Message + "\"}"; |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + ex.Message + "\"}"; |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 获取指纹数据 |
|
/// </summary> |
|
/// <returns></returns> |
|
public string ReadFingerData(string callback) |
|
{ |
|
try |
|
{ |
|
Task<ResultModel> resultModel = deviceCaller.ReadFingerData(); |
|
if (resultModel.Result.Code == "1") |
|
{ |
|
string json = JsonConvert.SerializeObject(resultModel.Result); |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":" + json + "}"; |
|
} |
|
else |
|
{ |
|
|
|
return "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + resultModel.Result.Message + "\"}"; |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + ex.Message + "\"}"; |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 播放与暂停 |
|
/// </summary> |
|
/// <returns></returns> |
|
public static NAudio.Wave.WaveOutEvent player = null; |
|
public static AudioFileReader audioFileReader = null; |
|
public static string WaveOutPath = string.Empty; |
|
public string Paly(string url, bool ispaly, string callback) |
|
{ |
|
try |
|
{ |
|
if (ispaly) |
|
{ |
|
if (player == null) |
|
{ |
|
NewMethod(url); |
|
if (player != null) |
|
{ |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":\"" + "音频播放" + "\"}"; |
|
} |
|
else |
|
{ |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"400\",\"status\":false,\"data\":\"" + "未发现播放文件" + "\"}"; |
|
} |
|
} |
|
else |
|
{ |
|
if (string.IsNullOrEmpty(url)) |
|
{ |
|
player.Play(); |
|
////Log.Info("恢复播放"); |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":\"" + "恢复播放" + "\"}"; |
|
} |
|
else |
|
{ |
|
if (player.PlaybackState == PlaybackState.Playing) |
|
{ |
|
player.Stop(); |
|
// 释放资源 |
|
player.Dispose(); |
|
audioFileReader.Dispose(); |
|
} |
|
NewMethod(url); |
|
if (player != null) |
|
{ |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":\"" + "音频播放" + "\"}"; |
|
} |
|
else |
|
{ |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"400\",\"status\":false,\"data\":\"" + "未发现播放文件" + "\"}"; |
|
} |
|
} |
|
} |
|
} |
|
else |
|
{ |
|
if (player != null) |
|
{ |
|
if (string.IsNullOrEmpty(url)) |
|
{ |
|
player.Pause(); |
|
////Log.Info("暂停播放"); |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":\"" + "暂停播放" + "\"}"; |
|
} |
|
else |
|
{ |
|
player.Stop(); |
|
// 释放资源 |
|
player.Dispose(); |
|
audioFileReader.Dispose(); |
|
player = null; |
|
File.Delete(WaveOutPath); |
|
////Log.Info("停止播放"); |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":\"" + "停止播放" + "\"}"; |
|
} |
|
} |
|
else |
|
{ |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"400\",\"status\":false,\"data\":\"" + "未发现播放文件" + "\"}"; |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
return "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + ex.Message + "\"}"; |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 播放音频公共方法 |
|
/// </summary> |
|
/// <param name="url"></param> |
|
private void NewMethod(string url) |
|
{ |
|
//Uri uri = new Uri(url); |
|
////返回 123.xlsx |
|
//var filename = HttpUtility.UrlDecode(uri.Segments.Last()); |
|
////获取文件后缀 |
|
//string ext = Path.GetExtension(filename); |
|
//DateTime dateTime = DateTime.Now; |
|
//string time = DateTime.Now.ToString( |
|
// "yyyyMMddHHmmss", DateTimeFormatInfo.InvariantInfo); |
|
//var dirpath = Path.Combine(Environment.CurrentDirectory, "wwwroot", "WaveOutFile"); |
|
//FileExt.MakeSureDirExist(dirpath); |
|
//var filepath = Path.Combine(dirpath, time); |
|
|
|
//WebRequest request = WebRequest.Create(url); |
|
//WebResponse response = request.GetResponse(); |
|
//using (Stream stream = response.GetResponseStream()) |
|
//{ |
|
// using (FileStream fileStream = new FileStream(WaveOutPath, FileMode.Create)) |
|
// { |
|
// stream.CopyTo(fileStream); |
|
// } |
|
//} |
|
//response.Close(); |
|
|
|
WaveOutPath = url; |
|
using (player = new WaveOutEvent()) |
|
{ |
|
player.PlaybackStopped += waveOut_PlaybackStopped; |
|
using (audioFileReader = new AudioFileReader(WaveOutPath)) |
|
{ |
|
// 创建一个增益效果器对象 |
|
var volumeProvider = new VolumeSampleProvider(audioFileReader.ToSampleProvider()); |
|
// 将音频文件添加到WaveOutEvent对象中 |
|
player.Init(volumeProvider); |
|
// 设置音量增益为2倍 |
|
volumeProvider.Volume = 2.0f; |
|
// 开始播放音频 |
|
player.Play(); |
|
while (player.PlaybackState == PlaybackState.Playing) |
|
{ |
|
Thread.Sleep(1000); |
|
} |
|
} |
|
} |
|
////Log.Info("开始播放"); |
|
} |
|
|
|
/// <summary> |
|
/// 播放完成 |
|
/// </summary> |
|
/// <param name="sender"></param> |
|
/// <param name="e"></param> |
|
private void waveOut_PlaybackStopped(object sender, StoppedEventArgs e) |
|
{ |
|
try |
|
{ |
|
player.Stop(); |
|
// 释放资源 |
|
player.Dispose(); |
|
audioFileReader.Dispose(); |
|
player = null; |
|
File.Delete(WaveOutPath); |
|
////Log.Info("播放完成"); |
|
} |
|
catch (Exception ex) |
|
{ |
|
////Log.Info("播放完成,清除本地文件异常" + ex.Message); |
|
} |
|
} |
|
|
|
//上传本地文件中转 |
|
private string urlP = string.Empty; |
|
private AutoResetEvent @event5 = new AutoResetEvent(false); |
|
private async void UploadInfoByFile(string url, string strpath) |
|
{ |
|
var httpClient = new HttpClient(); |
|
var uploader = new ChunkedUpload(httpClient); |
|
urlP = await uploader.UploadFileAsync(url, strpath); |
|
File.Delete(strpath); |
|
@event5.Set(); |
|
} |
|
|
|
//上传录音 |
|
private string urlpath = string.Empty; |
|
private AutoResetEvent @event2 = new AutoResetEvent(false); |
|
private async void UploadInfo(string url) |
|
{ |
|
var httpClient = new HttpClient(); |
|
var uploader = new ChunkedUpload(httpClient); |
|
urlpath = await uploader.UploadFileAsync(url, srpath); |
|
//File.Delete(srpath); |
|
srpath = string.Empty; |
|
@event2.Set(); |
|
} |
|
public static WaveFileWriter writer; |
|
public static StreamWriter mStreamWriter; |
|
public static WaveInEvent waveIn = null; |
|
private string srpath = string.Empty; |
|
private AutoResetEvent @event3 = new AutoResetEvent(false); |
|
private void StateSoundRecor(bool isopen) |
|
{ |
|
// 录音对象 |
|
waveIn = new WaveInEvent(); |
|
int sampleRate = 48000; //采样率 |
|
int channels = 2; //录音通道数 |
|
int bitsPerSample = 16; //位深 |
|
WaveFormat waveFormat = new WaveFormat(sampleRate, bitsPerSample, channels); |
|
waveIn.WaveFormat = waveFormat; //设置录音格式 |
|
DateTime dateTime = DateTime.Now; |
|
string time = DateTime.Now.ToString( |
|
"yyyyMMddHHmmss", DateTimeFormatInfo.InvariantInfo); |
|
var dirpath = System.IO.Path.Combine(Environment.CurrentDirectory, "wwwroot", "Record"); |
|
FileExt.MakeSureDirExist(dirpath); |
|
var filepath = System.IO.Path.Combine(dirpath, time); |
|
srpath = dirpath + "\\" + time + ".wav"; |
|
string pathfile = dirpath + "\\" + time + ".txt"; |
|
// 创建WaveFileWriter对象来保存录音数据 路径在bin文件下 |
|
writer = new WaveFileWriter(srpath, waveFormat); |
|
//编写器 |
|
//mStreamWriter = new StreamWriter(pathfile, false, new System.Text.UTF8Encoding(false)); |
|
// 设置录音回调函数 |
|
int bitIndex = bitsPerSample / 8; |
|
waveIn.DataAvailable += (sender, e) => |
|
{ |
|
// 将录音数据写入文件 |
|
writer.Write(e.Buffer, 0, e.BytesRecorded); |
|
for (int i = 0; i < e.BytesRecorded / bitIndex; i++) |
|
{ |
|
//24bit,导出的数据 |
|
//int sample = (int)((e.Buffer[i * bitIndex + 2] << 16) | (e.Buffer[i * bitIndex + 1] << 8) | e.Buffer[i * bitIndex]); |
|
//16bit 将两个byte数据组合成一个short数据 |
|
short sample = (short)((e.Buffer[i * bitIndex + 1] << 8) | e.Buffer[i * bitIndex]); |
|
//mStreamWriter.Write("{0},", sample); |
|
} |
|
}; |
|
try |
|
{ |
|
//尝试打开录音设备,如果设备支持设置的WaveFormat,则能够成功打开 |
|
waveIn.StartRecording(); |
|
} |
|
catch (Exception ex) |
|
{ |
|
srpath = ""; |
|
} |
|
//@event3.Set(); |
|
} |
|
private AutoResetEvent @event4 = new AutoResetEvent(false); |
|
private async void StopSoundRecor(bool isopen) |
|
{ |
|
|
|
try |
|
{ |
|
//停止录音 |
|
waveIn.StopRecording(); |
|
waveIn.Dispose(); |
|
writer.Close(); |
|
//mStreamWriter.Close(); |
|
waveIn = null; |
|
} |
|
catch (Exception ex) |
|
{ |
|
srpath = ""; |
|
} |
|
//@event4.Set(); |
|
} |
|
public async Task<ResultModel> SoundRecor(bool isopen) |
|
{ |
|
if (isopen) |
|
{ |
|
//如果开始录音上次未结束,直接结束上次录音,开始新的录音 |
|
if (waveIn != null) |
|
{ |
|
StopSoundRecor(false); |
|
} |
|
if (waveIn == null) |
|
{ |
|
Action<bool> a = StateSoundRecor; |
|
a.Invoke(isopen); |
|
//Task.Run(() => |
|
//{ |
|
// StateSoundRecor(); |
|
//}); |
|
//@event3.WaitOne(); |
|
if (!string.IsNullOrEmpty(srpath)) { return ResultModel.Success(srpath); } |
|
else { return ResultModel.Error("录音开启失败"); } |
|
} |
|
else |
|
{ |
|
return ResultModel.Error("正在录音,请勿重复录音"); |
|
} |
|
} |
|
else |
|
{ |
|
try |
|
{ |
|
if (waveIn != null) |
|
{ |
|
//Task.Run(() => |
|
//{ |
|
// StopSoundRecor(); |
|
//}); |
|
//@event4.WaitOne(); |
|
Action<bool> a = StopSoundRecor; |
|
a.Invoke(isopen); |
|
if (!string.IsNullOrEmpty(srpath)) { return ResultModel.Success(srpath); } |
|
else { return ResultModel.Error("录音停止失败"); } |
|
} |
|
else |
|
{ |
|
return ResultModel.Error("未开始录音"); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
return ResultModel.Error(ex.Message); |
|
} |
|
} |
|
} |
|
} |
|
}
|
|
|