Я пытаюсь работать с Nyquist (платформа для музыкального программирования, см .: https://www.cs.cmu.edu/~music/nyquist/ или https://www.audacityteam.org/about/nyquist/) как отдельная программа, и она использует libsndfile (библиотеку для чтения и записи звука, см .:http://www.mega -nerd.com / libsndfile / ). Я делаю это на компьютере i686 GNU / Linux (Gentoo).
После успешной установки и запуска программы без ошибок,Я попытался сгенерировать звук с помощью одного из примеров, «(play (osc 60))», и встретился с этой ошибкой:
*** Fatal error : sizeof (off_t) != sizeof (sf_count_t)
*** This means that libsndfile was not configured correctly.
Дальнейшее изучение этого вопроса (и отправка письма автору) оказалось несколько полезным, но решение все еще далеко от моего понимания. Автор рекомендовал посмотреть /usr/include/sndfile.h, чтобы увидеть, как определяется sf_count_t, и (эта часть) моего файла идентична его:
/* The following typedef is system specific and is defined when libsndfile is
** compiled. sf_count_t will be a 64 bit value when the underlying OS allows
** 64 bit file offsets.
** On windows, we need to allow the same header file to be compiler by both GCC
** and the Microsoft compiler.
*/
#if (defined (_MSCVER) || defined (_MSC_VER))
typedef __int64 sf_count_t ;
#define SF_COUNT_MAX 0x7fffffffffffffffi64
#else
typedef int64_t sf_count_t ;
#define SF_COUNT_MAX 0x7FFFFFFFFFFFFFFFLL
#endif
Выше автор отмечает, что для «32-битного смещения» нет опции. Я не уверен, как мне поступить. Вот конкретный файл, который автор Nyquist рекомендует исследовать: https://github.com/erikd/libsndfile/blob/master/src/sndfile.h.inи вот энтисточник исходного кода: https://github.com/erikd/libsndfile
Вот некоторые соответствующие фрагменты ответа автора по электронной почте:
"Я предполагаю, что sf_count_t должен отображаться как 32-битный, и вы хотитеlibsndfile для использования 64-битных смещений файлов.Я использую nyquist / nylsf, который является локальной копией исходных текстов libsndfile - больше работы по поддержанию их в актуальном состоянии (и, вероятно, они таковыми не являются), но гораздо проще создавать и тестировать, когда у вас есть согласованная библиотека. "
"Я использую CMake и nyquist / CMakeLists.txt для сборки nyquist."
"Возможно, на одной 32-битной машине значение по умолчанию sf_count_t составляет 32 бита, но я не думаю, чтоNyquist поддерживает эту опцию. "
А вот исходный код Nyquist: http://svn.code.sf.net/p/nyquist/code/trunk/nyquist/
Эту проблему мне трудно решить, поскольку она состоит из нишевого варианта использования:относительно неясное программное обеспечение. Это также делает перспективы поддержки для этой проблемы немного тревожными. Я немного знаю C ++, но я далек от уверенности в том, что смогу решить эту проблему. Спасибо за чтение и счастливых праздников всем. Если у вас есть какие-либо предложенияПожалуйста, не стесняйтесь, даже с точки зрения форматирования или редактирования!