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

0

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

UPDATE: Когда я изменяю путь только к имени файла (например, 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);
}
Теги:
libsndfile

1 ответ

1
Лучший ответ

Из документов libsndfile:

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

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

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

  • 0
    Спасибо! Это дает мне ошибку «Нет такого файла или каталога». Но я знаю, что такого файла нет, я пытаюсь его создать. Когда я использую только имя файла (nevo.wav), это не дает мне этой ошибки, даже если я знаю, что файл также не существует.
  • 0
    Возможно, sf_open () не нравится использование '~'. Работает ли это, если вы указываете абсолютный путь (/home/<name>/Documents/hello.wav)?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню