Вы должны закончить читать этот FAQ ... ссылка, которую вы нам даете, содержит ответы на все вопросы.
Однако существует как минимум один формат файла (AU), который специально предназначен для записи в канал.
Так что используйте AU вместо WAV.
Также убедитесь, что вы открываете объект SNDFILE с помощью sf_open_fd
, а не sf_open_virtual
(или sf_open
):
SNDFILE* sf_open_fd (int fd, int mode, SF_INFO *sfinfo, int close_desc) ;
SNDFILE* sf_open_virtual (SF_VIRTUAL_IO *sfvirtual, int mode, SF_INFO *sfinfo,
void *user_data) ;
Если вы используете sf_open_fd
, то libsndfile будет использовать fstat
, чтобы определить, является ли дескриптор файла конвейером или обычным файлом. Если вы используете sf_open_virtual
или sf_open
, это будет означать, что файл доступен для поиска. Это похоже на ошибку в libsndfile, но вы все равно должны использовать sf_open_fd
.
Сноска: Не открывать /dev/stdout
, чтобы получить стандартный вывод; он уже открыт, и нет необходимости открывать его снова. Используйте дескриптор файла STDOUT_FILENO
.