如何将内存中的wav文件转换为mp3?

2023-11-26

我有一个在 Asp.Net MVC 5 框架之上使用 C# 编写的应用程序。

我的目标是调用第三方服务来下载波形文件。然后我想把这个文件转换成mp3。最后,我想将 mp3 文件返回为 (byte[]),以允许用户直接从内存下载它。

这是我的代码最终的结果,允许用户从内存下载转换后的文件

public ActionResult Download(int? id)
{

    // Download and convert the file
    // the variable "someUri" is generated based on the provided id value
    byte[] filedata = ConvertToMp3(someUri);

    var cd = new System.Net.Mime.ContentDisposition
    {
        FileName = "filename.mp3",
        Inline = true,
    };

    Response.AppendHeader("Content-Disposition", cd.ToString());

    return File(filedata, "audio/mpeg"); 
}

但我有问题ConvertToMp3 method.

我在用NAudio库来转换文件转换。到目前为止,这是我的代码

public void ConvertToMp3(Uri uri)
{
    using (var client = new WebClient())
    {
        byte[] file = client.DownloadData(uri);
        string wavFileFullName = GetFullDirectory() + "filename.wav";
        string mp3FileFullName = GetFullDirectory() + "filename.mp3";
        WaveFormat target = new WaveFormat(8000, 16, 1);
        using (WaveStream stream = new WaveFileReader(new MemoryStream(file)))
        using (WaveFormatConversionStream str = new WaveFormatConversionStream(target, stream))
        {
            WaveFileWriter.CreateWaveFile(wavFileFullName, str);

            using (var reader = new WaveFileReader(wavFileFullName))
            using (var writer = new LameMP3FileWriter(mp3FileFullName, reader.WaveFormat, bitRate))
            {
                reader.CopyTo(writer);
            }
        }
        File.Delete(wavFileFullName);
    }
}

上述方法转换文件。但此方法将波形文件写入桌面,将其转换为mp3,然后删除波形文件。此外,此方法将 mp3 文件写入桌面而不是返回byte[]内容。

如何在不写入桌面的情况下转换内存中的文件?另外,如何将 mp3 文件转换为byte[]?


也许是这样的。

Note: 完全未经测试,我只是查看了来源。

Sync

public byte[] ConvertToMp3(Uri uri)
{
   using (var client = new WebClient())
   {
      var file = client.DownloadData(uri);
      var target = new WaveFormat(8000, 16, 1);
      using (var outPutStream = new MemoryStream())
      using (var waveStream = new WaveFileReader(new MemoryStream(file)))
      using (var conversionStream = new WaveFormatConversionStream(target, waveStream))
      using (var writer = new LameMP3FileWriter(outPutStream, conversionStream.WaveFormat, 32, null))
      {
         conversionStream.CopyTo(writer);

         return outPutStream.ToArray();
      }
   }
}

Async

public async Task<byte[]> ConvertToMp3Async(Uri uri)
{
   using (var client = new WebClient())
   {
      var file = await client.DownloadDataTaskAsync(uri);
      var target = new WaveFormat(8000, 16, 1);
      using (var outPutStream = new MemoryStream())
      using (var waveStream = new WaveFileReader(new MemoryStream(file)))
      using (var conversionStream = new WaveFormatConversionStream(target, waveStream))
      using (var writer = new LameMP3FileWriter(outPutStream, conversionStream.WaveFormat, 32, null))
      {
          await conversionStream.CopyToAsync(writer);

          return outPutStream.ToArray();
      }
   }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将内存中的wav文件转换为mp3? 的相关文章

  • Dapper 强类型查询返回默认对象值

    刚刚开始使用 Dapper 并喜欢它 我遇到了问题 它返回正确数量的对象 但它们的属性都有默认值 using var dbConnection Connection await dbConnection OpenAsync const st
  • 警告:从指针目标类型中丢弃“const”限定符

    没有const char s意味着 s 是一个指向常量 char 的指针 那么为什么它给我这个警告 我并不是想改变价值观 在第一个函数中警告是return discards const qualifiers from pointer tar
  • 如何使用 C# 打印 pdf

    我在 C 应用程序中使用 进程 打印 pdf 文件 但是我无法获取打印状态 我发现可以通过 System management 和 System printing 与打印机 队列进行交互 我做了很多尝试 但都出错了使用这两个命名空间但无法打
  • boost::interprocess 准备好迎接黄金时间了吗? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在开发一个由内存映射文件支持的线
  • 从 .Net 将简单数据插入 Excel 文件的最简单方法

    我有一个 Excel 文件 大约有 10 列和 1 20 行 我需要插入 1 20 行包含各种数据元素 我想知道是否有一种方法可以将一些标签放入 Excel 文件中 以便可以找到并替换它们 将列标记为 名称 的东西 这样我就可以在代码中说
  • 在 MVC 类上创建主键字段

    我是 MVC 和 C 新手 我只是偶然发现它并发现它很有趣 我遇到了一个不允许我继续的问题 这是我的代码 using System using System Collections Generic using System Linq usi
  • WPF - 按多列排序时使用自定义比较器

    我有一个 ListView GridView 我想按 2 列排序 因此如果第 1 列中有 2 个以上的项目具有相同的值 它将按第 2 列排序 非常简单 但是在对 A Z 进行排序时 空字符串会出现在顶部 我想把它们移到底部 我制作了一个比较
  • 如何检查 .NET 4.0 中的泛型参数是否是动态的

    我有课ObjectMapper
  • 如何在 C++ 的子目录中创建文件?

    这是我的代码 如何在子目录联系人中创建文件 每次创建该文件时 它都会出现在与我的程序相同的目录中 int main ofstream myfile contacts myfile open a myfile close 在构造函数中指定完整
  • 实体框架7审计日志

    我正在将一个旧项目移植到 ASP NET 5 和 Entity Framework 7 我使用数据库优先方法 DNX 脚手架 来创建模型 旧项目基于Entity Framework 4 审计跟踪是通过重写实现的SaveChanges的方法D
  • 未定义异常变量时通过引用捕获

    捕获异常时 标准指导是按值抛出 按引用捕获 据我了解 这有两个原因 如果由于内存不足异常而引发异常 我们将不会调用可能终止程序的复制构造函数 如果异常是继承层次结构的一部分 我们可能会对异常进行对象切片 如果我们有一个场景 我们没有在 ca
  • Windows 程序如何临时更改其时区?

    我写了一个函数来返回time t与给定日期的午夜相对应的值 当给定日期没有午夜时 它返回最早可用的时间 例如 当埃及进入夏令时时 这种情况就可能发生 今年 时间更改于 4 月 29 日晚上午夜生效 因此时钟直接从 23 59 转到 01 0
  • 在非指针变量和类成员上放置 new

    考虑以下示例 include
  • AspNetCore.SignalR:无法启动未处于初始状态的连接

    我无法让 ASP NET Core SignalR 应用程序正常运行 我有这个服务器端代码 public class PopcornHub Hub private int Users public async Task BroadcastN
  • 使用 cudamalloc()。为什么是双指针?

    我目前正在浏览有关的教程示例http code google com p stanford cs193g sp2010 http code google com p stanford cs193g sp2010 学习CUDA 演示的代码 g
  • 打破条件变量死锁

    我遇到这样的情况 线程 1 正在等待条件变量 A 该变量应该由线程 2 唤醒 现在线程 2 正在等待条件变量 B 该变量应该由线程 1 唤醒 在我使用的场景中条件变量 我无法避免这样的死锁情况 我检测到循环 死锁 并终止死锁参与者的线程之一
  • fscanf 和 EOF 中的否定扫描集

    我的文件中有一个以逗号分隔的字符串列表 姓名 1 姓名 2 姓名 3 我想跳过所有逗号来阅读这些名字 我写了以下循环 while true if fscanf file my string 1 break 然而 它总是比预期多执行一次 给定
  • 停止 TcpListener 的正确方法

    我目前正在使用 TcpListener 来处理传入连接 每个连接都有一个线程用于处理通信 然后关闭该单个连接 代码如下 TcpListener listener new TcpListener IPAddress Any Port Syst
  • 统一;随机物体移动[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在制作一款机器人战斗游戏 我希望敌人随机移动 然后有时会向敌人移动 我希望运动包含在其中的代码 else if avoid fal
  • Intel 和 AMD 处理器有相同的汇编程序吗?

    C语言被用来编写Unix以实现可移植性 使用不同编译器编译的同一个C语言程序会产生不同的机器指令 为什么 Windows 操作系统能够在两者上运行Intel https en wikipedia org wiki Intel and AMD

随机推荐

  • 快速截取所有 webview 的完整屏幕截图

    有谁知道如何使用 swift 中的代码对所有网页视图进行完整屏幕截图 不是屏幕 因为网页视图很长 我们必须滚动才能查看所有内容 并通过以下方式分享 UIActivityViewController 加载 Web 视图后尝试以下代码 编辑 在
  • 无法打印背景颜色(css解决方案)?

    我正在尝试学习如何启用打印背景颜色页面chrome 举个例子http angularjs org 主页是 So If I click print ctrl P and mark the background colors and image
  • 将富文本格式转换为 HTML 格式标签

    我正在使用 Excel 列表并希望将其转换为 农叶栎 var 氧化腺症 托 J T 豪厄尔 into i Quercus agrifolia i var i oxyadenia i Torr J T Howell 我有应用了格式的富文本格式
  • 如何防止 Django 管理中的 FK / MTM 字段的自我(递归)选择

    给定一个具有ForeignKeyField FKF 或ManyToManyField MTMF 字段且外键为 self 的模型 我该如何防止selfDjango 管理 admin 中的 递归 选择 简而言之 应该可以prevent在管理中自
  • 如何处理服务和活动(及其子活动)之间的 IPC?

    可以管理Android中两个不同进程 服务和活动 之间的通信通过 Messenger 或 AIDL 活动绑定到服务就足够了 但是 如果此活动有一个或多个子活动 会发生什么情况 从主活动启动子活动的那一刻起 我希望将通信重定向到子活动 同样
  • Selenium:退出Python脚本而不关闭浏览器

    I use the following to handle the situation where Ctrl C is used to terminate a running Python script except KeyboardInt
  • 在 x86-64 上,系统崩溃时“movnti”或“movntdq”指令是原子的吗?

    当使用像Intel optane DCPMM这样的持久内存时 如果系统在执行movnt指令时崩溃 断电 重新启动后是否可以看到部分结果 For 4 或 8 字节movnti哪个 x86 保证原子用于其他目的 16字节SSEmovntdq m
  • 用汇编语言访问数组元素(Windows)

    我在汇编语言中遇到问题 我必须访问数组的元素 假设数组包含星期几 像太阳 星期一 星期二 星期三 我必须访问数组的第二个索引 我怎样才能做到这一点 汇编中的索引基本上与 C C 相同 除了一个区别 您必须知道数据元素的大小 例如 要循环遍历
  • Angular2 - 使用服务的组件之间的交互

    我有两个组件 A 和 B 其中组件 A 包含一个按钮 我希望当用户单击此按钮时 在组件 B 上触发一个功能 a a
  • 混合模式程序集是针对运行时版本“v2.0.50727”构建的

    我收到以下异常 混合模式程序集是针对运行时版本 v2 0 50727 构建的 如果没有附加配置信息 则无法在 4 0 运行时中加载 因为我试图从我的 WPF 程序导出水晶报告 我已经在 app config 中添加了以下内容
  • TypeScript 类型不适用于扩展运算符

    我有一个 redux 风格的减速器 我正在使用 ngrx 它返回特定类型 当我在返回对象中使用展开运算符时 打字稿 linter 不会捕获无效属性 这是我的界面 interface MyState firstName string last
  • 框架内元素的选择器(具有相同的原点)

    我有一个具有以下结构的网页 index jsp包含 div test is here div 我需要一个 jQuery 选择器来直接访问div test 到目前为止我只能这样写 frames 0 document body 或这个 fram
  • 将 ARFaceGeometry 保存到 OBJ 文件

    在 iOS ARKit 应用程序中 我一直在尝试保存ARFaceGeometry数据到 OBJ 文件 我按照这里的解释 如何从 AVDepthData 制作 3D 模型 但是 OBJ 未正确创建 这是我所拥有的 func renderer
  • 在休眠中使用 inverse true

    我正在浏览 hibernate 文档并遇到了逆属性的概念 我是 Hibernate 的新手 所以我觉得很难正确理解这个概念 http docs jboss org hibernate orm 3 3 reference en US html
  • 在自定义 ListAdapter 类中显示 AlertDialog

    我很难处理显示AlertDialog自定义内ListView扩展了一个类BaseAdapter AlertDialog Builder alertbox new AlertDialog Builder getParent getApplic
  • 如何获取 Cassandra 中最后插入的行?

    我想获取 Cassandra 表中最后插入的行 如何获得 任何想法 我正在开发一个项目 用 cassandra 替换 mysql 我想摆脱所有 sql 查询并将它们全部写在 cassandra 中 只是为了传达一点理解 与所有 Cassan
  • 如何继承方法但具有不同的返回类型?

    给定以下课程 ClassA public ClassA DoSomethingAndReturnNewObject ClassB ClassA ClassC ClassA 有没有办法得到ClassB and ClassC继承方法但将返回类型
  • 如何在Delphi中使TImage透明?

    在表格上我有两个 TImage 顶部的 TImage 应该是透明的 这样我们就可以看到下面的内容 如何更改 TImage 透明度级别 Example 通常的方法是将所有图形绘制到一个目标画布 可以是 TImage 的位图 但即使有许多重叠的
  • iOS 7中UISearchDisplayController的全屏后台拦截触摸事件

    我有一个UITableview不占据整个屏幕 截屏 在 iOS 6 中一切正常 但是在 iOS 7 中 当用户搜索时 搜索结果表占据了整个视图 截屏 为了解决这个问题 我尝试按照中所述手动设置框架这个答案 现在外观是正确的 截屏 但现在显示
  • 如何将内存中的wav文件转换为mp3?

    我有一个在 Asp Net MVC 5 框架之上使用 C 编写的应用程序 我的目标是调用第三方服务来下载波形文件 然后我想把这个文件转换成mp3 最后 我想将 mp3 文件返回为 byte 以允许用户直接从内存下载它 这是我的代码最终的结果