[Audacity][编译][步骤五]编译Audacity

来源:互联网 发布:网络军事评论员 编辑:程序博客网 时间:2024/05/21 08:57
1、配置可选功能
1)本地安装的帮助是可选的,但必须建立在Full-Release编译基础上,(安装程序中包含“帮助”文件夹,但zip发布版本中没有),Python库是必需的,可从http://www.python.org/download/下载。把python的安装路径需要添加到系统环境变量的path路径中。
在MS Visual Studio中启用“帮助”项目配置管理器(生成菜单),下载帮助手册到你本地的编译目录。如果需要更新本地已有手册,执行audacity\scripts\mw2html_audacity\wiki2htm.bat并re-build“帮助”项目。
2)如果需要支持除英语之外的其他语言,你需要配置并编译可选的 "locale" 项目,但必须建立在Full-Release编译基础上。此外你还需要下载 msgfmt.exe 下载地址:https://sourceforge.net/projects/cppcms/files/boost_locale/gettext_for_windows/。并把它丢在任意一个已经在环境变量Path可以找到的地方。例如C:\Windows
3) Audacity 中的部分功能在配置的时候设置为默认启用了,但运行的时候需要额外的第三方库依赖,如果想要调整配置,修改"win\configwin.h"即可。
4)增加ASIO支持,ASIO (from Steinberg) 是一种比标准的wmme速度更快的声卡接口协议,缺点是并不是所有的声卡驱动都支持ASIO协议。
ASIO是一个专有的、封闭的标准,我们并不能发布其SDK,也意味着我们无法发布支持ASIO的Audacity 版本,因为Audacity 基于GPL协议,我们需要发布所有的源代码。
你可以编译自己的支持ASIO的Audacity个人版本,抱歉,仅能供个人使用你无法违反协议发布。
ASIO SDK 下载  (http://www.steinberg.net/en/company/developers.html) 安装在本地之后设置一个变量名为ASIOSDK_DIR的环境变量指向该路径。

2、编译准备
1)Audacity 项目属性 - 》 VC++目录 -》包含目录 -》增加 $(WXWIN)\include
2)解决整形定义冲突
删除源码目录下所有的stdint.h文件
3)解决snprintf冲突
lib-src\portaudio-v19\src\hostapi\wdmks\pa_win_wdmks.c 修改
#ifdef _MSC_VER
#define snprintf _snprintf
#define vsnprintf _vsnprintf
#endif
#if (defined(_MSC_VER) && (_MSC_VER < 1900))
#define snprintf _snprintf
#define vsnprintf _vsnprintf
#endif
lib-src\portaudio-v19\src\hostapi\jack\pa_jack.c 修改
#if defined(WIN32)
#define snprintf _snprintf
#endif
#if (defined(_MSC_VER) && (_MSC_VER < 1900))
#define snprintf _snprintf
#endif
win\Projects\libsndfile\config.h修改
#define snprintf _snprintf
#if (defined(_MSC_VER) && (_MSC_VER < 1900))
#define snprintf _snprintf
#endif
src\export\ExportFFmpeg.cpp修改
#if defined(WIN32)
#define snprintf _snprintf
#endif
#if (defined(_MSC_VER) && (_MSC_VER < 1900))
#define snprintf _snprintf
#endif
lib-src\libnyquist\nyquist\sys\win\msvc\switches.h
#define snprintf _snprintf
#if (defined(_MSC_VER) && (_MSC_VER < 1900))
#define snprintf _snprintf
#endif
C:\work\audacity-master\lib-src\lv2\lilv\src\lilv_internal.h 修改
#ifdef _WIN32
#    include <windows.h>
#    define dlopen(path, flags) LoadLibrary(path)
#    define dlclose(lib)        FreeLibrary((HMODULE)lib)
#    ifdef _MSC_VER
#        define __func__ __FUNCTION__
#        define INFINITY DBL_MAX + DBL_MAX
#        define NAN      INFINITY - INFINITY
#        define snprintf _snprintf
#    endif

#ifdef _WIN32
#    include <windows.h>
#    define dlopen(path, flags) LoadLibrary(path)
#    define dlclose(lib)        FreeLibrary((HMODULE)lib)
#    ifdef _MSC_VER
#        define __func__ __FUNCTION__
#        define INFINITY DBL_MAX + DBL_MAX
#        define NAN      INFINITY - INFINITY
#        if _MSC_VER < 1900
# define snprintf _snprintf
#        endif
#    endif

lv2项目属性-》c/c++-》预处理器-》删除 snprintf=_snprintf

3、修改Audacity源码
//
//  wxPanelWrapper.h
//  Audacity
//
//  Created by Paul Licameli on 6/25/16.
//
//


#ifndef __AUDACITY_WXPANEL_WRAPPER__
#define __AUDACITY_WXPANEL_WRAPPER__


#include "../MemoryX.h"
#include <wx/panel.h>
#include <wx/dialog.h>


void wxTabTraversalWrapperCharHook(wxKeyEvent &event);
//
//template <typename Base>
//class wxTabTraversalWrapper : public Base
//{
//public:
//   template <typename... Args>
//   wxTabTraversalWrapper(Args&&... args)
//   : Base( std::forward<Args>(args)... )
//   //: Base()
//   {
//      this->Bind(wxEVT_CHAR_HOOK, wxTabTraversalWrapperCharHook);
//   }
//
//   ~wxTabTraversalWrapper()
//   {
//      this->Unbind(wxEVT_CHAR_HOOK, wxTabTraversalWrapperCharHook);
//   }
//};


class wxPanel;
//using wxPanelWrapper = wxTabTraversalWrapper<wxPanel>;


class wxDialog;
//using wxDialogWrapper = wxTabTraversalWrapper<wxDialog>;


class wxDialogWrapper : public wxDialog
{
public: 
wxDialogWrapper()
: wxDialog()
{
this->Bind(wxEVT_CHAR_HOOK, wxTabTraversalWrapperCharHook);
}


wxDialogWrapper(wxWindow *parent, wxWindowID id = wxID_ANY,
const wxString& title = "",
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxDEFAULT_DIALOG_STYLE,
const wxString& name = wxDialogNameStr)
: wxDialog(parent, id, title, pos, size, style, name)
{
this->Bind(wxEVT_CHAR_HOOK, wxTabTraversalWrapperCharHook);
}


~wxDialogWrapper()
{
this->Unbind(wxEVT_CHAR_HOOK, wxTabTraversalWrapperCharHook);
}
};




class wxPanelWrapper : public wxPanel
{
public:
template <typename... Args>
wxPanelWrapper(Args&&... args)
: wxPanel(std::forward<Args>(args)...)
{
this->Bind(wxEVT_CHAR_HOOK, wxTabTraversalWrapperCharHook);
}


~wxPanelWrapper()
{
this->Unbind(wxEVT_CHAR_HOOK, wxTabTraversalWrapperCharHook);
}
};


#endif

4、编译Audacity
启动VS并打开"audacity\win\audacity.sln"。你可以选择如下方式编译你想要的版本
* "Release" unicode 发布版本
* "Debug" unico的调试版本

5、Enjoy your self
0 0
原创粉丝点击