前言: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. Xamarin+Prism开发详解七:Plugin开发与打包测试

    有了上章[Xamarin+Prism开发详解六:DependencyService与IPlatformInitializer的关系]的基础,现在来理解Plugin开发就简单了. 本文实例代码地址:ht ...

  2. inode引起的Linux无法创建新文件,磁盘空间不足

    df -h,判断硬盘空间是否已经满了,占用率达100% ,就可以断定该分区满了. df -ia,占用率达100%,也会导致无法创建新文件.一般都是存在大量小文件引起的. inode包含文件的元信息,具 ...

  3. Xtrabackup2.4.8备份、还原、恢复Mysql5.7.19实操(网络拷贝)

    环境:CentOS 6.7  + Mysql 5.7.19 + Xtraback 2.4.8 innobackupex常用参数: --user=USER 指定备份用户,不指定的话为当前系统用户 --p ...

  4. 小程序打开pdf

    wx.downloadFile({ url:"https://xxxxxx.pdf", success(res){ console.log(res) let data = res. ...

  5. [Unity优化]UI优化(三):GraphicRebuild

    参考链接: https://blog.csdn.net/jingangxin666/article/details/80143176 调试过程: 1.修改Image的颜色 2.Graphic.SetV ...

  6. spring 之 类型转换 2

    spring内置的转换器 在spring xml 文件中,配置属性的时候, 不管实际是 list 还是map ,还是Date, 或者原生的java 类型, 我们只能配置xml 给它们. 那么 spri ...

  7. filter in Servlet

    Servlet过滤器: Servlet过滤器是用于执行某些过滤任务的对象.过滤器可以应用于servlet,jsp或html. Servlet过滤器主要用于以下任务: 预处理: Servlet过滤器用于 ...

  8. Dubbo注册Zookepper服务的虚拟IP

    使用dubbo在zookepper上注册服务,使用dubbo的服务器IP为192.168.70.105 而在zookepper上显示服务提供者为 dubbo://202.102.110.203:808 ...

  9. linux安装jdk8

    1.文件准备 jdk-8u201-linux-x64.tar.gz 下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8- ...

  10. c# post 接收传来的文件

    private void UploadFile() { // //......其他代码 // HttpFileCollection files = HttpContext.Current.Reques ...