Я использовал приведенный ниже код для преобразования звуковых файлов в ogg vorbis, но я не нашел в документации libsndfile, как установить битрейт выходного файла, который всегда равен 128 кбит / с. Можно ли изменить битрейт выходного файла, сгенерированного libsndfile?
#include <sndfile.hh>
#define BUFFER_LEN 4096
void convert(char *infilename, char *outfilename)
{
static double data[BUFFER_LEN];
SNDFILE *infile, *outfile;
SF_INFO sfinfo;
int readcount;
infile = sf_open(infilename, SFM_READ, &sfinfo);
sfinfo.format = SF_FORMAT_OGG | SF_FORMAT_VORBIS;
outfile = sf_open(outfilename, SFM_WRITE, &sfinfo);
while ((readcount = sf_read_double(infile, data, BUFFER_LEN)))
{
sf_write_double(outfile, data, readcount);
}
sf_close(infile);
sf_close(outfile);
}
В libsndfile нет возможности установить конкретный битрейт. Задавать конкретную постоянную скорость передачи битов это обычно плохая идея, так как постоянная скорость передачи битов, вероятно, будет слишком низкой для некоторых частей звукового сигнала и слишком высокой для других частей.
Однако с помощью libsndfile вы можете установить различные уровни сжатия, которые всегда используют переменный битрейт. Увидеть : http://www.mega-nerd.com/libsndfile/command.html#SFC_SET_VBR_ENCODING_QUALITY
Других решений пока нет …