前言:winform端对于音频文件的格式多有限制,大多数不支持amr格式的文件的播放。但是,手机端传过来的音频文件大多数是amr格式的文件,所以,要想在winform客户端支持音频文件的播放,可以通过将amr格式转换成mp3格式。利用的方法就是在.net端调用外部的ffmpeg.exe文件来进行格式的转换。这种中方式支持多种文件之间的互转,比如wav转mp3,mp3转wav,mp3转amr等,重点再于指令符

具体方法

     /// <summary>
/// 将amr音频转成mp3手机音频
/// </summary>
/// <param name="applicationPath">ffmeg.exe文件路径</param>
/// <param name="fileName">amr文件的路径(带文件名)</param>
/// <param name="targetFilName">生成目前mp3文件路径(带文件名)</param>
public static void ConvertToAmr(string applicationPath, string fileName, string targetFilName)
{
//ffmpeg -i 1.mp3 -ac 1 -ar 8000 1.amr
//ffmpeg -i 1.mp3 -ac 1 -ar 8000 1.amr
string c = applicationPath + @"\ffmpeg -i " + fileName + " " + targetFilName;
c = c.Replace("//", "\\").Replace("/", "\\");
//string c = applicationPath + @"\ffmpeg.exe -y -i " + fileName + " -ar 8000 -ab 12.2k -ac 1 " + targetFilName;
Cmd(c);
} /// <summary>
/// 执行Cmd命令
/// </summary>
private static 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
{ }
}

调用:(将base64字符数组转换成指定路径下的文件)

#region 二进制转音频文件

        /// <summary>
/// 二进制转音频文件
/// </summary>
/// <param name="audioBytes">base64位的音频文件</param>
/// <param name="compno">文件路径的一部分(客户编号)</param>
/// <param name="filename">文件名称</param>
/// <returns></returns>
public static string CByteToAudio(string base64str, string compno, string filename)
{
if (base64str.Length != )
{
byte[] audioBytes = Convert.FromBase64String(base64str);
string address = ConfigurationManager.AppSettings["CustomAudioSavePath"];
string filenaMp3 = address + compno + "/";
string filenaAmr = address + compno + "/" + filename; //完成的文件路径+文件名
if (!Directory.Exists(address + compno))
{
Directory.CreateDirectory(address + compno);
} using (System.IO.MemoryStream ms = new MemoryStream(audioBytes))
{
//有时候为了避免流指针定位错误,显式定义一下指针位置到也可以
ms.Seek(, SeekOrigin.Begin);
using (Stream fs = new FileStream(filenaAmr, FileMode.Create))
{
ms.WriteTo(fs); //将fs写入到ms中
//将amr文件转换为mp3格式的文件
FileInfo fileInfo = new FileInfo(filenaAmr);
filenaMp3 += fileInfo.Name.Split('.')[] + ".mp3";
//Common.API.LogAPI.debug("路径路径路径:" + System.AppDomain.CurrentDomain.BaseDirectory + "bin");
ConvertToAmr(System.AppDomain.CurrentDomain.BaseDirectory+"bin", filenaAmr, filenaMp3);
}
}
return filenaMp3;
}
else
{
return "";
}
} #endregion

附代码:(如何将指定路径下的文件转换成base64字符串数组)

public void FileToBase64()
{
  #region 测试
System.IO.FileStream fs = System.IO.File.OpenRead("D:\\dfdfdfdf.amr");//传文件的路径即可
System.IO.BinaryReader br = new BinaryReader(fs);
byte[] _filestr = br.ReadBytes(Convert.ToInt32(fs.Length));
base64str = Convert.ToBase64String(_filestr);
br.Close();
fs.Close();
  #endregion
}

注意:需要将ffmpeg.exe可执行文件拷贝到指定的目录下,在上述程序中,指定的目录为

System.AppDomain.CurrentDomain.BaseDirectory+"bin",也就是当前应用程序的bin文件夹下

.net amr格式文件转换成mp3格式文件的方法的更多相关文章

  1. 怎样将flac音频格式转换成MP3格式

    Flac音频格式怎样转换成MP3格式呢?随着现在音频格式的不断多样性,生活中很多时候我们都会遇到音频格式转换的问题,如flac音频转MP3的问题,那么我们应该如何去解决这个问题呢?下面我们就一起去来一 ...

  2. 如何将AAC音频转换成MP3格式

    我们应该怎样将AAC音频转换成MP3格式呢?AAC是一种专为声音数据设计的文件压缩格式,相对于MP3音频来说更加高效,性价比跟高.但是因为MP3音频格式的通用性,我们还是时常需要将AAC音频转换成MP ...

  3. 怎样将M4A音频格式转换成MP3格式

    因为MP3音频格式应用的广泛性,所以很多时候我们都需要将不同的音频格式转换成MP3格式的,那么如果我们需要将M4A音频格式转换成MP3格式,我们应该怎样进行实现呢?下面我们就一起来看一下吧. 操作步骤 ...

  4. 使用jave2将音频wav转换成mp3格式

    最近需要用到语音合成功能,网上查阅了一番,发现可以使用腾讯云的语音合成API来完成这个功能,但是腾讯云的api返回的是wav格式的音频文件,这个格式的文件有些不通用,因此需要转换成mp3格式的文件.  ...

  5. 使用jave2实现将wav格式的音频转换成mp3格式

    最近需要用到语音合成功能,网上查阅了一番,发现可以使用腾讯云的语音合成API来完成这个功能,但是腾讯云的api返回的是wav格式的音频文件,这个格式的文件有些不通用,因此需要转换成mp3格式的文件. ...

  6. Python:将utf-8格式的文件转换成gbk格式的文件

    需求:将utf-8格式的文件转换成gbk格式的文件 实现代码如下: def ReadFile(filePath,encoding="utf-8"): with codecs.ope ...

  7. 【转】qlv文件如何转换成mp4 怎样把下载好的qlv格式视频转换成MP4格式

    狸窝  复制  收藏  保存到桌面  快速找教程方案  反馈需求  社会主义核心价值观  客服QQ41442901   马上注册 升级VIP   对于视频文件之间的转换问题,我也已经是无力吐槽了,每个 ...

  8. dvi文件和将dvi文件转换成pdf格式

    dvi文件和将dvi文件转换成pdf格式 Latex只能把tex文件编译成dvi文件, 在cmd 中: 使用xdvi查看dvi格式的文件 若用texstudio编辑tex文件,则可直接将已编译成功的. ...

  9. 将文本(lrc,txt)文件转换成UTF-8格式

    UTF-8是UNICODE的一种变长字符编码又称万国码,由Ken Thompson于1992年创建.现在已经标准化为RFC 3629.UTF-8用1到6个字节编码UNICODE字符.用在网页上可以同一 ...

随机推荐

  1. 为什么我们不要 .NET 程序员

    英文原文:Why we don’t hire .NET programmers,编译:外刊IT评论 http://blog.jobbole.com/10389/ 也许你已经知道了,我们正在招聘最优秀的 ...

  2. 算法实践--最长公共子序列(Longest Common Subsquence)

    什么是最长公共子序列 X=ACCG Y=CCAGCA 长度为1的公共子序列: {A} {C} {G} 长度为2的公共子序列:{AC} {CC} {CG} {AG} 长度为3的公共子序列:{ACG} 长 ...

  3. SpringCloud和Springboot

    SpringBoot+SpringCloud+SpringMVC+SpringData 我们把这种架构也称之为spring全家桶 什么是SpringCloudSpring Cloud是一系列框架的有序 ...

  4. LeetCode【100. 相同的树】

    看到这道题,第一思考是结构和节点完全相同 第一次,就没有思考null的情况 if(p.val == q.val && p.left.val == q.left.val &&am ...

  5. 01-Introspector内省机制

    在java领域编程中,内省机制相当的不错,可以省去我们程序员很多的不必要的代码 比如说:在jdbc工具类 我们可以将ResultSet结果集待到 javabean对象中 将http请求报文的数据 转换 ...

  6. k8s学习笔记之九: Service Account

    第一章.前言 每一个用户对API资源进行操作都需要通经过以下三个步骤: 第一步:对客户端访问进行认证操作,确认是否具有访问k8s权限 token(共享秘钥) SSL(双向SSL认证) ....通过任何 ...

  7. k8s学习笔记之一:kubernetes简介

    一.虚拟化技术 1.什么是虚拟化技术 虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机.在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立 ...

  8. OpenStack Q版本新功能以及各核心组件功能对比

    OpenStack Q版本已经发布了一段时间了.今天, 小编来总结一下OpenStack Q版本核心组件的各项主要新功能, 再来汇总一下最近2年来OpenStack N.O.P.Q各版本核心组件的主要 ...

  9. 二、CSS选择器

    1.CSS派生选择器 概念:通过依据元素在其位置的上下文关系来定义样式. 实例: <!--index.html--> <!DOCTYPE html> <html lang ...

  10. TCP‘三次握手’和‘四次挥手’(通俗易懂)

      概述 我们都知道 TCP 是 可靠的数据传输协议,UDP是不可靠传输,那么TCP它是怎么保证可靠传输的呢?那我们就不得不提 TCP 的三次握手和四次挥手. 三次握手 下图为三次握手的流程图 下面通 ...