我試圖執行下面的代碼,我發現here使用NAudio,ADTS AAC進行WAV轉碼,怎麼樣?
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(參數[0])輸出文件應該是支持* .wav(參數[1])。 我正在運行編譯後的代碼作爲控制檯應用程序,但我沒有得到任何錯誤,但它似乎掛起一旦它創建了0 KB大小的wav文件
我想知道是否有我丟失的東西或也許我需要進一步理解。
Windows正在將* .aac文件報告爲ADTS。
也許是我需要提取和重寫頭文件,但我對AAC根本不熟悉,所以如果認爲有必要,可以在這方面尋求一些指導。
當我嘗試打開與WMP的文件時,它說,它無法連接到服務器(建議編解碼器的問題),但是我可以用FFMPEG將其轉換爲wav文件沒有任何麻煩。使用FFMPEG對於我所看到的特定實現來說並不理想。
任何援助將不勝感激。
信息上的實際文件:
General
Complete name : C:\Users\....\AAC2WAV\bin\Debug\0cc409aa-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個通道
馬克,有趣的是,返回的wav文件數據在字節位置46,而不是44開頭我認爲這是由於子塊大小之中18而不是16.你能詳細說明爲什麼會出現這種情況,請詳細說明額外2字節的用途嗎? – Majickal
這是WAVEFORMAT和WAVEFORMATEX的區別 –
好的,謝謝,所以我們省略了WAVEFORMAT中的cbSize和額外數據,而不是[WAVEFORMATEX](https://wiki.multimedia.cx/index.php?title=WAVEFORMATEX)那些價值在哪裏。最近我看到了許多不同的標題長度,特別是從FFMPEG(aac> wav)的輸出中我注意到由於元數據導致的偏移量爲76字節。現在有道理。隊友的歡呼聲。 – Majickal