Ai-笔记:Ardour教程在Ubuntu下源代码编译安装专业级数字音频工作站——Ardour

Ardour界面

前言: Ardour是什么

一个专业级开源DAW(Digital Audio Workstation)。如果从它的源码自己编译安装,它可以没有限制地让用户使用和更新。如果想下载安装包安装,用户需要支付一次性费用或者月付订阅,这个有偿开源软件还是第一回让我真切地见识了Freeware的概念性,它强调的是自由,而不是免费,是商业软件在精神层面企及不到的高度。为什么说真切?!是因为Ardour的开发者没有公开软件的依赖库信息,不厚道,“想省钱吗?!自己摸索出那30个库吧!No Support!” 故意折磨人,要知道这会给安装造成很大难度,而这些障碍本是不必要的。咳,大家都很不容易。无论如何,如果有人坚持“nothing is for free”这种想法的,Ardour的专业程度仍旧是一个好理由去辩驳。使用开源软件是一个痛苦并快乐的过程,但是美好更多一些,比如和Blender一起成长。好,大家听录音混音制作人聊各种DAW,比如FL StudioLogicAbleton LivePro ToolsCubaseSonarAuditionReaper等等无数,[知乎有名词列举贴 ],现在请大家跟我安装这个专业级录音室水准的开源DAW——Ardour吧,一个冷门到通常无人提及连安装都很痛苦诞生12年甚至都没有半篇安装教程我保证国内都没几个人用的免费合法专业级数码音频工作产品,在我终于安装成功后,这篇教程势在必行。如果你听够了Logic Pro X预设插件弄出来的千篇一律的算法的声音的话(我是还没听出规律),稳扎稳打地用Ardour学基础吧,写自己的LUA脚本,选自己的插件做出些和别人不一样的声音,相信会比从商业软件入手有更深的理解(毕竟会被虐过,说起来容易...);或者你想使用Ardour,但不想付费购买安装包;或者你热爱Linux、开源和尊重版权;我想通过我的教程表达说,不管有没有用,我们可以有多一个另类的选择。这就开始我们的第一步吧!


0. 安装版本:

Ubuntu 16.04
Ardour 5.10.0 (Debug Build)
时间:2017年8月

1. 安装依赖库

把如下内容保存成ardour_dep.sh,然后再执行bash ardour_dep.sh
(补充:现在我相信可以去掉JACK1的两条相关命令,JACK2足够,但我自己没有实验过不能确定。)
*期间JACK会出现一个是否realtime的设置界面,选择默认选项No。
*软件特色:开发者根本没有提供任何官方文档列出依赖库列表,我该怎么办呢?
*解决方案:使用sudo apt-cache depends ardour查看ardour3的依赖库(幸好有),加上手动实验。

sudo apt-get -y install libboost-all-dev &&
sudo apt-get -y install libasound2-dev &&
sudo apt-get -y install libglib2.0-dev &&
sudo apt-get -y install glibmm-2.4-dev &&
sudo apt-get -y install libsndfile1-dev &&
sudo apt-get -y install libcurl4-gnutls-dev &&
sudo apt-get -y install liblo-dev &&
sudo apt-get -y install libtag1-dev &&
sudo apt-get -y install vamp-plugin-sdk &&
sudo apt-get -y install librubberband-dev &&
sudo apt-get -y install libfftw3-dev &&
sudo apt-get -y install libaubio-dev &&
sudo apt-get -y install libxml2-dev &&
sudo apt-get -y install libcwiid-dev &&
sudo apt-get -y install jack &&
sudo apt-get -y install libjack-dev &&
sudo apt-get -y install libjack-jackd2-dev &&
sudo apt-get -y install jackd &&
sudo apt-get -y install jackd2 &&
sudo apt-get -y install qjackctl &&
sudo apt-get -y install liblrdf0-dev &&
sudo apt-get -y install libsamplerate-dev &&
sudo apt-get -y install lv2-dev &&
sudo apt-get -y install libserd-dev &&
sudo apt-get -y install libsord-dev &&
sudo apt-get -y install libsratom-dev &&
sudo apt-get -y install liblilv-dev &&
sudo apt-get -y install libgtkmm-2.4-dev &&
sudo apt-get -y install libarchive-dev &&
sudo apt-get -y install libudev-dev

2. 编译

下载ardour源代码:https://github.com/Ardour/ardour
进入目录后执行./waf configure
检查是否所有依赖库已经找到并且configure成功,否则请看下文的Troubleshooting排查。
开始编译,执行./waf (需要20分钟到30分钟)
如果编译成功,恭喜你,执行安装命令sudo ./waf install,安装成功了。
如果编译出现问题退出(很可能会经历一个波折,但我已经找出它的解决方案),请看下文的Troubleshooting排查。

3. 使用

3.1 启用JACK

开启第一个终端,输入qjackctl,开启JACK连接工具,点击Setup,去掉Realtime前的勾。主界面点击Start,保持JACK连接工具正在运行地情况下,

JACK Connection Kit界面配置

3.2 启用Ardour
开启第二个终端,输入ardour5,就成功启用连接JACKArdour了。恭喜,你启动Ardour了,我们安装成功。
Ardour初始界面

4. TroubleShooting

4.1 如果configure出问题

解决方法:
请确认你的第一步的包依赖是不是全部执行了。
其中JACK最容易出问题,由于没有官方文档,搞不清楚状况,所以在第一步里我同时安装了JACK1JACK2。(现在我意识到,其实只要装JACK2就好了。)

sudo apt-get -y install jack &&
sudo apt-get -y install libjack-dev &&
sudo apt-get -y install libjack-jackd2-dev &&
sudo apt-get -y install jackd &&
sudo apt-get -y install jackd2 &&
sudo apt-get -y install qjackctl

如果任何依赖库出问题,(没有新意地说)请尝试运行sudo apt-get install --reinstall <name-of-packages>

4.2 编译遇到报错,编译中止

如果报错内容是:
/usr/bin/ld: cannot find -lgtkmm-2.4
/bin/ld: cannot find -lgdkmm-2.4
collect2: error: ld returned 1 exit status
看似ld没有找到,但是我们确实安装了libgtkmm-2.4-dev,不是么?
解决方法:
sudo apt-get install --reinstall libgtkmm-2.4-1v5
sudo apt-get install --reinstall libgtkmm-2.4-dev
然后在目录下执行,./waf(可以不用./waf clean
*如果你想看我的排查过程的话,可以看4.3,看似解决方案很容易但问题很具有迷惑性。

4.3 排查/usr/bin/ld: cannot find -lgtkmm-2.4的过程自述:

首先看到这问题,动态库没找到,并不是新鲜事。网上并没有直接关联这个问题的信息。
第一个想法是——库没安装对?我移除了libgtkmm-3.0,确认了一下 sudo apt-get -y install libgtkmm-2.4-dev是正确执行了的,甚至make clean重新来过,问题依旧存在。
随后我想到可能路径特殊,但搜索发现libgtkmm-2.4.so安然的在正常目录下,

搜索结果,我们需要的动态库好像是在的

没错,在的呢,怎么会没找到呢?那建一个符号链接吧
sudo ln -s /usr/lib/x86_64-linux-gnu/libgtkmm-2.4.so /usr/lib/lgtkmm-2.4.so
双保险一下,运行ldconfig,这下总该没问题了吧,但依旧报错。我非常郁闷,想不明白。直到去目录下看文件,发现了这个,

事实上它只是个空链接,链接目标并不存在,我们发现问题了

才明白libgtkmm-2.4.so只是一个符号链接,而链接到的动态库却根本不存在,难怪会报错,但是怎么会发生这个问题的呢,把搜索关键字变成“libgtkmm-2.4.so missing”之后,发现了inkscape在ubuntu下也会有相同问题[报错 ],一个历史遗留问题,解决方式是重新安装sudo apt-get install --reinstall libgtkmm-2.4-1v5
重新安装之后,再搜索,

终于出现目标动态库实体文件了,解决问题啦

果然,链接到的实体动态库libgtkmm-2.4.so.1.1.0出现了,问题也就解决了。

4.4 我机器上的./waf configure结果(仅供参考)

Setting top to                           : /home/aileen365/project/ardour 
Setting out to                           : /home/aileen365/project/ardour/build 
Checking for 'gcc' (c compiler)          : /usr/bin/gcc 
Checking for 'g++' (c++ compiler)        : /usr/bin/g++ 

Global Configuration 
 * Install prefix                                    : /usr/local 
 * Debuggable build                                  : True 
 * Build documentation                               : False 

Ardour Configuration 
 * Will build against private GTK dependency stack   : no 
 * Will rely on libintl built into libc              : yes 
 * Will build against private Ardour dependency stack : no 
Checking for function dlopen                         : yes 
Checking for boost library >= 1.39                   : ok 
Checking for program pkg-config                      : /usr/bin/pkg-config 
Checking for 'alsa'                                  : yes 
Checking for 'glib-2.0' >= 2.28                      : yes 
Checking for 'gthread-2.0' >= 2.2                    : yes 
Checking for 'glibmm-2.4' >= 2.32.0                  : yes 
Checking for 'sndfile' >= 1.0.18                     : yes 
Checking for 'giomm-2.4' >= 2.2                      : yes 
Checking for 'libcurl' >= 7.0.0                      : yes 
Checking for 'libarchive' >= 3.0.0                   : yes 
Checking for 'liblo' >= 0.26                         : yes 
Checking for 'taglib' >= 1.6                         : yes 
Checking for 'vamp-sdk' >= 2.1                       : yes 
Checking for 'vamp-hostsdk' >= 2.1                   : yes 
Checking for 'rubberband'                            : yes 
Checking for  sndfile RF64=>RIFF support             : Not found, no RF64-to-WAV support 
Checking for clang                                   : no 
Checking for 'libudev'                               : yes 
Checking for 'fftw3f'                                : yes 
Checking for 'aubio' >= 0.3.2                        : yes 
Checking for 'aubio' >= 0.4.0                        : yes 
Checking for 'libxml-2.0'                            : yes 
Checking for 'sigc++-2.0' >= 2.0                     : yes 
Checking for function getmntent                      : yes 
Checking for header execinfo.h                       : yes 
Checking for header unistd.h                         : yes 
Checking for function posix_memalign                 : yes 
Checking for function localtime_r                    : yes 
Checking for header boost/shared_ptr.hpp             : yes 
Checking for header boost/weak_ptr.hpp               : yes 
Checking for 'cppunit' >= 1.12.0                     : not found 
Checking for header boost/shared_ptr.hpp             : yes 
Checking for header boost/weak_ptr.hpp               : yes 
Checking for header boost/shared_ptr.hpp             : yes 
Checking for header boost/weak_ptr.hpp               : yes 
Checking for 'libusb-1.0'                            : not found 
You are missing the libusb-1.0 development package needed to compile Push2 support
Checking for header cwiid.h                          : yes 
Checking for header bluetooth/bluetooth.h            : yes 
Checking for 'cwiid' >= 0.6.00                       : yes 
Checking for 'jack' >= 0.121.0                       : yes 
Checking for JACK metadata API                       : ok 
Checking for jack_port_rename()                      : ok 
Checking for program gas,as,gcc                      : /usr/bin/as 
Checking for 'lrdf' >= 0.4.0                         : yes 
Checking for 'samplerate' >= 0.1.0                   : yes 
Checking for 'lv2' >= 1.0.0                          : yes 
Checking for 'lv2' >= 1.2.0                          : yes 
Checking for 'lv2' >= 1.10.0                         : yes 
Checking for 'serd-0' >= 0.14.0                      : yes 
Checking for 'sord-0' >= 0.8.0                       : yes 
Checking for 'sratom-0' >= 0.2.0                     : yes 
Checking for 'lilv-0' >= 0.14.0                      : yes 
Checking for 'lilv-0' >= 0.16.0                      : yes 
Checking for 'lilv-0' >= 0.19.2                      : yes 
Checking for 'lilv-0' >= 0.21.3                      : yes 
Checking for 'suil-0' >= 0.6.0                       : not found 
Checking for 'ogg' >= 1.1.2                          : yes 
Checking for 'flac' >= 1.2.1                         : yes 
Checking for header sys/vfs.h                        : yes 
Checking for header sys/statvfs.h                    : yes 
Checking for header unistd.h                         : yes 
Checking for header boost/shared_ptr.hpp             : yes 
Checking for header boost/weak_ptr.hpp               : yes 
Checking for header boost/scoped_ptr.hpp             : yes 
Checking for header boost/ptr_container/ptr_list.hpp : yes 
Checking for 'gtkmm-2.4' >= 2.8                      : yes 
Checking for 'gtk+-2.0' >= 2.12.1                    : yes 
Checking for 'samplerate' >= 0.1.7                   : yes 
Checking for 'fftw3f' >= 3.3.5                       : not found 
Checking for header boost/shared_ptr.hpp             : yes 
Checking for header boost/format.hpp                 : yes 
Checking for 'cairomm-1.0' >= 1.8.4                  : yes 
Checking for 'lv2' >= 1.0.0                          : yes 
Checking for 'cairo' >= 1.12.0                       : yes 
Checking for 'gthread-2.0' >= 2.10.1                 : yes 
Checking for 'gtk+-2.0' >= 2.18                      : yes 
Checking for 'x11' >= 1.1                            : yes 
Checking for 'pangoft2' >= 1.36.8                    : yes 
Checking for 'fontconfig'                            : yes 
Checking for header boost/shared_ptr.hpp             : yes 
Checking for header boost/weak_ptr.hpp               : yes 
session-utils depend on the dummy backend.
 * build session-utils                               : no 
Checking for 'dbus-1'                                : yes 
Checking for function readline                       : yes 
 * Build documentation                               : False 
 * Debuggable build                                  : True 
 * Export all symbols (backtrace)                    : False 
 * Install prefix                                    : /usr/local 
 * Strict compiler flags                             : [] 
 * Internal Shared Libraries                         : True 
 * Use External Libraries                            : False 
 * Library exports hidden                            : True 
 * Free/Demo copy                                    : False 
 * ALSA DBus Reservation                             : True 
 * Architecture flags                                : None 
 * Aubio                                             : True 
 * AudioUnits                                        : False 
 * Build target                                      : x86_64 
 * Canvas Test UI                                    : False 
 * Beatbox test app                                  : False 
 * CoreAudio                                         : False 
 * CoreAudio 10.5 compat                             : False 
 * Debug RT allocations                              : False 
 * Debug Symbols                                     : True 
 * Denormal exceptions                               : False 
 * FLAC                                              : True 
 * FPU optimization                                  : True 
 * Freedesktop files                                 : False 
 * Libjack linking                                   : link 
 * Libjack metadata                                  : True 
 * Lua Binding Doc                                   : False 
 * LV2 UI embedding                                  : False 
 * LV2 support                                       : True 
 * LV2 extensions                                    : True 
 * LXVST support                                     : True 
 * Mac VST support                                   : False 
 * OGG                                               : True 
 * Phone home                                        : True 
 * Process thread timing                             : False 
 * Program name                                      : Ardour 
 * Samplerate                                        : True 
 * PT format                                         : False 
 * PTW32 Semaphore                                   : False 
 * Threaded WaveViews                                : True 
 * Translation                                       : True 
 * Unit tests                                        : False 
 * Windows VST support                               : False 
 * Wiimote support                                   : True 
 * Windows key                                       : Mod4><Super 
 * PortAudio Backend                                 : False 
 * CoreAudio/Midi Backend                            : False 
 * ALSA Backend                                      : False 
 * Dummy backend                                     : False 
 * JACK Backend                                      : True 
 * Builstack                                         : -system- 
 * Mac i386 Architecture                             : False 
 * Mac ppc Architecture                              : False 
 * C compiler flags                                  : ['-I/home/aileen365/project/ardour', '-DWAF_BUILD', '-g', '-fshow-column', '-DARCH_X86', '-mmmx', '-msse', '-mfpmath=sse', '-DUSE_XMMINTRIN', '-DBUILD_SSE_OPTIMIZATIONS', '-DLXVST_64BIT', '-Wall', '-Wpointer-arith', '-Wcast-qual', '-Wcast-align', '-Wno-unused-parameter', '-DBOOST_SYSTEM_NO_DEPRECATED', '-D_ISOC9X_SOURCE', '-D_LARGEFILE64_SOURCE', '-D_FILE_OFFSET_BITS=64', '-DENABLE_NLS', '-DPROGRAM_NAME="Ardour"', u'-DPROGRAM_VERSION="5"', '-Wstrict-prototypes', '-Wmissing-prototypes'] 
 * C++ compiler flags                                : ['-I/home/aileen365/project/ardour', '-DWAF_BUILD', '-g', '-fshow-column', '-DARCH_X86', '-mmmx', '-msse', '-mfpmath=sse', '-DUSE_XMMINTRIN', '-DBUILD_SSE_OPTIMIZATIONS', '-DLXVST_64BIT', '-Wall', '-Wpointer-arith', '-Wcast-qual', '-Wcast-align', '-Wno-unused-parameter', '-DBOOST_SYSTEM_NO_DEPRECATED', '-D_ISOC9X_SOURCE', '-D_LARGEFILE64_SOURCE', '-D_FILE_OFFSET_BITS=64', '-DENABLE_NLS', '-DPROGRAM_NAME="Ardour"', u'-DPROGRAM_VERSION="5"', '-Woverloaded-virtual', '-Wno-unused-local-typedefs', '-D__STDC_LIMIT_MACROS', '-D__STDC_FORMAT_MACROS', '-DCANVAS_COMPATIBILITY', '-DCANVAS_DEBUG'] 
 * Linker flags                                      : [''] 

'configure' finished successfully (7.288s)

4.5 apt-cache depends ardour依赖库结果(仅供参考)

ardour
  Depends: ardour-data
  Depends: jackd
  Depends: libasound2
  Depends: libatkmm-1.6-1v5
  Depends: libaubio4
  Depends: libc6
  Depends: libcairo2
  Depends: libcairomm-1.0-1v5
  Depends: libcurl3-gnutls
  Depends: libcwiid1
  Depends: libfftw3-single3
  Depends: libfontconfig1
  Depends: libgcc1
  Depends: libgdk-pixbuf2.0-0
  Depends: libglib2.0-0
  Depends: libglibmm-2.4-1v5
  Depends: libgtk2.0-0
  Depends: libgtkmm-2.4-1v5
 |Depends: libjack-jackd2-0
  Depends: <libjack-0.116>
    libjack-jackd2-0
    libjack0
  Depends: liblilv-0-0
  Depends: liblo7
  Depends: liblrdf0
  Depends: libltc11
  Depends: libpango-1.0-0
  Depends: libpangocairo-1.0-0
  Depends: libpangoft2-1.0-0
  Depends: libpangomm-1.4-1v5
  Depends: librubberband2v5
  Depends: libsamplerate0
  Depends: libsigc++-2.0-0v5
  Depends: libsndfile1
  Depends: libstdc++6
  Depends: libsuil-0-0
  Depends: libtag1v5
  Depends: libvamp-hostsdk3v5
  Depends: libvamp-sdk2v5
  Depends: libx11-6
  Depends: libxml2
  Breaks: ardour3
 |Recommends: firefox
  Recommends: <www-browser>
    dillo
    edbrowse
    hv3
    lynx:i386
    lynx
    netsurf
    netsurf-fb
    netsurf-gtk
    qupzilla
    uzbl
    chimera2
    chromium-browser
    elinks
    epiphany-browser
    firefox
    konqueror
    links
    links2
    midori
    netrik
    rekonq
    surf
    w3m
    w3m:i386
    xemacs21-mule
    xemacs21-mule-canna-wnn
    xemacs21-nomule
  Replaces: ardour3

5. 尾声

好了,同学们,现在你们拥有了专业级的DAW,而且全免费。什么?不会录音和混音,什么都不懂?!好吧,如果读者你和我一样还是一个Sound Engineering菜鸟的话,我有一个可爱的开源DAW推荐,就是NON,它有很简短鲜明的文档,可以让读者短时间里明白Edit和Mixer,它和Ardour一样通过JACK录音,以及NON是一个麻雀虽小,五脏俱全的轻级DAW。哈哈,我绕了一圈,最后推荐了一个文档和安装都友好的NON。从NON的教程再回到Ardour会容易一些,Ardour也拥有更友好的界面,祝大家玩DAW愉快。在最后每个大牛都会说,DAW是不重要的,自己的理解和品味最重要。

NON界面

附录:Ardour手册

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,440评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,814评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,427评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,710评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,625评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,511评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,162评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,311评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,262评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,278评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,989评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,583评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,664评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,904评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,274评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,856评论 2 339

推荐阅读更多精彩内容