首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用内存流、NAudio和LameMP3将音频aiff转换为MP3

如何使用内存流、NAudio和LameMP3将音频aiff转换为MP3
EN

Stack Overflow用户
提问于 2020-11-24 06:21:34
回答 1查看 123关注 0票数 1

我尝试将一个音频文件从IFormFile转换为MP3,并将其上传到Azure Storage。我不明白NAudio的内存流是如何工作的.我不想复制临时文件中的文件,只想使用streams。有可能吗?

代码语言:javascript
复制
using (var retMs = new MemoryStream())
{
   file.CopyTo(retMs);
   var fileBytes = retMs.ToArray();
   string s = Convert.ToBase64String(fileBytes);

    using (var ms = new MemoryStream(fileBytes))
    using (var reader = new AiffFileReader(ms))
    using (var writer = new LameMP3FileWriter(retMs, reader.WaveFormat, 128))
    {
       reader.CopyTo(writer);

       var result = await _blobService.UploadFileBlobAsync(
                              reader,
                              "audio/mpeg3",
                              "fr2.mp3");

       toReturn = result.AbsoluteUri; 
      }
                                
   }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-24 15:27:14

我认为下面的演示代码可能会对你有所帮助。

代码语言:javascript
复制
using Azure.Storage.Blobs;
using NAudio.Lame;
using NAudio.Wave;
using System;
using System.IO;

namespace blobUpload
{
    class Program
    {
        static void Main(string[] args)
        {
            string containerName = "<container name>";
            string blobName = "test.mp3";
            string storageConnStr = "<storage account conn str>";

            var blobServiceClient = new BlobServiceClient(storageConnStr);
            var blobClient = blobServiceClient.GetBlobContainerClient(containerName).GetBlobClient(blobName);

            using (var retMs = new MemoryStream())
            {
                FileStream inputfileStream = new FileStream(@"<aiff file path>", FileMode.Open, FileAccess.Read);
                inputfileStream.CopyTo(retMs);
                var fileBytes = retMs.ToArray();
                
                var bytes = ConvertWavToMp3(fileBytes);

                blobClient.UploadAsync(new MemoryStream(bytes)).GetAwaiter().GetResult();

            }

        }

        public static byte[] ConvertWavToMp3(byte[] wavFile)
        {

            using (var retMs = new MemoryStream())
            using (var ms = new MemoryStream(wavFile))
            using (var rdr = new AiffFileReader(ms))
            using (var wtr = new LameMP3FileWriter(retMs, rdr.WaveFormat, 128))
            {
                rdr.CopyTo(wtr);
                return retMs.ToArray();
            }

       }
    }

结果:

我已经在我这边测试过了,这个.MP3文件可以完美地播放。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64977409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档