Я пытаюсь реализовать аудиозапись с использованием NAudio в Wav-файле, но по умолчанию битрейт, заданный классом WasapiLoopbackCapture, не может быть изменен программно.NAudio - Изменение битрейта записанного WAV-файла
Я записываю аудиовыход в MemoryStream (записанный в потоке фрагмент ниже). Однако битрейт по умолчанию, установленный WasapiLoobpackCapture, не соответствует моим потребностям.
Я хотел бы иметь битрейт 320KBPS, и я попытался преобразовать записанный файл программно, используя класс WaveFormatConversionStream, но я не мог заставить его работать.
WaveFormat targetFormat = WaveFormat.CreateCustomFormat(waveIn.WaveFormat.Encoding,
waveIn.WaveFormat.SampleRate, //SampleRate
waveIn.WaveFormat.Channels, //Channels
320000, //Average Bytes per Second
waveIn.WaveFormat.BlockAlign, //Block Align
waveIn.WaveFormat.BitsPerSample); //Bits per Sample
using (WaveStream inputStream = new RawSourceWaveStream(recordedStream, waveIn.WaveFormat))
{
try
{
using (var converter = new WaveFormatConversionStream(targetFormat, inputStream))
{
// ...
}
}
catch (Exception)
{
throw;
}
recordedStream.Dispose();
}
Я всегда получаю исключение преобразования «AcmNotPossible call acmStreamOpen». Как вы видите, я использую точно такой же формат, как записанный WAV-файл (Extension encoding, 44100 и т. Д.), За исключением битрейта, который ниже в целевом формате.
Каким будет правильное кодирование преобразования битрейта из файла Wav, содержащегося в MemoryStream? моя цель - получить файл 320KBPS.
Я заметил, что количество каналов в audioClient.MixFormat равно 4, глубина бит 32, а частота дискретизации - 44100 ... можете ли вы показать код, который позволит изменить глубину бит до 16 и количество каналов до 2? –
4-канальный звук довольно необычен. Вы либо выбросите два канала, если они не нужны, либо смешайте их в один из левого или правого канала. Я написал [статью] (http://www.codeproject.com/Articles/501521/How-to-convert-between-most-audio-formats-in-NET), в которой объясняется, как вы можете изменить глубину и количество каналов более подробно. –
Я попытался отбросить два канала, используя код, аналогичный функции StereoToMono, но я не смог получить хороший аудиовыход. Можете ли вы показать фрагмент кода, который на самом деле будет работать с 4 до 2 каналов? –