Я пытаюсь реализовать следующий код, который я нашел hereИспользование NAudio, ADTS AAC для WAV Transcoding, как?
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]). Я запускаю выполненный код в качестве консольного приложения, и я не получаю никаких ошибок, однако он просто кажется зависающим, когда он создает файл wav с размером 0 КБ.
Мне интересно, есть ли что-то, что мне не хватает или возможно, кое-что, что мне нужно для дальнейшего понимания.
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
Я должен добавить, что нижняя часть выше информация неверна я считаю. Частота дискретизации не равна 96 Кб, а есть только 1 канал
Марк, Интересно, что возвращаемые данные WAV файл начинается в положении байта 46, а не 44. Я вижу, что это из-за размера subchunk существа 18, а не 16. Можете ли вы объяснить, почему это так, и где используются дополнительные 2 байта? – Majickal
Это разница между WAVEFORMAT и WAVEFORMATEX –
ОК, спасибо, поэтому мы опускаем cbSize и дополнительные данные в WAVEFORMAT, а не в [WAVEFORMATEX] (https://wiki.multimedia.cx/index.php?title=WAVEFORMATEX) где эти значения присутствуют. Недавно я видел несколько разных длин заголовков, в частности, из вывода FFMPEG (aac> wav), где я заметил смещение 76 байтов из-за метаданных. Теперь имеет смысл. Приветственный помощник. – Majickal