Запись в wav-файл с использованием libsndfile

У меня проблемы с записью короткого буфера в файл WAV на моем HD. Я следовал нескольким учебникам, но все они дают разные способы сделать это. Во всяком случае, так я это реализовал, но по какой-то причине он не работает. Когда я пытаюсь распечатать результат outfileЯ получаю 0и ничего не записано на диск. Кроме того, я пробовал разные пути, иногда с, а иногда без имени файла.

ОБНОВЛЕНИЕ: Когда я изменяю путь только к имени файла (например, hello.wav и не ~/Documents/hello.wav), распечатывая outfile возвращает ячейку памяти, такую ​​как 0x2194000,

void gilbertAnalysis::writeWAV(float * buffer, int bufferSize){
    SF_INFO sfinfo ;
    sfinfo.channels = 1;
    sfinfo.samplerate = 44100;
    sfinfo.format = SF_FORMAT_WAV | SF_FORMAT_PCM_16;

    const char* path = "~/Documents/hello.wav";

    SNDFILE * outfile = sf_open(path, SFM_WRITE, &sfinfo);
    sf_count_t count = sf_write_float(outfile, &buffer[0], bufferSize) ;
    sf_write_sync(outfile);
    sf_close(outfile);
}

2 ответа

Решение

Из документации libsndfile:

В случае успеха функция sf_open возвращает ненулевой указатель, который должен быть передан в качестве первого параметра всем последующим вызовам libsndfile, связанным с этим аудиофайлом. В случае неудачи функция sf_open возвращает нулевой указатель. Объяснение ошибки можно получить, передав NULL в sf_strerror.

Если outfile 0x2194000 и не ноль, то вы, вероятно, открыли файл правильно.

Попробуйте использовать sf_strerror(), чтобы увидеть, какая ошибка возникла, когда вы указали полный путь к файлу, а не только имя файла.

Тильда (~) в именах файлов заменяется оболочкой на домашний каталог. Для библиотечных функций путь к файлу должен быть полным, абсолютным или относительным.

Другие вопросы по тегам