使用NAudio,ADTS AAC转WAV,如何?

Using NAudio, ADTS AAC to WAV Transcoding, how to?

我正在尝试实现我发现的以下代码 here

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Media;
using NAudio.Wave;


namespace AAC2WAV
{
    class Program
    {
        static void Main(string[] args)
        {
            // create media foundation reader to read the AAC encoded file
            using (MediaFoundationReader reader = new MediaFoundationReader(args[0]))
            // 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(args[1], resampledReader.WaveFormat))
            {
                // copy samples
                resampledReader.CopyTo(waveWriter);
            }

        }
    }
}

输入文件是*.aac (args[0]) 输出文件应该是*.wav (args[1])。 我是 运行 作为控制台应用程序的编译代码,我没有收到任何错误,但它似乎只是在创建 0 KB 大小的 wav 文件后挂起

我想知道我是否遗漏了什么或者我需要进一步了解的东西。

Windows 将 *.aac 文件报告为 ADTS。

也许是我需要提取和重写 header,但我对 AAC 一点都不熟悉,所以如果认为有必要,我会寻求这方面的一些指导。

当我尝试使用 WMP 打开文件时,它说它无法连接到服务器 (提示编解码器问题),但是我可以使用 FFMPEG 将其转换为 wav 文件而不用任何麻烦。对于我正在查看的特定实现,使用 FFMPEG 并不理想。

如有任何帮助,我们将不胜感激。


实际文件信息:

General 
Complete name : C:\Users\....\AAC2WAV\bin\Debug[=11=]cc409aa-f66c-457a-ac10-6286509ec409.aac 
Format : ADIF 
Format/Info : Audio Data Interchange Format 
File size : 180 KiB 
Overall bit rate mode : Constant 

Audio 
Format : AAC 
Format/Info : Advanced Audio Codec 
Format profile : Main 
Bit rate mode : Constant 
Channel(s) : 14 channels 
Channel positions : , Back: 14 
Sampling rate : 96.0 kHz 
Frame rate : 93.750 FPS (1024 spf) 
Compression mode : Lossy 
Stream size : 180 KiB (100%) 

使用以下文件从文件收集的信息:MediaInfo

我应该在这里补充一点,我认为上述信息的下半部分是不正确的。 采样率不是96k而是22050而且只有1个通道

您不需要重采样器 - MediaFoundationReader 已经 returns PCM。您还应该使用 WaveFileWriter.CreateWaveFile

这应该是您所需要的:

using (var reader = new MediaFoundationReader("myfile.aac"))
{
    WaveFileWriter.CreateWaveFile("pcm.wav", reader);
}