AFAIK нет, 4-битного формата PCM не неопределенных, это не имело бы большой смысл иметь 16 уровней громкости звука; качество было бы ужасным.
Хотя технически возможно, я не знаю приличного программного обеспечения (например, Wavelab), которое его поддерживает, но ваш собственный игрок может это сделать.
формула: blockAlign = channels * (bitsPerSample/8)
Таким образом, для моно 4-битном было бы: blockAlign = 1 * ((double)4/8) = 0.5
Обратите внимание на использование double
быть необходимо не до конца с 0
.
Но если вы посмотрите на определение единицы измерения блока ниже, то действительно не имеет смысла выравнивать байты 0.5
, нужно будет работать на уровне бит (болезненно и бесполезно, потому что при этом качестве, -сжатый ИКМ бы просто звук попало):
wBlockAlign
выравнивание блока (в байтах) данных формы сигнала. Воспроизведение программное обеспечение должно обрабатывать несколько байтов данных wBlockAlign при времени, поэтому значение wBlockAlign можно использовать для выравнивания буфера .
Ссылка:
http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/Docs/riffmci.pdf страница 59
Обход:
Если вам действительно нужно 4 бита, переключатель в формате ADPCM.
Спасибо. Кажется, файлы WAV определяют «ADPCM» как допустимый вариант, однако перечисление .NET в формате AudioFormat.EncodingFormat имеет только «Pcm», «ALaw» и «ULaw». Означает ли это, что я не могу генерировать файлы ADPCM WAV из .NET? – mcu
Я не думаю, что вы можете, но посмотрите на эту библиотеку: http://stackoverflow.com/questions/4917346/algorithm-for-converting-pcm-to-ima-adpcm – Aybe
Итак, 'bitsPerSample' имеет быть кратным 8? – mcu