#region 音频转换 private int AudioIntervalTime = 100, iAudio = 0; private string strPath = "D:\\web\\XXXX\\voice\\"; /// <summary> /// 线程委托 /// </summary> private delegate void DelegateAudio(); /// <summary> /// 定时器 /// </summary> System.Threading.Timer timeAudio; /// <summary> /// 定义线程 /// </summary> private void TimeThreadAudio() { Thread thread = new Thread(ThreadAudio); thread.Name = "Audio"; thread.IsBackground = true; thread.Start(); } /// <summary> /// 线程委托 /// </summary> private void ThreadAudio() { DelegateAudio dp = new DelegateAudio(ThreadAudioFunction); dp.BeginInvoke(null, null); } /// <summary> /// 线程定时调整 /// </summary> private void ThreadAudioFunction() { timeAudio = new System.Threading.Timer(new System.Threading.TimerCallback(AudioFunction), null, 0, 0); } /// <summary> /// 线程工作方法体 /// </summary> /// <param name="sender"></param> private void AudioFunction(object sender) { timeAudio.Change(System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite); try { Dictionary<string, string> list = new RedisTool().GetAllEntriesFromHash(SysConst.str_H_Rd_AudioConvert); foreach (var item in list) { string fileName = strPath + item.Key; string targetFileName = strPath + item.Key.Replace("amr","mp3"); ; WavConvertToAmrHelp toamr = new WavConvertToAmrHelp(); toamr.ConvertToAmr(System.Windows.Forms.Application.StartupPath, fileName, targetFileName); ShowContent(string.Format("当前时间:{0};音频文件:{1};转换成功;\r\n", DateTime.Now.ToString(), item.Key), rtbAudioContent, iAudio++); new RedisTool().RemoveEntryFromHash(SysConst.str_H_Rd_AudioConvert, item.Key); } } catch (Exception ex) { LogHelper.Save(ex); ShowContent(DateTime.Now.ToString() + "\r\n" + ex.ToString() + "\r\n", rtbAudioContent, iAudio); } timeAudio.Change(AudioIntervalTime, AudioIntervalTime); } #endregion
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; namespace SZ.Company.Common { /// <summary> /// 音频转换工具类 /// </summary> public class WavConvertToAmrHelp { /// <summary> /// 将Wav音频转成Amr手机音频 /// </summary> /// <param name="applicationPath">ffmeg.exe文件路径</param> /// <param name="fileName">WAV文件的路径(带文件名)</param> /// <param name="targetFilName">生成目前amr文件路径(带文件名)</param> public void ConvertToAmr(string applicationPath, string fileName, string targetFilName) { string c = applicationPath + @"\ffmpeg.exe -y -i " + fileName + " -ar 8000 -ab 12.2k -ac 1 " + targetFilName; Cmd(c); } /// <summary> /// 执行Cmd命令 /// </summary> private void Cmd(string c) { try { System.Diagnostics.Process process = new System.Diagnostics.Process(); process.StartInfo.FileName = "cmd.exe"; process.StartInfo.UseShellExecute = false; process.StartInfo.CreateNoWindow = true; process.StartInfo.RedirectStandardOutput = true; process.StartInfo.RedirectStandardInput = true; process.Start(); process.StandardInput.WriteLine(c); process.StandardInput.AutoFlush = true; process.StandardInput.WriteLine("exit"); StreamReader reader = process.StandardOutput;//截取输出流 process.WaitForExit(); } catch { } } /// <summary> /// 获取文件的byte[] /// </summary> /// <param name="fileName"></param> /// <returns></returns> public byte[] GetFileByte(string fileName) { FileStream pFileStream = null; byte[] pReadByte = new byte[0]; try { pFileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read); BinaryReader r = new BinaryReader(pFileStream); r.BaseStream.Seek(0, SeekOrigin.Begin); //将文件指针设置到文件开 pReadByte = r.ReadBytes((int)r.BaseStream.Length); return pReadByte; } catch { return pReadByte; } finally { if (pFileStream != null) pFileStream.Close(); } } /// <summary> /// 将文件的byte[]生成文件 /// </summary> /// <param name="pReadByte"></param> /// <param name="fileName"></param> /// <returns></returns> public bool writeFile(byte[] pReadByte, string fileName) { FileStream pFileStream = null; try { pFileStream = new FileStream(fileName, FileMode.OpenOrCreate); pFileStream.Write(pReadByte, 0, pReadByte.Length); } catch { return false; } finally { if (pFileStream != null) pFileStream.Close(); } return true; } } }
原文:http://www.cnblogs.com/wdkshy/p/5117374.html