前言: Ardour是什么

一个专业级开源DAW(Digital Audio Workstation)。如果从它的源码自己编译安装,它可以没有限制地让用户使用和更新。如果想下载安装包安装,用户需要支付一次性费用或者月付订阅,这个有偿开源软件还是第一回让我真切地见识了 Freeware 的概念性,它强调的是自由,而不是免费,是商业软件在精神层面企及不到的高度。为什么说真切?!是因为 Ardour 的开发者没有公开软件的依赖库信息,不厚道,“想省钱吗?!自己摸索出那30个库吧!No Support!” 故意折磨人,要知道这会给安装造成很大难度,而这些障碍本是不必要的。咳,大家都很不容易。无论如何,如果有人坚持 “nothing is for free” 这种想法的, Ardour 的专业程度仍旧是一个好理由去辩驳。使用开源软件是一个痛苦并快乐的过程,但是美好更多一些,比如和 Blender 一起成长。好,大家听录音混音制作人聊各种DAW,比如 FL Studio Logic Ableton Live Pro Tools Cubase Sonar Audition Reaper 等等无数,[ 知乎有名词列举贴 ],现在请大家跟我安装这个专业级录音室水准的开源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最容易出问题,由于没有官方文档,搞不清楚状况,所以在第一步里我同时安装了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
    lynx:i386
    netsurf
    netsurf-fb
    netsurf-gtk
    qupzilla
    chimera2
    chromium-browser
    elinks
    epiphany-browser
    firefox
    konqueror
    links
    links2
    midori
    netrik
    rekonq
    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是不重要的,自己的理解和品味最重要。