簡體   English   中英

如何使用內存流、NAudio 和 LameMP3 將音頻 aiff 轉換為 MP3

[英]How convert audio aiff to MP3 using Memory stream, NAudio and LameMP3

我嘗試將 aiff 音頻文件從 IFormFile 轉換為 MP3 並將其上傳到 Azure 存儲。 我不明白 NAudio 的內存流是如何工作的……我不想在臨時文件中復制文件,而只想使用流。 是否可以 ?

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; 
      }
                                
   }

我認為下面的演示代碼可能對您有所幫助。

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 文件可以完美播放。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM