• .net 使用ffmpeg.exe进行音频转码


            #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};转换成功;
    ", 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() + "
    " + ex.ToString() + "
    ", 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;
    
            }
        }     
    }
  • 相关阅读:
    手动创建分区以及软硬raid的问题
    实用小工具:VNC的安装
    安装使用xen虚拟化工具
    使用vsftp与shell实现对进程与服务状态的监控
    windows server2008下搭建ftp服务
    业界虚拟化技术分析
    Android命名规范(自定义)
    Android Paint和Color类
    Android 应用中十大常见 UX 错误
    漫谈互联网产品设计之人性的弱点,你躺枪了木有?
  • 原文地址:https://www.cnblogs.com/wdkshy/p/5117374.html
Copyright © 2020-2023  润新知