将AAC转换为WAV

4
我已经在使用媒体基础框架API(感谢MFManagedEncode,详情请参见http://blogs.msdn.com/b/mf/archive/2010/02/18/mfmanagedencode.aspx)将wav格式转换为aac格式。虽然我还没有完全掌握其工作原理,但它确实可以正常工作,这让我很庆幸。
现在我发现另一种转码方式比较困难,尽管有一个相应的MF解码器(AAC解码器)。我找不到如何使用它的示例,而且我认为MSDN文档非常晦涩难懂,有人对此有经验吗?
最好有C#包装器。
谢谢。

找到一些额外的信息: http://msdn.microsoft.com/en-us/library/windows/desktop/dd757929(v=vs.85).aspx 还有 http://www.codeproject.com/Articles/459453/Code-to-stream-or-convert-MP3-WMA-to-PCM-WAV-in-Wi 虽然这些专门适用于Win8。但我相信其中包含了一些很好的东西。 - radsdau
那个解码Win 8链接很不错,我已经将其移植到C#和.NET 4,并希望很快将结果提交到NAudio中。我还没有尝试过AAC,但它在MP3方面表现非常出色。我希望能够结合一些来自MFManagedEncode的想法。 - Mark Heath
转换AAC到WAV在c#中的链接:http://www.codeproject.com/Articles/501521/How-to-convert-between-most-audio-formats-in-NET - user2272010
有许多方法可以将AAC解码为WAV(实际上是PCM),而股票[AAC解码器MFT / DMO](http://msdn.microsoft.com/en-us/library/windows/desktop/dd742784%28v=vs.85%29.aspx)是直接的方法,与分层包装相比也具有最小的开销。 MFT接口应该更或多或少有用(在C ++中,我更喜欢DMO)。您没有提供代码,因此很难确定您卡在哪里。 - Roman R.
2个回答

6

我一直成功地使用NAudio进行音频处理和抽象化。它可作为NuGet使用。它具有针对Media Foundation(和其他编码器的封装器。

以下是使用NAudio对AAC进行编码并将其转换回WAV的示例:

using System;
using NAudio.Wave;

namespace ConsoleApplication11
{
    class Program
    {
        static void Main(string[] args)
        {
            // convert source audio to AAC
            // create media foundation reader to read the source (can be any supported format, mp3, wav, ...)
            using (MediaFoundationReader reader = new MediaFoundationReader(@"d:\source.mp3"))
            {
                MediaFoundationEncoder.EncodeToAac(reader, @"D:\test.mp4");
            }

            // convert "back" to WAV
            // create media foundation reader to read the AAC encoded file
            using (MediaFoundationReader reader = new MediaFoundationReader(@"D:\test.mp4"))
            // resample the file to PCM with same sample rate, channels and bits per sample
            using (ResamplerDmoStream resampledReader = new ResamplerDmoStream(reader, 
                new WaveFormat(reader.WaveFormat.SampleRate, reader.WaveFormat.BitsPerSample, reader.WaveFormat.Channels)))
            // create WAVe file
            using (WaveFileWriter waveWriter = new WaveFileWriter(@"d:\test.wav", resampledReader.WaveFormat))
            {
                // copy samples
                resampledReader.CopyTo(waveWriter);
            }
        }
    }
}

有没有办法为内存处理提供MediaFoundationReader / MediaFoundationEncoder的流? - IlPADlI
也许这个链接对于流有所帮助:link - FaustsErbe

0

我想要将AAC解码为PCM/WAV,而不依赖于MediaFoundation,以便使代码易于在其他平台上移植。因此,我将JAAD从Java移植到了netstandard 2.0。它没有本地依赖项,并且我还包含了一个示例,说明如何使用它将AAC转换为WAV。您可以在这里找到它。它也可以作为nuget使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接