前言: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. Padavan老毛子固件:17CE插件集成

    Padavan老毛子固件:17CE插件集成 1.老毛子路由设置:系统管理-服务-启动SSH服务器     以下链接下载 "winscp" http://down.orsoon.co ...

  2. json 中关于json数组跟json对象的区别

    原文地址:http://blog.csdn.net/lafengwnagzi/article/details/52789171 JSON 是存储和交换文本信息的语法 JSON 文本格式在语法上与创建 ...

  3. docker上部署nginx容器80端口自动转443端口

    拉去nginx镜像 # docker pull nginx 运行nginx容器config用于拷贝nginx配置文件 # docker run --name nginxconfig -d docker ...

  4. js 一些方法

    1.js去除字符串前后的空格 function Trim(str) { return str.replace(/(^\s*)|(\s*$)/g, ""); } 2.js打乱数组的顺 ...

  5. Spring MVC 之 ContentNegotiatingViewResolver

    我们已经知道 对于 RequestMappingInfoHandlerMapping, 它在对带有后缀的http 请求进行匹配的时候,如果找不到精确的pattern, 那么就会 pattern+.* ...

  6. OpenCV代码:画出轮廓的外接矩形,和中心点

    #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include & ...

  7. JPA中建立数据库表和实体间映射小结

    在JPA中,映射数据库表和实体的时候,需要注意一些细节如下, 实体类要用@Entity的注解: 要用 @Id 来注解一个主键: 如果跟数据库相关联,要用@Table注解相关数据库表: 实体类中字段需要 ...

  8. python中并发编程基础1

    并发编程基础概念 1.进程. 什么是进程? 正在运行的程序就是进程.程序只是代码. 什么是多道? 多道技术: 1.空间上的复用(内存).将内存分为几个部分,每个部分放入一个程序,这样同一时间在内存中就 ...

  9. ntp时间同步参考

    https://blog.csdn.net/kamereon/article/details/54344114

  10. C# 导出dataGridView中的值到Excel

    C# 怎么导出dataGridView中的值到Excel 1 2 3 4 5 6 在系统应用过程中,数据是系统的核心.如果直接在应用软件中看数据,有时也有些不便,所以就会把系统数据转换成Excel格式 ...