[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
#define snprintf _snprintf
#define vsnprintf _vsnprintf
#endif
为
#if (defined(_MSC_VER) && (_MSC_VER < 1900))
#define snprintf _snprintf
#define vsnprintf _vsnprintf
#endif
#define snprintf _snprintf
#define vsnprintf _vsnprintf
#endif
lib-src\portaudio-v19\src\hostapi\jack\pa_jack.c 修改
#if defined(WIN32)
#define snprintf _snprintf
#endif
#define snprintf _snprintf
#endif
为
#if (defined(_MSC_VER) && (_MSC_VER < 1900))
#define snprintf _snprintf
#endif
#define snprintf _snprintf
#endif
win\Projects\libsndfile\config.h修改
#define snprintf _snprintf
为
#if (defined(_MSC_VER) && (_MSC_VER < 1900))
#define snprintf _snprintf
#endif
#define snprintf _snprintf
#endif
src\export\ExportFFmpeg.cpp修改
#if defined(WIN32)
#define snprintf _snprintf
#endif
#define snprintf _snprintf
#endif
为
#if (defined(_MSC_VER) && (_MSC_VER < 1900))
#define snprintf _snprintf
#endif
#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
#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
# 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
# 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
// 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的调试版本
* "Debug" unico的调试版本
5、Enjoy your self
0 0
- [Audacity][编译][步骤五]编译Audacity
- [Audacity][编译][步骤二]audacity编译步骤
- [Audacity][编译][步骤三]Audacity 相关源码下载
- [Audacity][编译][步骤四]项目依赖配置
- 编译audacity方法
- audacity的编译方法
- [Audacity][编译][步骤一]win10 vs2015 编译环境准备
- Audacity
- Audacity
- win7下编译开源软件audacity
- Windows下Visual studio 2013 编译 Audacity
- 如何编译稳定版本的Audacity 1.2.6 (windows)
- 在windows xp上编译Audacity 1.2.6
- Audacity在RHEL5上的源码编译安装
- linux下编译安装音频处理audacity-2.0.3教程
- Audacity軟體介紹與教學
- [Audacity][帮助手册][手册内容]认识Audacity
- Audacity -open source analyze
- Java基础学习笔记:(二)数据类型
- 入门经典_Chap04_题解总结
- ~小游戏开发——迷宫(普通版)~
- 一文弄懂神经网络中的反向传播法——BackPropagation
- 在android studio中怎么使用,非完全点9图、非标准点9图
- [Audacity][编译][步骤五]编译Audacity
- git 使用教程
- 第X大的数
- 10 多态 | 数组内容比较 | 单态模式
- 【PMP】Head First PMP 学习笔记 第九章 人力资源管理
- Day001:Copy List with Random Pointer
- 推导:从傅里叶级数展开到傅里叶变换
- 77:Convert Sorted List to Binary Search Tree
- js---初级知识点