我尝试将一个音频文件从IFormFile转换为MP3,并将其上传到Azure Storage。我不明白NAudio的内存流是如何工作的.我不想复制临时文件中的文件,只想使用streams。有可能吗?
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;
}
}发布于 2020-11-24 15:27:14
我认为下面的演示代码可能会对你有所帮助。
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文件可以完美地播放。
https://stackoverflow.com/questions/64977409
复制相似问题