我正在尝试使用 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 不支持这个选项。”
这里是奈奎斯特的源代码:http: //svn.code.sf.net/p/nyquist/code/trunk/nyquist/
这个问题对我来说很难解决,因为它是由相对晦涩的软件的一个小众用例组成的。这也使得该问题的支持前景有些令人担忧。我知道一点 C++,但我对自己解决这个问题的能力没有信心。感谢大家的阅读,祝大家节日快乐。如果您有任何建议,即使是在格式或编辑方面,请不要犹豫!