1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-20 14:20:06 +02:00

Merge branch 'master' into scrubbing

This commit is contained in:
Paul-Licameli 2015-04-21 17:50:59 -04:00
commit a3f564bf98
118 changed files with 11304 additions and 863 deletions

View File

@ -259,12 +259,14 @@ public:
{
val.Replace(wxT("\\"), wxT("\\\\"), true);
val.Replace(wxT("\""), wxT("\\\""), true);
val.Replace(wxT("\n"), wxT("\\n"), true);
return val;
}
wxString Unescape(wxString val)
{
val.Replace(wxT("\\n"), wxT("\n"), true);
val.Replace(wxT("\\\""), wxT("\""), true);
val.Replace(wxT("\\\\"), wxT("\\"), true);

View File

@ -93,8 +93,8 @@ public:
virtual ~EffectHostInterface() {};
virtual double GetDefaultDuration() = 0;
virtual double GetDuration() = 0;
virtual bool SetDuration(double seconds) = 0;
virtual double GetDuration(bool *isSelection = NULL) = 0;
virtual void SetDuration(double seconds) = 0;
virtual bool Apply() = 0;
virtual void Preview() = 0;

View File

@ -8,7 +8,7 @@ subdir = po
top_builddir = ..
# These options get passed to xgettext.
XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ --keyword=wxTRANSLATE
XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ --keyword=XO
# This is the copyright holder that gets inserted into the header of the
# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding

View File

@ -23,6 +23,7 @@ src/AudacityLogger.cpp
src/AudacityLogger.h
src/AudioIO.cpp
src/AudioIO.h
src/AudioIOListener.h
src/AutoRecovery.cpp
src/AutoRecovery.h
src/BatchCommandDialog.cpp
@ -41,8 +42,12 @@ src/CrossFade.cpp
src/CrossFade.h
src/Dependencies.cpp
src/Dependencies.h
src/DeviceChange.cpp
src/DeviceChange.h
src/DeviceManager.cpp
src/DeviceManager.h
src/Diags.cpp
src/Diags.h
src/DirManager.cpp
src/DirManager.h
src/Dither.cpp
@ -121,12 +126,14 @@ src/RealFFTf48x.cpp
src/RealFFTf48x.h
src/Resample.cpp
src/Resample.h
src/RevisionIdent.h
src/RingBuffer.cpp
src/RingBuffer.h
src/SampleFormat.cpp
src/SampleFormat.h
src/Screenshot.cpp
src/Screenshot.h
src/SelectedRegion.cpp
src/SelectedRegion.h
src/Sequence.cpp
src/Sequence.h
@ -168,6 +175,7 @@ src/TrackPanelAx.h
src/TrackPanelListener.h
src/UndoManager.cpp
src/UndoManager.h
src/ViewInfo.cpp
src/ViewInfo.h
src/VoiceKey.cpp
src/VoiceKey.h
@ -343,6 +351,7 @@ src/effects/VST/VSTEffect.h
src/effects/VST/aeffectx.h
src/effects/Wahwah.cpp
src/effects/Wahwah.h
src/effects/audiounits/AudioUnitCocoaHelper.h
src/effects/audiounits/AudioUnitEffect.cpp
src/effects/audiounits/AudioUnitEffect.h
src/effects/ladspa/LadspaEffect.cpp

View File

@ -864,6 +864,7 @@
28884971131B6CF600B59735 /* vi.po in Sources */ = {isa = PBXBuildFile; fileRef = 28884940131B6CF600B59735 /* vi.po */; };
28884972131B6CF600B59735 /* zh_TW.po in Sources */ = {isa = PBXBuildFile; fileRef = 28884941131B6CF600B59735 /* zh_TW.po */; };
28884973131B6CF600B59735 /* zh.po in Sources */ = {isa = PBXBuildFile; fileRef = 28884942131B6CF600B59735 /* zh.po */; };
2888A1631AE25F9A00E06FDC /* Diags.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2888A1611AE25F9A00E06FDC /* Diags.cpp */; };
288A544B1346D1BA0050D774 /* chanmap.c in Sources */ = {isa = PBXBuildFile; fileRef = 288A54481346D1BA0050D774 /* chanmap.c */; };
288A544C1346D1BA0050D774 /* chanmap.h in Headers */ = {isa = PBXBuildFile; fileRef = 288A54491346D1BA0050D774 /* chanmap.h */; };
288A544D1346D1BA0050D774 /* id3.c in Sources */ = {isa = PBXBuildFile; fileRef = 288A544A1346D1BA0050D774 /* id3.c */; };
@ -936,6 +937,7 @@
28DA07390E4F5CEC003933C5 /* ExportFFmpegDialogs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 28DA07380E4F5CEC003933C5 /* ExportFFmpegDialogs.cpp */; };
28DABFBE0FF19DB100AC7848 /* RealFFTf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 28DABFBC0FF19DB100AC7848 /* RealFFTf.cpp */; };
28DB34790FDC2C5D0011F589 /* ResponseQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 28DB34780FDC2C5D0011F589 /* ResponseQueue.cpp */; };
28DDE3A21AE3771100C784FE /* ViewInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 28DDE3A11AE3771100C784FE /* ViewInfo.cpp */; };
28DE72AE10388583007E18EC /* PreferenceCommands.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 28DE72AA10388583007E18EC /* PreferenceCommands.cpp */; };
28DE72AF10388583007E18EC /* SetTrackInfoCommand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 28DE72AC10388583007E18EC /* SetTrackInfoCommand.cpp */; };
28DE72B2103885AA007E18EC /* TimeWarper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 28DE72B0103885AA007E18EC /* TimeWarper.cpp */; };
@ -2584,6 +2586,8 @@
28884940131B6CF600B59735 /* vi.po */ = {isa = PBXFileReference; explicitFileType = sourcecode; fileEncoding = 5; name = vi.po; path = ../locale/vi.po; sourceTree = SOURCE_ROOT; };
28884941131B6CF600B59735 /* zh_TW.po */ = {isa = PBXFileReference; explicitFileType = sourcecode; fileEncoding = 5; name = zh_TW.po; path = ../locale/zh_TW.po; sourceTree = SOURCE_ROOT; };
28884942131B6CF600B59735 /* zh.po */ = {isa = PBXFileReference; explicitFileType = sourcecode; fileEncoding = 5; name = zh.po; path = ../locale/zh.po; sourceTree = SOURCE_ROOT; };
2888A1611AE25F9A00E06FDC /* Diags.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Diags.cpp; sourceTree = "<group>"; };
2888A1621AE25F9A00E06FDC /* Diags.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Diags.h; sourceTree = "<group>"; };
288A54481346D1BA0050D774 /* chanmap.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = chanmap.c; sourceTree = "<group>"; };
288A54491346D1BA0050D774 /* chanmap.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = chanmap.h; sourceTree = "<group>"; };
288A544A1346D1BA0050D774 /* id3.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = id3.c; sourceTree = "<group>"; };
@ -2695,6 +2699,7 @@
28DABFBD0FF19DB100AC7848 /* RealFFTf.h */ = {isa = PBXFileReference; fileEncoding = 5; indentWidth = 3; lastKnownFileType = sourcecode.c.h; path = RealFFTf.h; sourceTree = "<group>"; tabWidth = 3; };
28DB34770FDC2C5D0011F589 /* ResponseQueue.h */ = {isa = PBXFileReference; fileEncoding = 5; indentWidth = 3; lastKnownFileType = sourcecode.c.h; path = ResponseQueue.h; sourceTree = "<group>"; tabWidth = 3; };
28DB34780FDC2C5D0011F589 /* ResponseQueue.cpp */ = {isa = PBXFileReference; fileEncoding = 5; indentWidth = 3; lastKnownFileType = sourcecode.cpp.cpp; path = ResponseQueue.cpp; sourceTree = "<group>"; tabWidth = 3; };
28DDE3A11AE3771100C784FE /* ViewInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ViewInfo.cpp; sourceTree = "<group>"; };
28DE72AA10388583007E18EC /* PreferenceCommands.cpp */ = {isa = PBXFileReference; fileEncoding = 5; indentWidth = 3; lastKnownFileType = sourcecode.cpp.cpp; path = PreferenceCommands.cpp; sourceTree = "<group>"; tabWidth = 3; };
28DE72AB10388583007E18EC /* PreferenceCommands.h */ = {isa = PBXFileReference; fileEncoding = 5; indentWidth = 3; lastKnownFileType = sourcecode.c.h; path = PreferenceCommands.h; sourceTree = "<group>"; tabWidth = 3; };
28DE72AC10388583007E18EC /* SetTrackInfoCommand.cpp */ = {isa = PBXFileReference; fileEncoding = 5; indentWidth = 3; lastKnownFileType = sourcecode.cpp.cpp; path = SetTrackInfoCommand.cpp; sourceTree = "<group>"; tabWidth = 3; };
@ -3869,6 +3874,8 @@
28D000A41A32920C00367B21 /* DeviceChange.h */,
8484F31213086237002DF7F0 /* DeviceManager.cpp */,
8484F31313086237002DF7F0 /* DeviceManager.h */,
2888A1611AE25F9A00E06FDC /* Diags.cpp */,
2888A1621AE25F9A00E06FDC /* Diags.h */,
1790AFF709883BFD008A330A /* DirManager.cpp */,
1790AFF809883BFD008A330A /* DirManager.h */,
1790AFF909883BFD008A330A /* Dither.cpp */,
@ -3997,6 +4004,7 @@
2803C8B619F35AA000278526 /* TrackPanelListener.h */,
1790B0F209883BFD008A330A /* UndoManager.cpp */,
1790B0F309883BFD008A330A /* UndoManager.h */,
28DDE3A11AE3771100C784FE /* ViewInfo.cpp */,
1790B0F609883BFD008A330A /* ViewInfo.h */,
1790B0F709883BFD008A330A /* VoiceKey.cpp */,
1790B0F809883BFD008A330A /* VoiceKey.h */,
@ -7646,6 +7654,8 @@
28285C801A27A81600BC2205 /* AudioUnitCocoaHelper.mm in Sources */,
28D000A51A32920C00367B21 /* DeviceChange.cpp in Sources */,
28D8425C1AD8D69D00551353 /* SelectedRegion.cpp in Sources */,
2888A1631AE25F9A00E06FDC /* Diags.cpp in Sources */,
28DDE3A21AE3771100C784FE /* ViewInfo.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};

View File

@ -0,0 +1,20 @@
At this time, the newest SDK version that Audacity can build with
is 10.6. To build Audacity using Xcode 5.1 or newer, you need
to extract the 10.6 SDK from an earlier version of Xcode.
In the instructions below, Xcode 4.3.3 (for the 10.6 SDK) and
Xcode 5.1.1 will be used. Xcode 6.1.1 and 6.3 have been verified
to work as well.
1) Download Xcode 5.1.1 or greater and install it to /Applications
2) Download Xcode 4.3.3 and open it in Finder
3) Right click the "Xcode.app" bundle and select "Show Package Contents"
4) Navigate down the directories to get to:
Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/
5) Copy the MacOSX10.6.sdk folder to:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/
That's it. You can now build using the Xcode project in this directory.

File diff suppressed because it is too large Load Diff

View File

@ -155,4 +155,7 @@ void QuitAudacity();
// This macro is used widely, so declared here.
#define QUANTIZED_TIME(time, rate) ((double)((sampleCount)floor(((double)(time) * (rate)) + 0.5))) / (rate)
// Marks strings for extraction only...must use wxGetTranslation() to translate.
#define XO(s) wxT(s)
#endif // __AUDACITY_H__

View File

@ -99,6 +99,12 @@ It handles initialization and termination by subclassing wxApp.
#include "import/Import.h"
#if defined(EXPERIMENTAL_CRASH_REPORT)
#include <wx/debugrpt.h>
#include <wx/evtloop.h>
#include <wx/textdlg.h>
#endif
#ifdef EXPERIMENTAL_SCOREALIGN
#include "effects/ScoreAlignDialog.h"
#endif
@ -184,6 +190,26 @@ It handles initialization and termination by subclassing wxApp.
# pragma comment(lib, "libvamp")
# endif
# if defined(__WXDEBUG__)
# define D "d"
# else
# define D ""
# endif
# if wxCHECK_VERSION(3, 1, 0)
# define V "31"
# elif wxCHECK_VERSION(3, 0, 0)
# define V "30"
# else
# define V "28"
# endif
# if defined(EXPERIMENTAL_CRASH_REPORT)
# pragma comment(lib, "wxmsw" V "u" D "_qa")
# endif
# undef V
# undef D
#endif //(__WXMSW__)
#include "../images/AudacityLogoWithName.xpm"
@ -925,7 +951,9 @@ bool AudacityApp::ShouldShowMissingAliasedFileWarning()
AudacityLogger *AudacityApp::GetLogger()
{
return static_cast<AudacityLogger *>(wxLog::GetActiveTarget());
// Use dynamic_cast so that we get a NULL ptr if we haven't yet
// setup our logger.
return dynamic_cast<AudacityLogger *>(wxLog::GetActiveTarget());
}
void AudacityApp::InitLang( const wxString & lang )
@ -984,12 +1012,60 @@ void AudacityApp::InitLang( const wxString & lang )
Internat::Init();
}
// Only used when checking plugins
void AudacityApp::OnFatalException()
{
#if defined(EXPERIMENTAL_CRASH_REPORT)
GenerateCrashReport(wxDebugReport::Context_Exception);
#endif
exit(-1);
}
#if defined(EXPERIMENTAL_CRASH_REPORT)
void AudacityApp::GenerateCrashReport(wxDebugReport::Context ctx)
{
wxDebugReportCompress rpt;
rpt.AddAll(ctx);
wxFileName fn(FileNames::DataDir(), wxT("audacity.cfg"));
rpt.AddFile(fn.GetFullPath(), wxT("Audacity Configuration"));
rpt.AddFile(FileNames::PluginRegistry(), wxT("Plugin Registry"));
rpt.AddFile(FileNames::PluginSettings(), wxT("Plugin Settings"));
if (ctx == wxDebugReport::Context_Current)
{
rpt.AddText(wxT("audiodev.txt"), gAudioIO->GetDeviceInfo(), wxT("Audio Device Info"));
}
AudacityLogger *logger = GetLogger();
if (logger)
{
rpt.AddText(wxT("log.txt"), logger->GetLog(), wxT("Audacity Log"));
}
bool ok = wxDebugReportPreviewStd().Show(rpt);
#if defined(__WXMSW__)
wxEventLoop::SetCriticalWindow(NULL);
#endif
if (ok && rpt.Process())
{
wxTextEntryDialog dlg(NULL,
_("Report generated to:"),
_("Audacity Support Data"),
rpt.GetCompressedFileName(),
wxOK | wxCENTER);
dlg.ShowModal();
wxLogMessage(wxT("Report generated to: %s"),
rpt.GetCompressedFileName().c_str());
rpt.Reset();
}
}
#endif
#if defined(__WXGTK__)
// On wxGTK, there's a focus issue where dialogs do not automatically pass focus
// to the first child. This means that you can use the keyboard to navigate within
@ -1014,6 +1090,15 @@ int AudacityApp::FilterEvent(wxEvent & event)
}
#endif
AudacityApp::AudacityApp()
{
#if defined(EXPERIMENTAL_CRASH_REPORT)
#if defined(wxUSE_ON_FATAL_EXCEPTION) && wxUSE_ON_FATAL_EXCEPTION
wxHandleFatalExceptions();
#endif
#endif
}
// The `main program' equivalent, creating the windows and returning the
// main frame
bool AudacityApp::OnInit()
@ -1291,6 +1376,21 @@ Click the 'Help' button for known issue."),
Sequence::SetMaxDiskBlockSize(lval);
}
wxString fileName;
if (parser->Found(wxT("d"), &fileName))
{
AutoSaveFile asf;
if (asf.Decode(fileName))
{
wxPrintf(_("File decoded successfully\n"));
}
else
{
wxPrintf(_("Decoding failed\n"));
}
exit(1);
}
// No Splash screen on wx3 whislt we sort out the problem
// with showing a dialog AND a splash screen during inits.
#if !wxCHECK_VERSION(3, 0, 0)
@ -1734,6 +1834,10 @@ wxCmdLineParser *AudacityApp::ParseCommandLine()
parser->AddOption(wxT("b"), wxT("blocksize"), _("set max disk block size in bytes"),
wxCMD_LINE_VAL_NUMBER);
/*i18n-hint: This decodes an autosave file */
parser->AddOption(wxT("d"), wxT("decode"), _("decode an autosave file"),
wxCMD_LINE_VAL_STRING);
/*i18n-hint: This displays a list of available options */
parser->AddSwitch(wxT("h"), wxT("help"), _("this help message"),
wxCMD_LINE_OPTION_HELP);

View File

@ -31,6 +31,10 @@
#include "ondemand/ODTaskThread.h"
#include "Experimental.h"
#if defined(EXPERIMENTAL_CRASH_REPORT)
#include <wx/debugrpt.h>
#endif
class IPCServ;
class Importer;
class CommandHandler;
@ -98,6 +102,7 @@ class BlockFile;
class AudacityApp:public wxApp {
public:
AudacityApp();
virtual bool OnInit(void);
void FinishInits();
#if wxCHECK_VERSION(3, 0, 0)
@ -201,6 +206,10 @@ class AudacityApp:public wxApp {
AudacityLogger *GetLogger();
#if defined(EXPERIMENTAL_CRASH_REPORT)
void GenerateCrashReport(wxDebugReport::Context ctx);
#endif
#if defined(__WXGTK__)
/** \brief This flag is set true when in a keyboard event handler.
* Used to work around a hang issue with ibus (bug 154) */

View File

@ -259,6 +259,13 @@ void AudacityLogger::Show(bool show)
Flush();
}
#if defined(EXPERIMENTAL_CRASH_REPORT)
wxString AudacityLogger::GetLog()
{
return mBuffer;
}
#endif
void AudacityLogger::OnCloseWindow(wxCloseEvent & WXUNUSED(e))
{
#if defined(__WXMAC__)

View File

@ -22,6 +22,8 @@
#include <wx/textctrl.h>
#include <wx/string.h>
#include "Experimental.h"
class AudacityLogger:public wxEvtHandler, public wxLog {
public:
AudacityLogger();
@ -30,6 +32,10 @@ class AudacityLogger:public wxEvtHandler, public wxLog {
void Show(bool show = true);
void Destroy();
#if defined(EXPERIMENTAL_CRASH_REPORT)
wxString GetLog();
#endif
protected:
virtual void Flush();
virtual void DoLogString(const wxChar *szString, time_t t);

View File

@ -302,6 +302,7 @@ writing audio.
#include "Prefs.h"
#include "Project.h"
#include "WaveTrack.h"
#include "AutoRecovery.h"
#include "toolbars/ControlToolBar.h"
#include "widgets/Meter.h"
@ -1766,6 +1767,20 @@ int AudioIO::StartStream(WaveTrackArray playbackTracks,
AILASetStartTime();
#endif
if (options.pStartTime)
{
// Calculate the new time position
mTime = std::max(mT0, std::min(mT1, *options.pStartTime));
// Reset mixer positions for all playback tracks
unsigned numMixers = mPlaybackTracks.GetCount();
for (unsigned ii = 0; ii < numMixers; ++ii)
mPlaybackMixers[ii]->Reposition(mTime);
if(mTimeTrack)
mWarpedTime = mTimeTrack->ComputeWarpedLength(mT0, mTime);
else
mWarpedTime = mTime - mT0;
}
#ifdef EXPERIMENTAL_SCRUBBING_SUPPORT
delete mScrubQueue;
if (scrubbing)

View File

@ -84,6 +84,7 @@ struct AudioIOStartStreamOptions
, playLooped(false)
, cutPreviewGapStart(0.0)
, cutPreviewGapLen(0.0)
, pStartTime(NULL)
#ifdef EXPERIMENTAL_SCRUBBING_SUPPORT
, scrubDelay(0.0)
, maxScrubSpeed(1.0)
@ -97,6 +98,7 @@ struct AudioIOStartStreamOptions
bool playLooped;
double cutPreviewGapStart;
double cutPreviewGapLen;
double * pStartTime;
#ifdef EXPERIMENTAL_SCRUBBING_SUPPORT
// Positive value indicates that scrubbing will happen

View File

@ -15,7 +15,7 @@
#include <wx/string.h>
#include "AutoRecovery.h"
class AutoSaveFile;
class AUDACITY_DLL_API AudioIOListener {
public:

View File

@ -637,8 +637,41 @@ bool AutoSaveFile::Decode(const wxString & fileName)
if (file.Read(&ident, len) != len || strncmp(ident, AutoSaveIdent, len) != 0)
{
// Not something we recognize. Could be decoded already. Let the caller
// deal with it.
// It could be that the file has already been decoded or that it is one
// from 2.1.0 or earlier. In the latter case, we need to ensure the
// closing </project> tag is preset.
// Close the file so we can reopen it in read/write mode
file.Close();
// Add </project> tag, if necessary
if (!file.Open(fn.GetFullPath(), wxT("r+b")))
{
// Really shouldn't happen, but let the caller deal with it
return false;
}
// Read the last 16 bytes of the file and check if they contain
// "</project>" somewhere.
const int bufsize = 16;
char buf[bufsize + 1];
if (file.SeekEnd(-bufsize) != wxInvalidOffset)
{
if (file.Read(buf, bufsize) == bufsize)
{
buf[bufsize] = 0;
if (strstr(buf, "</project>") == 0)
{
// End of file does not contain closing </project> tag, so add it
if (file.Seek(0, wxFromEnd) != wxInvalidOffset)
{
strcpy(buf, "</project>\n");
file.Write(buf, strlen(buf));
}
}
}
}
file.Close();
return true;
@ -650,7 +683,6 @@ bool AutoSaveFile::Decode(const wxString & fileName)
if (file.Read(buf, len) != len)
{
delete buf;
file.Close();
return false;
}

View File

@ -66,8 +66,8 @@ private:
#define AutoSaveIdent "<?xml autosave>"
WX_DECLARE_STRING_HASH_MAP_WITH_DECL(short, NameMap, class AUDACITY_DLL_API);
WX_DECLARE_HASH_MAP(short, wxString, wxIntegerHash, wxIntegerEqual, IdMap);
WX_DECLARE_OBJARRAY(IdMap, IdMapArray);
WX_DECLARE_HASH_MAP_WITH_DECL(short, wxString, wxIntegerHash, wxIntegerEqual, IdMap, class AUDACITY_DLL_API);
WX_DECLARE_OBJARRAY_WITH_DECL(IdMap, IdMapArray, class AUDACITY_DLL_API);
class AUDACITY_DLL_API AutoSaveFile : public XMLWriter
{

View File

@ -55,20 +55,20 @@ extern void diagnostics_do_perfmon_stop( t_diag_struct ** ppDiag);
// static ensures struct is initialised just once.
// No function is called after the countdown is counted out.
#define DIAG( message ) { \
static t_diag_struct diag{ DEFAULT_LOG_COUNT, DEFAULT_LOG_COUNT, 0,0,0,0,wxT(message)};\
static t_diag_struct diag = { DEFAULT_LOG_COUNT, DEFAULT_LOG_COUNT, 0,0,0,0,wxT(message)};\
if( --diag.countdown >=0 )\
diagnostics_do_diag( &diag );\
}
#define TRACK_MEM( message, amount ) { \
static t_diag_struct diag{ DEFAULT_LOG_COUNT, DEFAULT_LOG_COUNT, 0,0,0,0,wxT(message)};\
static t_diag_struct diag = { DEFAULT_LOG_COUNT, DEFAULT_LOG_COUNT, 0,0,0,0,wxT(message)};\
if( --diag.countdown >=0 )\
diagnostics_do_diag_mem( &diag, amount );\
}
#define TIMER_START( message, timername )\
MAKE_TIMER( timername ); { \
static t_diag_struct diag{ DEFAULT_LOG_COUNT, DEFAULT_LOG_COUNT, 0,0,0,0,wxT(message)};\
static t_diag_struct diag = { DEFAULT_LOG_COUNT, DEFAULT_LOG_COUNT, 0,0,0,0,wxT(message)};\
if( --diag.countdown >=0 )\
diagnostics_do_perfmon_start( &diag, &timername );\
}

View File

@ -178,4 +178,11 @@
// You must define EXPERIMENTAL_SCRUBBING_BASIC if you enable this:
#define EXPERIMENTAL_SCRUBBING_SCROLL_WHEEL
// Define to include crash reporting
#define EXPERIMENTAL_CRASH_REPORT
#if !defined(wxUSE_DEBUGREPORT) || !wxUSE_DEBUGREPORT
#undef EXPERIMENTAL_CRASH_REPORT
#endif
#endif

View File

@ -233,6 +233,7 @@ audacity_SOURCES = \
TrackPanelAx.h \
UndoManager.cpp \
UndoManager.h \
ViewInfo.cpp \
ViewInfo.h \
VoiceKey.cpp \
VoiceKey.h \

View File

@ -279,46 +279,48 @@ am__audacity_SOURCES_DIST = BlockFile.cpp BlockFile.h DirManager.cpp \
BatchProcessDialog.cpp BatchProcessDialog.h Benchmark.cpp \
Benchmark.h CaptureEvents.cpp CaptureEvents.h Dependencies.cpp \
Dependencies.h DeviceChange.cpp DeviceChange.h \
DeviceManager.cpp DeviceManager.h Envelope.cpp Envelope.h \
Experimental.h FFmpeg.cpp FFmpeg.h FFT.cpp FFT.h FileIO.cpp \
FileIO.h FileNames.cpp FileNames.h float_cast.h FreqWindow.cpp \
FreqWindow.h HelpText.cpp HelpText.h HistoryWindow.cpp \
HistoryWindow.h ImageManipulation.cpp ImageManipulation.h \
InterpolateAudio.cpp InterpolateAudio.h LabelDialog.cpp \
LabelDialog.h LabelTrack.cpp LabelTrack.h LangChoice.cpp \
LangChoice.h Languages.cpp Languages.h Legacy.cpp Legacy.h \
Lyrics.cpp Lyrics.h LyricsWindow.cpp LyricsWindow.h \
MacroMagic.h Matrix.cpp Matrix.h Menus.cpp Menus.h Mix.cpp \
Mix.h MixerBoard.cpp MixerBoard.h ModuleManager.cpp \
ModuleManager.h PitchName.cpp PitchName.h \
PlatformCompatibility.cpp PlatformCompatibility.h \
PluginManager.cpp PluginManager.h Printing.cpp Printing.h \
Profiler.cpp Profiler.h Project.cpp Project.h RealFFTf.cpp \
RealFFTf.h RealFFTf48x.cpp RealFFTf48x.h Resample.cpp \
Resample.h RevisionIdent.h RingBuffer.cpp RingBuffer.h \
Screenshot.cpp Screenshot.h SelectedRegion.cpp \
SelectedRegion.h Shuttle.cpp Shuttle.h ShuttleGui.cpp \
ShuttleGui.h ShuttlePrefs.cpp ShuttlePrefs.h Snap.cpp Snap.h \
SoundActivatedRecord.cpp SoundActivatedRecord.h Spectrum.cpp \
Spectrum.h SplashDialog.cpp SplashDialog.h SseMathFuncs.cpp \
DeviceManager.cpp DeviceManager.h Diags.cpp Diags.h \
Envelope.cpp Envelope.h Experimental.h FFmpeg.cpp FFmpeg.h \
FFT.cpp FFT.h FileIO.cpp FileIO.h FileNames.cpp FileNames.h \
float_cast.h FreqWindow.cpp FreqWindow.h HelpText.cpp \
HelpText.h HistoryWindow.cpp HistoryWindow.h \
ImageManipulation.cpp ImageManipulation.h InterpolateAudio.cpp \
InterpolateAudio.h LabelDialog.cpp LabelDialog.h \
LabelTrack.cpp LabelTrack.h LangChoice.cpp LangChoice.h \
Languages.cpp Languages.h Legacy.cpp Legacy.h Lyrics.cpp \
Lyrics.h LyricsWindow.cpp LyricsWindow.h MacroMagic.h \
Matrix.cpp Matrix.h Menus.cpp Menus.h Mix.cpp Mix.h \
MixerBoard.cpp MixerBoard.h ModuleManager.cpp ModuleManager.h \
PitchName.cpp PitchName.h PlatformCompatibility.cpp \
PlatformCompatibility.h PluginManager.cpp PluginManager.h \
Printing.cpp Printing.h Profiler.cpp Profiler.h Project.cpp \
Project.h RealFFTf.cpp RealFFTf.h RealFFTf48x.cpp \
RealFFTf48x.h Resample.cpp Resample.h RevisionIdent.h \
RingBuffer.cpp RingBuffer.h Screenshot.cpp Screenshot.h \
SelectedRegion.cpp SelectedRegion.h Shuttle.cpp Shuttle.h \
ShuttleGui.cpp ShuttleGui.h ShuttlePrefs.cpp ShuttlePrefs.h \
Snap.cpp Snap.h SoundActivatedRecord.cpp \
SoundActivatedRecord.h Spectrum.cpp Spectrum.h \
SplashDialog.cpp SplashDialog.h SseMathFuncs.cpp \
SseMathFuncs.h Tags.cpp Tags.h Theme.cpp Theme.h \
ThemeAsCeeCode.h TimeDialog.cpp TimeDialog.h \
TimerRecordDialog.cpp TimerRecordDialog.h TimeTrack.cpp \
TimeTrack.h Track.cpp Track.h TrackArtist.cpp TrackArtist.h \
TrackPanel.cpp TrackPanel.h TrackPanelAx.cpp TrackPanelAx.h \
UndoManager.cpp UndoManager.h ViewInfo.h VoiceKey.cpp \
VoiceKey.h WaveClip.cpp WaveClip.h WaveTrack.cpp WaveTrack.h \
WrappedType.cpp WrappedType.h commands/AppCommandEvent.cpp \
commands/AppCommandEvent.h commands/BatchEvalCommand.cpp \
commands/BatchEvalCommand.h commands/Command.cpp \
commands/Command.h commands/CommandBuilder.cpp \
commands/CommandBuilder.h commands/CommandDirectory.cpp \
commands/CommandDirectory.h commands/CommandHandler.cpp \
commands/CommandHandler.h commands/CommandManager.cpp \
commands/CommandManager.h commands/CommandMisc.h \
commands/CommandSignature.cpp commands/CommandSignature.h \
commands/CommandTargets.h commands/CommandType.cpp \
commands/CommandType.h commands/CompareAudioCommand.cpp \
UndoManager.cpp UndoManager.h ViewInfo.cpp ViewInfo.h \
VoiceKey.cpp VoiceKey.h WaveClip.cpp WaveClip.h WaveTrack.cpp \
WaveTrack.h WrappedType.cpp WrappedType.h \
commands/AppCommandEvent.cpp commands/AppCommandEvent.h \
commands/BatchEvalCommand.cpp commands/BatchEvalCommand.h \
commands/Command.cpp commands/Command.h \
commands/CommandBuilder.cpp commands/CommandBuilder.h \
commands/CommandDirectory.cpp commands/CommandDirectory.h \
commands/CommandHandler.cpp commands/CommandHandler.h \
commands/CommandManager.cpp commands/CommandManager.h \
commands/CommandMisc.h commands/CommandSignature.cpp \
commands/CommandSignature.h commands/CommandTargets.h \
commands/CommandType.cpp commands/CommandType.h \
commands/CompareAudioCommand.cpp \
commands/CompareAudioCommand.h commands/ExecMenuCommand.cpp \
commands/ExecMenuCommand.h commands/GetAllMenuCommands.cpp \
commands/GetAllMenuCommands.h \
@ -514,11 +516,11 @@ am_audacity_OBJECTS = $(am__objects_1) audacity-AboutDialog.$(OBJEXT) \
audacity-Benchmark.$(OBJEXT) audacity-CaptureEvents.$(OBJEXT) \
audacity-Dependencies.$(OBJEXT) \
audacity-DeviceChange.$(OBJEXT) \
audacity-DeviceManager.$(OBJEXT) audacity-Envelope.$(OBJEXT) \
audacity-FFmpeg.$(OBJEXT) audacity-FFT.$(OBJEXT) \
audacity-FileIO.$(OBJEXT) audacity-FileNames.$(OBJEXT) \
audacity-FreqWindow.$(OBJEXT) audacity-HelpText.$(OBJEXT) \
audacity-HistoryWindow.$(OBJEXT) \
audacity-DeviceManager.$(OBJEXT) audacity-Diags.$(OBJEXT) \
audacity-Envelope.$(OBJEXT) audacity-FFmpeg.$(OBJEXT) \
audacity-FFT.$(OBJEXT) audacity-FileIO.$(OBJEXT) \
audacity-FileNames.$(OBJEXT) audacity-FreqWindow.$(OBJEXT) \
audacity-HelpText.$(OBJEXT) audacity-HistoryWindow.$(OBJEXT) \
audacity-ImageManipulation.$(OBJEXT) \
audacity-InterpolateAudio.$(OBJEXT) \
audacity-LabelDialog.$(OBJEXT) audacity-LabelTrack.$(OBJEXT) \
@ -545,8 +547,9 @@ am_audacity_OBJECTS = $(am__objects_1) audacity-AboutDialog.$(OBJEXT) \
audacity-TimeTrack.$(OBJEXT) audacity-Track.$(OBJEXT) \
audacity-TrackArtist.$(OBJEXT) audacity-TrackPanel.$(OBJEXT) \
audacity-TrackPanelAx.$(OBJEXT) audacity-UndoManager.$(OBJEXT) \
audacity-VoiceKey.$(OBJEXT) audacity-WaveClip.$(OBJEXT) \
audacity-WaveTrack.$(OBJEXT) audacity-WrappedType.$(OBJEXT) \
audacity-ViewInfo.$(OBJEXT) audacity-VoiceKey.$(OBJEXT) \
audacity-WaveClip.$(OBJEXT) audacity-WaveTrack.$(OBJEXT) \
audacity-WrappedType.$(OBJEXT) \
commands/audacity-AppCommandEvent.$(OBJEXT) \
commands/audacity-BatchEvalCommand.$(OBJEXT) \
commands/audacity-Command.$(OBJEXT) \
@ -1137,46 +1140,48 @@ audacity_SOURCES = $(libaudacity_la_SOURCES) AboutDialog.cpp \
BatchProcessDialog.cpp BatchProcessDialog.h Benchmark.cpp \
Benchmark.h CaptureEvents.cpp CaptureEvents.h Dependencies.cpp \
Dependencies.h DeviceChange.cpp DeviceChange.h \
DeviceManager.cpp DeviceManager.h Envelope.cpp Envelope.h \
Experimental.h FFmpeg.cpp FFmpeg.h FFT.cpp FFT.h FileIO.cpp \
FileIO.h FileNames.cpp FileNames.h float_cast.h FreqWindow.cpp \
FreqWindow.h HelpText.cpp HelpText.h HistoryWindow.cpp \
HistoryWindow.h ImageManipulation.cpp ImageManipulation.h \
InterpolateAudio.cpp InterpolateAudio.h LabelDialog.cpp \
LabelDialog.h LabelTrack.cpp LabelTrack.h LangChoice.cpp \
LangChoice.h Languages.cpp Languages.h Legacy.cpp Legacy.h \
Lyrics.cpp Lyrics.h LyricsWindow.cpp LyricsWindow.h \
MacroMagic.h Matrix.cpp Matrix.h Menus.cpp Menus.h Mix.cpp \
Mix.h MixerBoard.cpp MixerBoard.h ModuleManager.cpp \
ModuleManager.h PitchName.cpp PitchName.h \
PlatformCompatibility.cpp PlatformCompatibility.h \
PluginManager.cpp PluginManager.h Printing.cpp Printing.h \
Profiler.cpp Profiler.h Project.cpp Project.h RealFFTf.cpp \
RealFFTf.h RealFFTf48x.cpp RealFFTf48x.h Resample.cpp \
Resample.h RevisionIdent.h RingBuffer.cpp RingBuffer.h \
Screenshot.cpp Screenshot.h SelectedRegion.cpp \
SelectedRegion.h Shuttle.cpp Shuttle.h ShuttleGui.cpp \
ShuttleGui.h ShuttlePrefs.cpp ShuttlePrefs.h Snap.cpp Snap.h \
SoundActivatedRecord.cpp SoundActivatedRecord.h Spectrum.cpp \
Spectrum.h SplashDialog.cpp SplashDialog.h SseMathFuncs.cpp \
DeviceManager.cpp DeviceManager.h Diags.cpp Diags.h \
Envelope.cpp Envelope.h Experimental.h FFmpeg.cpp FFmpeg.h \
FFT.cpp FFT.h FileIO.cpp FileIO.h FileNames.cpp FileNames.h \
float_cast.h FreqWindow.cpp FreqWindow.h HelpText.cpp \
HelpText.h HistoryWindow.cpp HistoryWindow.h \
ImageManipulation.cpp ImageManipulation.h InterpolateAudio.cpp \
InterpolateAudio.h LabelDialog.cpp LabelDialog.h \
LabelTrack.cpp LabelTrack.h LangChoice.cpp LangChoice.h \
Languages.cpp Languages.h Legacy.cpp Legacy.h Lyrics.cpp \
Lyrics.h LyricsWindow.cpp LyricsWindow.h MacroMagic.h \
Matrix.cpp Matrix.h Menus.cpp Menus.h Mix.cpp Mix.h \
MixerBoard.cpp MixerBoard.h ModuleManager.cpp ModuleManager.h \
PitchName.cpp PitchName.h PlatformCompatibility.cpp \
PlatformCompatibility.h PluginManager.cpp PluginManager.h \
Printing.cpp Printing.h Profiler.cpp Profiler.h Project.cpp \
Project.h RealFFTf.cpp RealFFTf.h RealFFTf48x.cpp \
RealFFTf48x.h Resample.cpp Resample.h RevisionIdent.h \
RingBuffer.cpp RingBuffer.h Screenshot.cpp Screenshot.h \
SelectedRegion.cpp SelectedRegion.h Shuttle.cpp Shuttle.h \
ShuttleGui.cpp ShuttleGui.h ShuttlePrefs.cpp ShuttlePrefs.h \
Snap.cpp Snap.h SoundActivatedRecord.cpp \
SoundActivatedRecord.h Spectrum.cpp Spectrum.h \
SplashDialog.cpp SplashDialog.h SseMathFuncs.cpp \
SseMathFuncs.h Tags.cpp Tags.h Theme.cpp Theme.h \
ThemeAsCeeCode.h TimeDialog.cpp TimeDialog.h \
TimerRecordDialog.cpp TimerRecordDialog.h TimeTrack.cpp \
TimeTrack.h Track.cpp Track.h TrackArtist.cpp TrackArtist.h \
TrackPanel.cpp TrackPanel.h TrackPanelAx.cpp TrackPanelAx.h \
UndoManager.cpp UndoManager.h ViewInfo.h VoiceKey.cpp \
VoiceKey.h WaveClip.cpp WaveClip.h WaveTrack.cpp WaveTrack.h \
WrappedType.cpp WrappedType.h commands/AppCommandEvent.cpp \
commands/AppCommandEvent.h commands/BatchEvalCommand.cpp \
commands/BatchEvalCommand.h commands/Command.cpp \
commands/Command.h commands/CommandBuilder.cpp \
commands/CommandBuilder.h commands/CommandDirectory.cpp \
commands/CommandDirectory.h commands/CommandHandler.cpp \
commands/CommandHandler.h commands/CommandManager.cpp \
commands/CommandManager.h commands/CommandMisc.h \
commands/CommandSignature.cpp commands/CommandSignature.h \
commands/CommandTargets.h commands/CommandType.cpp \
commands/CommandType.h commands/CompareAudioCommand.cpp \
UndoManager.cpp UndoManager.h ViewInfo.cpp ViewInfo.h \
VoiceKey.cpp VoiceKey.h WaveClip.cpp WaveClip.h WaveTrack.cpp \
WaveTrack.h WrappedType.cpp WrappedType.h \
commands/AppCommandEvent.cpp commands/AppCommandEvent.h \
commands/BatchEvalCommand.cpp commands/BatchEvalCommand.h \
commands/Command.cpp commands/Command.h \
commands/CommandBuilder.cpp commands/CommandBuilder.h \
commands/CommandDirectory.cpp commands/CommandDirectory.h \
commands/CommandHandler.cpp commands/CommandHandler.h \
commands/CommandManager.cpp commands/CommandManager.h \
commands/CommandMisc.h commands/CommandSignature.cpp \
commands/CommandSignature.h commands/CommandTargets.h \
commands/CommandType.cpp commands/CommandType.h \
commands/CompareAudioCommand.cpp \
commands/CompareAudioCommand.h commands/ExecMenuCommand.cpp \
commands/ExecMenuCommand.h commands/GetAllMenuCommands.cpp \
commands/GetAllMenuCommands.h \
@ -1963,6 +1968,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audacity-Dependencies.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audacity-DeviceChange.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audacity-DeviceManager.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audacity-Diags.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audacity-DirManager.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audacity-Dither.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audacity-Envelope.Po@am__quote@
@ -2023,6 +2029,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audacity-TrackPanel.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audacity-TrackPanelAx.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audacity-UndoManager.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audacity-ViewInfo.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audacity-VoiceKey.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audacity-WaveClip.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audacity-WaveTrack.Po@am__quote@
@ -2777,6 +2784,20 @@ audacity-DeviceManager.obj: DeviceManager.cpp
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -c -o audacity-DeviceManager.obj `if test -f 'DeviceManager.cpp'; then $(CYGPATH_W) 'DeviceManager.cpp'; else $(CYGPATH_W) '$(srcdir)/DeviceManager.cpp'; fi`
audacity-Diags.o: Diags.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT audacity-Diags.o -MD -MP -MF $(DEPDIR)/audacity-Diags.Tpo -c -o audacity-Diags.o `test -f 'Diags.cpp' || echo '$(srcdir)/'`Diags.cpp
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/audacity-Diags.Tpo $(DEPDIR)/audacity-Diags.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Diags.cpp' object='audacity-Diags.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -c -o audacity-Diags.o `test -f 'Diags.cpp' || echo '$(srcdir)/'`Diags.cpp
audacity-Diags.obj: Diags.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT audacity-Diags.obj -MD -MP -MF $(DEPDIR)/audacity-Diags.Tpo -c -o audacity-Diags.obj `if test -f 'Diags.cpp'; then $(CYGPATH_W) 'Diags.cpp'; else $(CYGPATH_W) '$(srcdir)/Diags.cpp'; fi`
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/audacity-Diags.Tpo $(DEPDIR)/audacity-Diags.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Diags.cpp' object='audacity-Diags.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -c -o audacity-Diags.obj `if test -f 'Diags.cpp'; then $(CYGPATH_W) 'Diags.cpp'; else $(CYGPATH_W) '$(srcdir)/Diags.cpp'; fi`
audacity-Envelope.o: Envelope.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT audacity-Envelope.o -MD -MP -MF $(DEPDIR)/audacity-Envelope.Tpo -c -o audacity-Envelope.o `test -f 'Envelope.cpp' || echo '$(srcdir)/'`Envelope.cpp
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/audacity-Envelope.Tpo $(DEPDIR)/audacity-Envelope.Po
@ -3505,6 +3526,20 @@ audacity-UndoManager.obj: UndoManager.cpp
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -c -o audacity-UndoManager.obj `if test -f 'UndoManager.cpp'; then $(CYGPATH_W) 'UndoManager.cpp'; else $(CYGPATH_W) '$(srcdir)/UndoManager.cpp'; fi`
audacity-ViewInfo.o: ViewInfo.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT audacity-ViewInfo.o -MD -MP -MF $(DEPDIR)/audacity-ViewInfo.Tpo -c -o audacity-ViewInfo.o `test -f 'ViewInfo.cpp' || echo '$(srcdir)/'`ViewInfo.cpp
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/audacity-ViewInfo.Tpo $(DEPDIR)/audacity-ViewInfo.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ViewInfo.cpp' object='audacity-ViewInfo.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -c -o audacity-ViewInfo.o `test -f 'ViewInfo.cpp' || echo '$(srcdir)/'`ViewInfo.cpp
audacity-ViewInfo.obj: ViewInfo.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT audacity-ViewInfo.obj -MD -MP -MF $(DEPDIR)/audacity-ViewInfo.Tpo -c -o audacity-ViewInfo.obj `if test -f 'ViewInfo.cpp'; then $(CYGPATH_W) 'ViewInfo.cpp'; else $(CYGPATH_W) '$(srcdir)/ViewInfo.cpp'; fi`
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/audacity-ViewInfo.Tpo $(DEPDIR)/audacity-ViewInfo.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ViewInfo.cpp' object='audacity-ViewInfo.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -c -o audacity-ViewInfo.obj `if test -f 'ViewInfo.cpp'; then $(CYGPATH_W) 'ViewInfo.cpp'; else $(CYGPATH_W) '$(srcdir)/ViewInfo.cpp'; fi`
audacity-VoiceKey.o: VoiceKey.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT audacity-VoiceKey.o -MD -MP -MF $(DEPDIR)/audacity-VoiceKey.Tpo -c -o audacity-VoiceKey.o `test -f 'VoiceKey.cpp' || echo '$(srcdir)/'`VoiceKey.cpp
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/audacity-VoiceKey.Tpo $(DEPDIR)/audacity-VoiceKey.Po

View File

@ -36,6 +36,7 @@ simplifies construction of menu items.
#include <limits>
#include <math.h>
#include <wx/defs.h>
#include <wx/docview.h>
#include <wx/msgdlg.h>
@ -117,6 +118,10 @@ simplifies construction of menu items.
#include "CaptureEvents.h"
#include "Snap.h"
#if defined(EXPERIMENTAL_CRASH_REPORT)
#include <wx/debugrpt.h>
#endif
#ifdef EXPERIMENTAL_SCOREALIGN
#include "effects/ScoreAlignDialog.h"
#include "audioreader.h"
@ -1061,6 +1066,10 @@ void AudacityProject::CreateMenusAndCommands()
c->AddItem(wxT("Log"), _("Show &Log..."), FN(OnShowLog));
#if defined(EXPERIMENTAL_CRASH_REPORT)
c->AddItem(wxT("CrashReport"), _("&Generate Support Data..."), FN(OnCrashReport));
#endif
#ifndef __WXMAC__
c->AddSeparator();
#endif
@ -1732,9 +1741,11 @@ wxUint32 AudacityProject::GetUpdateFlags()
flags |= GetFocusedFrame();
double start, end;
GetPlayRegion(&start, &end);
if (IsPlayRegionLocked())
flags |= PlayRegionLockedFlag;
else
else if (start != end)
flags |= PlayRegionNotLockedFlag;
if (flags & AudioIONotBusyFlag) {
@ -4933,6 +4944,7 @@ void AudacityProject::OnHistory()
mHistoryWindow = new HistoryWindow(this, &mUndoManager);
mHistoryWindow->Show();
mHistoryWindow->Raise();
mHistoryWindow->UpdateDisplay();
}
void AudacityProject::OnKaraoke()
@ -6175,6 +6187,18 @@ void AudacityProject::OnBenchmark()
::RunBenchmark(this);
}
#if defined(EXPERIMENTAL_CRASH_REPORT)
void AudacityProject::OnCrashReport()
{
// Change to "1" to test a real crash
#if 0
char *p = 0;
*p = 1234;
#endif
wxGetApp().GenerateCrashReport(wxDebugReport::Context_Current);
}
#endif
void AudacityProject::OnScreenshot()
{
::OpenScreenshotTools();
@ -6183,11 +6207,39 @@ void AudacityProject::OnScreenshot()
void AudacityProject::OnAudioDeviceInfo()
{
wxString info = gAudioIO->GetDeviceInfo();
HelpSystem::ShowInfoDialog( this,
_("Audio Device Info"),
wxT(""),
info,
350,450);
wxDialog dlg(this, wxID_ANY, wxString(_("Audio Device Info")));
ShuttleGui S(&dlg, eIsCreating);
wxTextCtrl *text;
S.StartVerticalLay();
{
S.SetStyle(wxTE_MULTILINE | wxTE_READONLY);
text = S.Id(wxID_STATIC).AddTextWindow(info);
S.AddStandardButtons(eOkButton | eCancelButton);
}
S.EndVerticalLay();
dlg.FindWindowById(wxID_OK)->SetLabel(_("&Save"));
dlg.SetSize(350, 450);
if (dlg.ShowModal() == wxID_OK)
{
wxString fName = FileSelector(_("Save Device Info"),
wxEmptyString,
wxT("deviceinfo.txt"),
wxT("txt"),
wxT("*.txt"),
wxFD_SAVE | wxFD_OVERWRITE_PROMPT | wxRESIZE_BORDER,
this);
if (!fName.IsEmpty())
{
if (!text->SaveFile(fName))
{
wxMessageBox(_("Unable to save device info"), _("Save Device Info"));
}
}
}
}
void AudacityProject::OnSeparator()
@ -6262,8 +6314,16 @@ void AudacityProject::OnUnMuteAllTracks()
void AudacityProject::OnLockPlayRegion()
{
double start, end;
GetPlayRegion(&start, &end);
if (start >= mTracks->GetEndTime()) {
wxMessageBox(_("Cannot lock region beyond\nend of project."),
_("Error"));
}
else {
mLockPlayRegion = true;
mRuler->Refresh(false);
}
}
void AudacityProject::OnUnlockPlayRegion()

View File

@ -372,6 +372,9 @@ void OnManual();
void OnShowLog();
void OnHelpWelcome();
void OnBenchmark();
#if defined(EXPERIMENTAL_CRASH_REPORT)
void OnCrashReport();
#endif
void OnScreenshot();
void OnAudioDeviceInfo();

View File

@ -74,7 +74,7 @@ public:
void SetPath(const wxString & path);
void SetSymbol(const wxString & symbol);
// These should be passed an untranslated value wrapped in wxTRANSLATE() so
// These should be passed an untranslated value wrapped in XO() so
// the value will still be extracted for translation
void SetName(const wxString & name);
void SetVersion(const wxString & version);

View File

@ -2548,10 +2548,6 @@ void AudacityProject::OpenFile(wxString fileName, bool addtohistory)
SetProjectTitle();
// Auto-save files (which are known by the special ending .autosave) do
// not necessarily have the closing </project> tag, because log data can
// be added anytime. So before opening an .autosave file, add the necessary
// closing bracket to make the XML parser happy.
const wxString autoSaveExt = wxT(".autosave");
if (mFileName.Length() >= autoSaveExt.Length() &&
mFileName.Right(autoSaveExt.Length()) == autoSaveExt)

View File

@ -52,6 +52,7 @@ class wxScrollBar;
class wxPanel;
class AudacityProject;
class AutoSaveFile;
class Importer;
class ODLock;
class RecordingRecoveryHandler;

View File

@ -480,7 +480,7 @@ void ScreenFrame::OnCloseWindow(wxCloseEvent & WXUNUSED(event))
void ScreenFrame::OnUIUpdate(wxUpdateUIEvent & WXUNUSED(event))
{
#ifdef __WXMAC__
wxTopLevelWindow *top = mCommand->GetFrontWindow(mContext.proj);
wxTopLevelWindow *top = mCommand->GetFrontWindow(GetActiveProject());
bool needupdate = false;
bool enable = false;

View File

@ -30,6 +30,7 @@
#include "Audacity.h"
#include <algorithm>
#include <float.h>
#include <math.h>
@ -1247,195 +1248,240 @@ bool Sequence::Set(samplePtr buffer, sampleFormat format,
return ConsistencyCheck(wxT("Set"));
}
bool Sequence::GetWaveDisplay(float *min, float *max, float *rms,int* bl,
int len, const sampleCount *where,
double samplesPerPixel)
{
sampleCount s0 = where[0];
sampleCount s1 = where[len];
namespace {
// None of the samples asked for are in range. Abandon.
struct MinMaxSumsq
{
MinMaxSumsq(const float *pv, int count, int divisor)
{
min = FLT_MAX, max = -FLT_MAX, sumsq = 0.0f;
while (count--) {
float v;
switch (divisor) {
default:
case 1:
// array holds samples
v = *pv++;
if (v < min)
min = v;
if (v > max)
max = v;
sumsq += v * v;
break;
case 256:
case 65536:
// array holds triples of min, max, and rms values
v = *pv++;
if (v < min)
min = v;
v = *pv++;
if (v > max)
max = v;
v = *pv++;
sumsq += v * v;
break;
}
}
}
float min;
float max;
float sumsq;
};
}
bool Sequence::GetWaveDisplay(float *min, float *max, float *rms, int* bl,
int len, const sampleCount *where)
{
const sampleCount s0 = std::max(sampleCount(0), where[0]);
if (s0 >= mNumSamples)
// None of the samples asked for are in range. Abandon.
return false;
int divisor;
if (samplesPerPixel >= 65536)
divisor = 65536;
else if (samplesPerPixel >= 256)
divisor = 256;
else
divisor = 1;
if (s1 > mNumSamples)
s1 = mNumSamples;
sampleCount srcX = s0;
unsigned int block0 = FindBlock(s0);
// In case where[len - 1] == where[len], raise the limit by one,
// so we load at least one pixel for column len - 1
// ... unless the mNumSamples ceiling applies, and then there are other defenses
const sampleCount s1 =
std::min(mNumSamples, std::max(1 + where[len - 1], where[len]));
float *temp = new float[mMaxSamples];
int pixel = 0;
float theMin = 0.0;
float theMax = 0.0;
float sumsq = float(0.0);
unsigned int b = block0;
int jcount = 0;
int blockStatus = 1;
while (srcX < s1) {
// Get more samples
sampleCount num;
num = ((mBlock->Item(b)->f->GetLength() -
(srcX - mBlock->Item(b)->start)) + divisor - 1)
/ divisor;
if (num > (s1 - srcX + divisor - 1) / divisor)
num = (s1 - srcX + divisor - 1) / divisor;
switch (divisor) {
default:
case 1:
Read((samplePtr)temp, floatSample, mBlock->Item(b),
srcX - mBlock->Item(b)->start, num);
blockStatus=b;
sampleCount srcX = s0;
sampleCount nextSrcX = 0;
int lastRmsDenom = 0;
int lastDivisor = 0;
int whereNow = std::min(s1 - 1, where[0]);
int whereNext = 0;
// Loop over block files, opening and reading and closing each
// not more than once
unsigned nBlocks = mBlock->GetCount();
const unsigned int block0 = FindBlock(s0);
for (unsigned int b = block0; b < nBlocks; ++b) {
if (b > block0)
srcX = nextSrcX;
if (srcX >= s1)
break;
case 256:
//check to see if summary data has been computed
if(mBlock->Item(b)->f->IsSummaryAvailable())
{
mBlock->Item(b)->f->Read256(temp,
(srcX - mBlock->Item(b)->start) / divisor, num);
blockStatus=b;
}
else
{
//otherwise, mark the display as not yet computed
blockStatus=-1-b;
}
break;
case 65536:
//check to see if summary data has been computed
if(mBlock->Item(b)->f->IsSummaryAvailable())
{
mBlock->Item(b)->f->Read64K(temp,
(srcX - mBlock->Item(b)->start) / divisor, num);
blockStatus=b;
}
else
{
blockStatus=-1-b;
}
break;
}
// Get min/max/rms of samples for each pixel we can
int x = 0;
// Find the range of sample values for this block that
// are in the display.
SeqBlock *const pSeqBlock = mBlock->Item(b);
const sampleCount start = pSeqBlock->start;
nextSrcX = std::min(s1, start + pSeqBlock->f->GetLength());
if (b==block0) {
if (divisor > 1) {
theMin = temp[0];
theMax = temp[1];
}
// The column for pixel p covers samples from
// where[p] up to but excluding where[p + 1].
// Find the range of pixels covered by the current block file
// (Their starting samples covered by it, to be exact)
int nextPixel;
if (nextSrcX >= s1)
// last pass
nextPixel = len;
else {
theMin = temp[0];
theMax = temp[0];
nextPixel = pixel;
// Taking min with s1 - 1, here and elsewhere, is another defense
// to be sure the last pixel column gets at least one sample
while (nextPixel < len &&
(whereNext = std::min(s1 - 1, where[nextPixel])) < nextSrcX)
++nextPixel;
}
sumsq = float(0.0);
jcount = 0;
if (nextPixel == pixel)
// The entire block's samples fall within one pixel column.
// Either it's a rare odd block at the end, or else,
// we must be really zoomed out!
// Omit the entire block's contents from min/max/rms
// calculation, which is not correct, but correctness might not
// be worth the compute time if this happens every pixel
// column. -- PRL
continue;
if (nextPixel == len)
whereNext = s1;
// Decide the summary level
const double samplesPerPixel =
double(whereNext - whereNow) / (nextPixel - pixel);
const int divisor =
(samplesPerPixel >= 65536) ? 65536
: (samplesPerPixel >= 256) ? 256
: 1;
int blockStatus = b;
// How many samples or triples are needed?
const sampleCount startPosition =
std::max(sampleCount(0), (srcX - start) / divisor);
const sampleCount inclusiveEndPosition =
std::min((mMaxSamples / divisor) - 1, (nextSrcX - 1 - start) / divisor);
const sampleCount num = 1 + inclusiveEndPosition - startPosition;
if (num <= 0) {
// What? There was a zero length block file?
wxASSERT(false);
// Do some defense against this case anyway
while (pixel < nextPixel) {
min[pixel] = max[pixel] = rms[pixel] = 0;
bl[pixel] = blockStatus;//MC
++pixel;
}
continue;
}
while (x < num) {
while (pixel < len &&
where[pixel] / divisor == srcX / divisor + x) {
if (pixel > 0) {
min[pixel - 1] = theMin;
max[pixel - 1] = theMax;
bl[pixel - 1] = blockStatus;//MC
if (jcount > 0)
rms[pixel - 1] = (float)sqrt(sumsq / jcount);
else
rms[pixel - 1] = 0.0f;
}
pixel++;
if (where[pixel] != where[pixel - 1]) {
theMin = FLT_MAX;
theMax = -FLT_MAX;
sumsq = float(0.0);
jcount = 0;
}
}
sampleCount stop = (where[pixel] - srcX) / divisor;
if (stop == x)
stop++;
if (stop > num)
stop = num;
// Read from the block file or its summary
switch (divisor) {
default:
case 1:
while (x < stop) {
if (temp[x] < theMin)
theMin = temp[x];
if (temp[x] > theMax)
theMax = temp[x];
sumsq += ((float)temp[x]) * ((float)temp[x]);
x++;
jcount++;
}
// Read samples
Read((samplePtr)temp, floatSample, pSeqBlock, startPosition, num);
break;
case 256:
case 65536:
while (x < stop) {
if (temp[3 * x] < theMin)
theMin = temp[3 * x];
if (temp[3 * x + 1] > theMax)
theMax = temp[3 * x + 1];
sumsq += ((float)temp[3*x+2]) * ((float)temp[3*x+2]);
x++;
jcount++;
}
break;
}
}
b++;
srcX += num * divisor;
if (b >= mBlock->GetCount())
break;
srcX = mBlock->Item(b)->start;
}
// Make sure that min[pixel - 1] doesn't segfault
if (pixel <= 0)
pixel = 1;
if (pixel == 0)
pixel++;
if (pixel == 0)
pixel++;
while (pixel <= len) {
min[pixel - 1] = theMin;
max[pixel - 1] = theMax;
bl[pixel - 1] = blockStatus;//mchinen
if (jcount > 0)
rms[pixel - 1] = (float)sqrt(sumsq / jcount);
// Read triples
//check to see if summary data has been computed
if (pSeqBlock->f->IsSummaryAvailable())
pSeqBlock->f->Read256(temp, startPosition, num);
else
rms[pixel - 1] = 0.0f;
pixel++;
//otherwise, mark the display as not yet computed
blockStatus = -1 - b;
break;
case 65536:
// Read triples
//check to see if summary data has been computed
if (pSeqBlock->f->IsSummaryAvailable())
pSeqBlock->f->Read64K(temp, startPosition, num);
else
//otherwise, mark the display as not yet computed
blockStatus = -1 - b;
break;
}
sampleCount filePosition = startPosition;
// The previous pixel column might straddle blocks.
// If so, impute some of the data to it.
if (b > block0 && pixel > 0) {
sampleCount midPosition = (whereNow - start) / divisor;
int diff(midPosition - filePosition);
if (diff > 0) {
MinMaxSumsq values(temp, diff, divisor);
const int lastPixel = pixel - 1;
float &lastMin = min[lastPixel];
lastMin = std::min(lastMin, values.min);
float &lastMax = max[lastPixel];
lastMax = std::max(lastMax, values.max);
float &lastRms = rms[lastPixel];
int lastNumSamples = lastRmsDenom * lastDivisor;
lastRms = sqrt(
(lastRms * lastRms * lastNumSamples + values.sumsq * divisor) /
(lastNumSamples + diff * divisor)
);
filePosition = midPosition;
}
}
// Loop over file positions
int rmsDenom = 0;
for (; filePosition <= inclusiveEndPosition;) {
// Find range of pixel columns for this file position
// (normally just one, but maybe more when zoomed very close)
// and the range of positions for those columns
// (normally one or more, for that one column)
int pixelX = pixel + 1;
sampleCount positionX = 0;
while (pixelX < nextPixel &&
filePosition ==
(positionX = (std::min(s1 - 1, where[pixelX]) - start) / divisor)
)
++pixelX;
if (pixelX >= nextPixel)
positionX = 1 + inclusiveEndPosition;
// Find results to assign
rmsDenom = (positionX - filePosition);
wxASSERT(rmsDenom > 0);
const float *const pv =
temp + (filePosition - startPosition) * (divisor == 1 ? 1 : 3);
MinMaxSumsq values(pv, rmsDenom, divisor);
// Assign results
std::fill(&min[pixel], &min[pixelX], values.min);
std::fill(&max[pixel], &max[pixelX], values.max);
std::fill(&bl[pixel], &bl[pixelX], blockStatus);
std::fill(&rms[pixel], &rms[pixelX], (float)sqrt(values.sumsq / rmsDenom));
pixel = pixelX;
filePosition = positionX;
}
wxASSERT(pixel == nextPixel);
whereNow = whereNext;
pixel = nextPixel;
lastDivisor = divisor;
lastRmsDenom = rmsDenom;
} // for each block file
wxASSERT(pixel == len);
delete[] temp;
return true;

View File

@ -79,9 +79,15 @@ class Sequence: public XMLTagHandler {
bool Set(samplePtr buffer, sampleFormat format,
sampleCount start, sampleCount len);
// where is input, assumed to be nondecreasing, and its size is len + 1.
// min, max, rms, bl are outputs, and their lengths are len.
// Each position in the output arrays corresponds to one column of pixels.
// The column for pixel p covers samples from
// where[p] up to (but excluding) where[p + 1].
// bl is negative wherever data are not yet available.
// Return true if successful.
bool GetWaveDisplay(float *min, float *max, float *rms,int* bl,
int len, const sampleCount *where,
double samplesPerPixel);
int len, const sampleCount *where);
bool Copy(sampleCount s0, sampleCount s1, Sequence **dest);
bool Paste(sampleCount s0, const Sequence *src);

View File

@ -740,6 +740,10 @@ wxScrolledWindow * ShuttleGuiBase::StartScroller(int iStyle)
Style( wxSUNKEN_BORDER ) );
pScroller->SetScrollRate( 20,20 );
// This fools NVDA into not saying "Panel" when the dialog gets focus
pScroller->SetName(wxT("\a"));
pScroller->SetLabel(wxT("\a"));
mpWind->SetBackgroundColour(
iStyle==0
? wxColour( 245,244,240) :

View File

@ -576,7 +576,7 @@ protected:
double mLastIndicator;
double mLastCursor;
// Quick Play indicator postion
// Quick-Play indicator postion
double mOldQPIndicatorPos;
int mTimeCount;

View File

@ -25,6 +25,7 @@ UndoManager
#include <wx/hashset.h>
#include "BlockFile.h"
#include "Diags.h"
#include "Internat.h"
#include "Sequence.h"
#include "Track.h"

0
src/ViewInfo.cpp Normal file
View File

View File

@ -500,8 +500,7 @@ bool WaveClip::GetWaveDisplay(float *min, float *max, float *rms,int* bl,
&mWaveCache->rms[invStart],
&mWaveCache->bl[invStart],
invEnd-invStart,
&mWaveCache->where[invStart],
mRate / pixelsPerSecond);
&mWaveCache->where[invStart]);
//after check number of ODPixels
for(int j=invStart;j<invEnd;j++)
{
@ -605,8 +604,7 @@ bool WaveClip::GetWaveDisplay(float *min, float *max, float *rms,int* bl,
&oldCache->rms[invStart],
&oldCache->bl[invStart],
invEnd-invStart,
&oldCache->where[invStart],
mRate / pixelsPerSecond);
&oldCache->where[invStart]);
}
oldCache->ClearInvalidRegions();
@ -717,8 +715,7 @@ bool WaveClip::GetWaveDisplay(float *min, float *max, float *rms,int* bl,
&mWaveCache->rms[p0],
&mWaveCache->bl[p0],
p1-p0,
&mWaveCache->where[p0],
mRate / pixelsPerSecond))
&mWaveCache->where[p0]))
{
isLoadingOD=false;
mWaveCacheMutex.Unlock();

View File

@ -46,8 +46,8 @@ enum
// Define keys, defaults, minimums, and maximums for the effect parameters
//
// Name Type Key Def Min Max Scale
Param( Ratio, float, wxTRANSLATE("Ratio"), 0.9f, -FLT_MAX, FLT_MAX, 1.0f );
Param( NoClip, bool, wxTRANSLATE("Allow Clipping"), false, false, true, 1.0f );
Param( Ratio, float, XO("Ratio"), 0.9f, -FLT_MAX, FLT_MAX, 1.0f );
Param( NoClip, bool, XO("Allow Clipping"), false, false, true, 1.0f );
Param( Amp, float, wxT(""), -0.91515f, -50.0, 50.0, 10.0f );
//
@ -83,7 +83,7 @@ wxString EffectAmplify::GetSymbol()
wxString EffectAmplify::GetDescription()
{
// Note: This is useful only after ratio has been set.
return wxTRANSLATE("Increases or decreases the volume of the audio you have selected");
return XO("Increases or decreases the volume of the audio you have selected");
}
// EffectIdentInterface implementation

View File

@ -25,7 +25,7 @@
#include "Effect.h"
#define AMPLIFY_PLUGIN_SYMBOL wxTRANSLATE("Amplify")
#define AMPLIFY_PLUGIN_SYMBOL XO("Amplify")
class EffectAmplify : public Effect
{

View File

@ -36,13 +36,13 @@
// Define keys, defaults, minimums, and maximums for the effect parameters
//
// Name Type Key Def Min Max Scale
Param( DuckAmountDb, double, wxTRANSLATE("DuckAmountDb"), -12.0, -24.0, 0.0, 1 );
Param( InnerFadeDownLen, double, wxTRANSLATE("InnerFadeDownLen"), 0.0, 0.0, 3.0, 1 );
Param( InnerFadeUpLen, double, wxTRANSLATE("InnerFadeUpLen"), 0.0, 0.0, 3.0, 1 );
Param( OuterFadeDownLen, double, wxTRANSLATE("OuterFadeDownLen"), 0.5, 0.0, 3.0, 1 );
Param( OuterFadeUpLen, double, wxTRANSLATE("OuterFadeUpLen"), 0.5, 0.0, 3.0, 1 );
Param( ThresholdDb, double, wxTRANSLATE("ThresholdDb"), -30.0, -100.0, 0.0, 1 );
Param( MaximumPause, double, wxTRANSLATE("MaximumPause"), 1.0, 0.0, DBL_MAX, 1 );
Param( DuckAmountDb, double, XO("DuckAmountDb"), -12.0, -24.0, 0.0, 1 );
Param( InnerFadeDownLen, double, XO("InnerFadeDownLen"), 0.0, 0.0, 3.0, 1 );
Param( InnerFadeUpLen, double, XO("InnerFadeUpLen"), 0.0, 0.0, 3.0, 1 );
Param( OuterFadeDownLen, double, XO("OuterFadeDownLen"), 0.5, 0.0, 3.0, 1 );
Param( OuterFadeUpLen, double, XO("OuterFadeUpLen"), 0.5, 0.0, 3.0, 1 );
Param( ThresholdDb, double, XO("ThresholdDb"), -30.0, -100.0, 0.0, 1 );
Param( MaximumPause, double, XO("MaximumPause"), 1.0, 0.0, DBL_MAX, 1 );
/*
* Common constants
@ -108,7 +108,7 @@ wxString EffectAutoDuck::GetSymbol()
wxString EffectAutoDuck::GetDescription()
{
return wxTRANSLATE("Reduces (ducks) the volume of one or more tracks whenever the volume of a specified \"control\" track reaches a particular level");
return XO("Reduces (ducks) the volume of one or more tracks whenever the volume of a specified \"control\" track reaches a particular level");
}
// EffectIdentInterface implementation

View File

@ -28,7 +28,7 @@ class EffectAutoDuckPanel;
#define AUTO_DUCK_PANEL_NUM_CONTROL_POINTS 5
#define AUTODUCK_PLUGIN_SYMBOL wxTRANSLATE("Auto Duck")
#define AUTODUCK_PLUGIN_SYMBOL XO("Auto Duck")
class EffectAutoDuck : public Effect
{

View File

@ -44,10 +44,10 @@ enum
// Define keys, defaults, minimums, and maximums for the effect parameters
//
// Name Type Key Def Min Max Scale
Param( Bass, double, wxTRANSLATE("Bass"), 0.0, -15.0, 15.0, 1 );
Param( Treble, double, wxTRANSLATE("Treble"), 0.0, -15.0, 15.0, 1 );
Param( Level, double, wxTRANSLATE("Level"), -1.0, -30.0, 0.0, 1 );
Param( Normalize, bool, wxTRANSLATE("Normalize"), true, false, true, 1 );
Param( Bass, double, XO("Bass"), 0.0, -15.0, 15.0, 1 );
Param( Treble, double, XO("Treble"), 0.0, -15.0, 15.0, 1 );
Param( Level, double, XO("Level"), -1.0, -30.0, 0.0, 1 );
Param( Normalize, bool, XO("Normalize"), true, false, true, 1 );
// Sliders are integer, so range is x 10
// to allow 1 decimal place resolution
@ -91,7 +91,7 @@ wxString EffectBassTreble::GetSymbol()
wxString EffectBassTreble::GetDescription()
{
return wxTRANSLATE("Increases or decreases the lower frequencies and higher frequencies of your audio independently");
return XO("Increases or decreases the lower frequencies and higher frequencies of your audio independently");
}
// EffectIdentInterface implementation

View File

@ -23,7 +23,7 @@
#include "Effect.h"
#define BASSTREBLE_PLUGIN_SYMBOL wxTRANSLATE("Bass and Treble")
#define BASSTREBLE_PLUGIN_SYMBOL XO("Bass and Treble")
class EffectBassTreble : public Effect
{

View File

@ -49,7 +49,7 @@ enum {
// Define keys, defaults, minimums, and maximums for the effect parameters
//
// Name Type Key Def Min Max Scale
Param( Percentage, double, wxTRANSLATE("Percentage"), 0.0, -99.0, 3000.0, 1 );
Param( Percentage, double, XO("Percentage"), 0.0, -99.0, 3000.0, 1 );
// We warp the slider to go up to 400%, but user can enter up to 3000%
static const double kSliderMax = 100.0; // warped above zero to actually go up to 400%
@ -109,7 +109,7 @@ wxString EffectChangePitch::GetSymbol()
wxString EffectChangePitch::GetDescription()
{
return wxTRANSLATE("Change the pitch of a track without changing its tempo");
return XO("Change the pitch of a track without changing its tempo");
}
// EffectIdentInterface implementation

View File

@ -31,7 +31,7 @@ the pitch without changing the tempo.
#include "SoundTouchEffect.h"
#define CHANGEPITCH_PLUGIN_SYMBOL wxTRANSLATE("Change Pitch")
#define CHANGEPITCH_PLUGIN_SYMBOL XO("Change Pitch")
class EffectChangePitch : public EffectSoundTouch
{

View File

@ -57,7 +57,7 @@ static const wxChar *kVinylStrings[kNumVinyl] =
wxT("45"),
wxT("78"),
/* i18n-hint: n/a is an English abbreviation meaning "not applicable". */
wxTRANSLATE("n/a"),
XO("n/a"),
};
// Soundtouch is not reasonable below -99% or above 3000%.
@ -65,7 +65,7 @@ static const wxChar *kVinylStrings[kNumVinyl] =
// Define keys, defaults, minimums, and maximums for the effect parameters
//
// Name Type Key Def Min Max Scale
Param( Percentage, double, wxTRANSLATE("Percentage"), 0.0, -99.0, 4900.0, 1 );
Param( Percentage, double, XO("Percentage"), 0.0, -99.0, 4900.0, 1 );
// We warp the slider to go up to 400%, but user can enter higher values
static const double kSliderMax = 100.0; // warped above zero to actually go up to 400%
@ -111,7 +111,7 @@ wxString EffectChangeSpeed::GetSymbol()
wxString EffectChangeSpeed::GetDescription()
{
return wxTRANSLATE("Change the speed of a track, also changing its pitch");
return XO("Change the speed of a track, also changing its pitch");
}
// EffectIdentInterface implementation

View File

@ -26,7 +26,7 @@
#include "Effect.h"
#define CHANGESPEED_PLUGIN_SYMBOL wxTRANSLATE("Change Speed")
#define CHANGESPEED_PLUGIN_SYMBOL XO("Change Speed")
class EffectChangeSpeed : public Effect
{

View File

@ -43,7 +43,7 @@ enum
// Define keys, defaults, minimums, and maximums for the effect parameters
//
// Name Type Key Def Min Max Scale
Param( Percentage, double, wxTRANSLATE("Percentage"), 0.0, -99.0, 3000.0, 1 );
Param( Percentage, double, XO("Percentage"), 0.0, -99.0, 3000.0, 1 );
// We warp the slider to go up to 400%, but user can enter higher values.
static const double kSliderMax = 100.0; // warped above zero to actually go up to 400%
@ -85,7 +85,7 @@ wxString EffectChangeTempo::GetSymbol()
wxString EffectChangeTempo::GetDescription()
{
return wxTRANSLATE("Change the tempo of a selection without changing its pitch");
return XO("Change the tempo of a selection without changing its pitch");
}
// EffectIdentInterface implementation

View File

@ -25,7 +25,7 @@
#include "SoundTouchEffect.h"
#define CHANGETEMPO_PLUGIN_SYMBOL wxTRANSLATE("Change Tempo")
#define CHANGETEMPO_PLUGIN_SYMBOL XO("Change Tempo")
class EffectChangeTempo : public EffectSoundTouch
{

View File

@ -46,8 +46,8 @@ enum
// Define keys, defaults, minimums, and maximums for the effect parameters
//
// Name Type Key Def Min Max Scale
Param( Threshold, int, wxTRANSLATE("Threshold"), 200, 0, 900, 1 );
Param( Width, int, wxTRANSLATE("Width"), 20, 0, 40, 1 );
Param( Threshold, int, XO("Threshold"), 200, 0, 900, 1 );
Param( Width, int, XO("Width"), 20, 0, 40, 1 );
BEGIN_EVENT_TABLE(EffectClickRemoval, wxEvtHandler)
EVT_SLIDER(ID_Thresh, EffectClickRemoval::OnThreshSlider)
@ -78,7 +78,7 @@ wxString EffectClickRemoval::GetSymbol()
wxString EffectClickRemoval::GetDescription()
{
return wxTRANSLATE("Click Removal is designed to remove clicks on audio tracks");
return XO("Click Removal is designed to remove clicks on audio tracks");
}
// EffectIdentInterface implementation

View File

@ -27,7 +27,7 @@
#include "Effect.h"
#define CLICKREMOVAL_PLUGIN_SYMBOL wxTRANSLATE("Click Removal")
#define CLICKREMOVAL_PLUGIN_SYMBOL XO("Click Removal")
class EffectClickRemoval : public Effect
{

View File

@ -52,13 +52,13 @@ enum
// Define keys, defaults, minimums, and maximums for the effect parameters
//
// Name Type Key Def Min Max Scale
Param( Threshold, double, wxTRANSLATE("Threshold"), -12.0, -60.0, -1.0, 1 );
Param( NoiseFloor, double, wxTRANSLATE("NoiseFloor"), -40.0, -80.0, -20.0, 5 );
Param( Ratio, double, wxTRANSLATE("Ratio"), 2.0, 1.5, 10.0, 2 );
Param( AttackTime, double, wxTRANSLATE("AttackTime"), 0.2, 0.1, 5.0, 100 );
Param( ReleaseTime, double, wxTRANSLATE("ReleaseTime"), 1.0, 1.0, 30.0, 10 );
Param( Normalize, bool, wxTRANSLATE("Normalize"), true, false, true, 1 );
Param( UsePeak, bool, wxTRANSLATE("UsePeak"), false, false, true, 1 );
Param( Threshold, double, XO("Threshold"), -12.0, -60.0, -1.0, 1 );
Param( NoiseFloor, double, XO("NoiseFloor"), -40.0, -80.0, -20.0, 5 );
Param( Ratio, double, XO("Ratio"), 2.0, 1.5, 10.0, 2 );
Param( AttackTime, double, XO("AttackTime"), 0.2, 0.1, 5.0, 100 );
Param( ReleaseTime, double, XO("ReleaseTime"), 1.0, 1.0, 30.0, 10 );
Param( Normalize, bool, XO("Normalize"), true, false, true, 1 );
Param( UsePeak, bool, XO("UsePeak"), false, false, true, 1 );
//----------------------------------------------------------------------------
// EffectCompressor
@ -112,7 +112,7 @@ wxString EffectCompressor::GetSymbol()
wxString EffectCompressor::GetDescription()
{
return wxTRANSLATE("Compresses the dynamic range of audio");
return XO("Compresses the dynamic range of audio");
}
// EffectIdentInterface implementation

View File

@ -27,7 +27,7 @@
class EffectCompressorPanel;
#define COMPRESSOR_PLUGIN_SYMBOL wxTRANSLATE("Compressor")
#define COMPRESSOR_PLUGIN_SYMBOL XO("Compressor")
class EffectCompressor : public EffectTwoPassSimpleMono
{

View File

@ -27,9 +27,9 @@
// Define keys, defaults, minimums, and maximums for the effect parameters
//
// Name Type Key Def Min Max Scale
Param( Sequence, wxString, wxTRANSLATE("Sequence"), wxT("audacity"), wxT(""), wxT(""), wxT(""));
Param( DutyCycle, double, wxTRANSLATE("Duty Cycle"), 55.0, 0.0, 100.0, 10.0 );
Param( Amplitude, double, wxTRANSLATE("Amplitude"), 0.8, 0.0, 1.0, 1 );
Param( Sequence, wxString, XO("Sequence"), wxT("audacity"), wxT(""), wxT(""), wxT(""));
Param( DutyCycle, double, XO("Duty Cycle"), 55.0, 0.0, 100.0, 10.0 );
Param( Amplitude, double, XO("Amplitude"), 0.8, 0.0, 1.0, 1 );
static const double kFadeInOut = 250.0; // used for fadein/out needed to remove clicking noise
@ -62,7 +62,6 @@ EffectDtmf::EffectDtmf()
dtmfDutyCycle = DEF_DutyCycle;
dtmfAmplitude = DEF_Amplitude;
dtmfString = DEF_Sequence;
mDuration = GetDefaultDuration();
dtmfTone = 0.0;
dtmfSilence = 0.0;
}
@ -80,7 +79,7 @@ wxString EffectDtmf::GetSymbol()
wxString EffectDtmf::GetDescription()
{
return wxTRANSLATE("Generates dual-tone multi-frequency (DTMF) tones like those produced by the keypad on telephones");
return XO("Generates dual-tone multi-frequency (DTMF) tones like those produced by the keypad on telephones");
}
// EffectIdentInterface implementation
@ -99,6 +98,8 @@ int EffectDtmf::GetAudioOutCount()
bool EffectDtmf::ProcessInitialize(sampleCount WXUNUSED(totalLen), ChannelNames WXUNUSED(chanMap))
{
double duration = GetDuration();
// all dtmf sequence durations in samples from seconds
// MJS: Note that mDuration is in seconds but will have been quantised to the units of the TTC.
// If this was 'samples' and the project rate was lower than the track rate,
@ -106,7 +107,7 @@ bool EffectDtmf::ProcessInitialize(sampleCount WXUNUSED(totalLen), ChannelNames
// However we are making our best efforts at creating what was asked for.
sampleCount nT0 = (sampleCount)floor(mT0 * mSampleRate + 0.5);
sampleCount nT1 = (sampleCount)floor((mT0 + mDuration) * mSampleRate + 0.5);
sampleCount nT1 = (sampleCount)floor((mT0 + duration) * mSampleRate + 0.5);
numSamplesSequence = nT1 - nT0; // needs to be exact number of samples selected
//make under-estimates if anything, and then redistribute the few remaining samples
@ -280,17 +281,6 @@ void EffectDtmf::PopulateOrExchange(ShuttleGui & S)
// value from saved config: this is useful is user wants to
// replace selection with dtmf sequence
bool isSelection = false;
if (mT1 > mT0) {
// there is a selection: let's fit in there...
// MJS: note that this is just for the TTC and is independent of the track rate
// but we do need to make sure we have the right number of samples at the project rate
double quantMT0 = QUANTIZED_TIME(mT0, mProjectRate);
double quantMT1 = QUANTIZED_TIME(mT1, mProjectRate);
mDuration = quantMT1 - quantMT0;
isSelection = true;
}
S.AddSpace(0, 5);
S.StartMultiColumn(2, wxCENTER);
{
@ -302,17 +292,16 @@ void EffectDtmf::PopulateOrExchange(ShuttleGui & S)
vldAmp.SetRange(MIN_Amplitude, MAX_Amplitude);
S.AddTextBox(_("Amplitude (0-1):"), wxT(""), 10)->SetValidator(vldAmp);
bool isSelection;
double duration = GetDuration(&isSelection);
S.AddPrompt(_("Duration:"));
mDtmfDurationT = new
NumericTextCtrl(NumericConverter::TIME,
S.GetParent(),
wxID_ANY,
/* use this instead of "seconds" because if a selection is passed to the
* effect, I want it (mDuration) to be used as the duration, and with
* "seconds" this does not always work properly. For example, it rounds
* down to zero... */
isSelection ? _("hh:mm:ss + samples") : _("hh:mm:ss + milliseconds"),
mDuration,
duration,
mProjectRate,
wxDefaultPosition,
wxDefaultSize,
@ -355,7 +344,8 @@ bool EffectDtmf::TransferDataToWindow()
}
mDtmfDutyS->SetValue(dtmfDutyCycle * SCL_DutyCycle);
mDtmfDurationT->SetValue(mDuration);
mDtmfDurationT->SetValue(GetDuration());
UpdateUI();
@ -370,7 +360,7 @@ bool EffectDtmf::TransferDataFromWindow()
}
dtmfDutyCycle = (double) mDtmfDutyS->GetValue() / SCL_DutyCycle;
mDuration = mDtmfDurationT->GetValue();
SetDuration(mDtmfDurationT->GetValue());
// recalculate to make sure all values are up-to-date. This is especially
// important if the user did not change any values in the dialog
@ -391,13 +381,13 @@ void EffectDtmf::Recalculate()
// no tones, all zero: don't do anything
// this should take care of the case where user got an empty
// dtmf sequence into the generator: track won't be generated
mDuration = 0;
SetDuration(0.0);
dtmfTone = 0;
dtmfSilence = mDuration;
dtmfSilence = 0;
} else {
if (dtmfNTones==1) {
// single tone, as long as the sequence
dtmfTone = mDuration;
dtmfTone = GetDuration();
dtmfSilence = 0;
} else {
// Don't be fooled by the fact that you divide the sequence into dtmfNTones:
@ -409,7 +399,7 @@ void EffectDtmf::Recalculate()
// which can be simplified in the one below.
// Then just take the part that belongs to tone or silence.
//
double slot = mDuration / ((double)dtmfNTones + (dtmfDutyCycle / 100.0) - 1);
double slot = GetDuration() / ((double)dtmfNTones + (dtmfDutyCycle / 100.0) - 1);
dtmfTone = slot * (dtmfDutyCycle / 100.0); // seconds
dtmfSilence = slot * (1.0 - (dtmfDutyCycle / 100.0)); // seconds
@ -572,7 +562,7 @@ void EffectDtmf::OnSlider(wxCommandEvent & evt)
void EffectDtmf::OnText(wxCommandEvent & WXUNUSED(evt))
{
mDuration = mDtmfDurationT->GetValue();
SetDuration(mDtmfDurationT->GetValue());
mUIParent->TransferDataFromWindow();
Recalculate();
UpdateUI();

View File

@ -24,7 +24,7 @@
#include "Effect.h"
#define DTMFTONES_PLUGIN_SYMBOL wxTRANSLATE("DTMF Tones")
#define DTMFTONES_PLUGIN_SYMBOL XO("DTMF Tones")
class EffectDtmf : public Effect
{

View File

@ -32,8 +32,8 @@
// Define keys, defaults, minimums, and maximums for the effect parameters
//
// Name Type Key Def Min Max Scale
Param( Delay, float, wxTRANSLATE("Delay"), 1.0, 0.0, FLT_MAX, 1 );
Param( Decay, float, wxTRANSLATE("Decay"), 0.5, 1.0, 1.0, 1 );
Param( Delay, float, XO("Delay"), 1.0, 0.0, FLT_MAX, 1 );
Param( Decay, float, XO("Decay"), 0.5, 1.0, 1.0, 1 );
EffectEcho::EffectEcho()
{
@ -54,7 +54,7 @@ wxString EffectEcho::GetSymbol()
wxString EffectEcho::GetDescription()
{
return wxTRANSLATE("Repeats the selected audio again and again");
return XO("Repeats the selected audio again and again");
}
// EffectIdentInterface implementation

View File

@ -20,7 +20,7 @@
#include "Effect.h"
#define ECHO_PLUGIN_SYMBOL wxTRANSLATE("Echo")
#define ECHO_PLUGIN_SYMBOL XO("Echo")
class EffectEcho : public Effect
{

View File

@ -646,26 +646,64 @@ double Effect::GetDefaultDuration()
return 30.0;
}
double Effect::GetDuration()
double Effect::GetDuration(bool *isSelection)
{
if (mT1 > mT0)
{
return mT1 - mT0;
// there is a selection: let's fit in there...
// MJS: note that this is just for the TTC and is independent of the track rate
// but we do need to make sure we have the right number of samples at the project rate
double quantMT0 = QUANTIZED_TIME(mT0, mProjectRate);
double quantMT1 = QUANTIZED_TIME(mT1, mProjectRate);
mDuration = quantMT1 - quantMT0;
if (isSelection)
{
*isSelection = true;
}
return mDuration;
}
if (isSelection)
{
*isSelection = false;
}
GetPrivateConfig(GetCurrentSettingsGroup(), wxT("LastUsedDuration"), mDuration, 0.0);
if (mDuration > 0.0)
{
return mDuration;
}
if (mDuration < 0.0)
{
mDuration = 0.0;
}
if (GetType() == EffectTypeGenerate)
{
return GetDefaultDuration();
mDuration = GetDefaultDuration();
}
return 0;
return mDuration;
}
bool Effect::SetDuration(double seconds)
void Effect::SetDuration(double seconds)
{
if (seconds < 0.0)
{
seconds = 0.0;
}
if (mDuration != seconds)
{
SetPrivateConfig(GetCurrentSettingsGroup(), wxT("LastUsedDuration"), seconds);
}
mDuration = seconds;
return true;
return;
}
bool Effect::Apply()
@ -961,9 +999,7 @@ bool Effect::DoEffect(wxWindow *parent,
SelectedRegion *selectedRegion,
bool shouldPrompt /* = true */)
{
double t0 = selectedRegion->t0();
double t1 = selectedRegion->t1();
wxASSERT(t0 <= t1);
wxASSERT(selectedRegion->duration() >= 0.0);
if (mOutputTracks)
{
@ -975,8 +1011,9 @@ bool Effect::DoEffect(wxWindow *parent,
mProjectRate = projectRate;
mParent = parent;
mTracks = list;
mT0 = t0;
mT1 = t1;
mT0 = selectedRegion->t0();
mT1 = selectedRegion->t1();
mDuration = GetDuration();
#ifdef EXPERIMENTAL_SPECTRAL_EDITING
mF0 = selectedRegion->f0();
mF1 = selectedRegion->f1();
@ -2409,6 +2446,10 @@ public:
EffectPanel(wxWindow *parent)
: wxPanel(parent)
{
// This fools NVDA into not saying "Panel" when the dialog gets focus
SetName(wxT("\a"));
SetLabel(wxT("\a"));
mAcceptsFocus = true;
}
@ -2593,6 +2634,10 @@ bool EffectUIHost::Initialize()
wxPanel *bar = new wxPanel(this, wxID_ANY);
// This fools NVDA into not saying "Panel" when the dialog gets focus
bar->SetName(wxT("\a"));
bar->SetLabel(wxT("\a"));
wxBoxSizer *bs = new wxBoxSizer(wxHORIZONTAL);
mSupportsRealtime = mEffect->SupportsRealtime();

View File

@ -144,8 +144,8 @@ class AUDACITY_DLL_API Effect : public wxEvtHandler,
// EffectHostInterface implementation
virtual double GetDefaultDuration();
virtual double GetDuration();
virtual bool SetDuration(double duration);
virtual double GetDuration(bool *isSelection = NULL);
virtual void SetDuration(double duration);
virtual bool Apply();
virtual void Preview();
@ -344,7 +344,6 @@ protected:
wxDialog *mUIDialog;
wxWindow *mUIParent;
double mDuration;
sampleCount mSampleCnt;
// type of the tracks on mOutputTracks
@ -373,6 +372,8 @@ protected:
private:
wxWindow *mParent;
double mDuration;
wxArrayPtrVoid mIMap;
wxArrayPtrVoid mOMap;

View File

@ -143,9 +143,9 @@ enum kInterpolations
static const wxString kInterpStrings[kNumInterpolations] =
{
/* i18n-hint: Technical term for a kind of curve.*/
wxTRANSLATE("B-spline"),
wxTRANSLATE("Cosine"),
wxTRANSLATE("Cubic")
XO("B-spline"),
XO("Cosine"),
XO("Cubic")
};
static const double kThirdOct[] =
@ -158,10 +158,10 @@ static const double kThirdOct[] =
// Define keys, defaults, minimums, and maximums for the effect parameters
//
// Name Type Key Def Min Max Scale
Param( FilterLength, int, wxTRANSLATE("FilterLength"), 4001, 21, 8191, 0 );
Param( CurveName, wxChar*, wxTRANSLATE("CurveName"), wxT("unnamed"), wxT(""), wxT(""), wxT(""));
Param( InterpLin, bool, wxTRANSLATE("InterpolateLin"), false, false, true, false );
Param( InterpMeth, int, wxTRANSLATE("InterpolationMethod"), 0, 0, 0, 0 );
Param( FilterLength, int, XO("FilterLength"), 4001, 21, 8191, 0 );
Param( CurveName, wxChar*, XO("CurveName"), wxT("unnamed"), wxT(""), wxT(""), wxT(""));
Param( InterpLin, bool, XO("InterpolateLin"), false, false, true, false );
Param( InterpMeth, int, XO("InterpolationMethod"), 0, 0, 0, 0 );
Param( DrawMode, bool, wxT(""), true, false, true, false );
Param( DrawGrid, bool, wxT(""), true, false, true, false );
Param( dBMin, float, wxT(""), -30.0, -120.0, -10.0, 0 );
@ -323,7 +323,7 @@ wxString EffectEqualization::GetSymbol()
wxString EffectEqualization::GetDescription()
{
return wxTRANSLATE("Adjusts the volume levels of particular frequencies");
return XO("Adjusts the volume levels of particular frequencies");
}
// EffectIdentInterface implementation

View File

@ -42,7 +42,7 @@
#include "../widgets/Ruler.h"
#include "../RealFFTf.h"
#define EQUALIZATION_PLUGIN_SYMBOL wxTRANSLATE("Equalization")
#define EQUALIZATION_PLUGIN_SYMBOL XO("Equalization")
class EqualizationPanel;

View File

@ -40,8 +40,8 @@ wxString EffectFade::GetSymbol()
wxString EffectFade::GetDescription()
{
return mFadeIn
? wxTRANSLATE("Applies a linear fade-in to the selected audio")
: wxTRANSLATE("Applies a linear fade-out to the selected audio");
? XO("Applies a linear fade-in to the selected audio")
: XO("Applies a linear fade-out to the selected audio");
}
// EffectIdentInterface implementation

View File

@ -15,8 +15,8 @@
#include "Effect.h"
#define FADEIN_PLUGIN_SYMBOL wxTRANSLATE("Fade In")
#define FADEOUT_PLUGIN_SYMBOL wxTRANSLATE("Fade Out")
#define FADEIN_PLUGIN_SYMBOL XO("Fade In")
#define FADEOUT_PLUGIN_SYMBOL XO("Fade Out")
class EffectFade : public Effect
{

View File

@ -30,11 +30,11 @@
#include "FindClipping.h"
#define DEF_Start 3
#define MIN_Start 1
#define DEF_Stop 3
#define MIN_Stop 1
// Define keys, defaults, minimums, and maximums for the effect parameters
//
// Name Type Key Def Min Max Scale
Param( Start, int, XO("Duty Cycle"), 3, 1, INT_MAX, 1 );
Param( Stop, int, XO("Duty Cycle"), 3, 1, INT_MAX, 1 );
EffectFindClipping::EffectFindClipping()
{
@ -55,7 +55,7 @@ wxString EffectFindClipping::GetSymbol()
wxString EffectFindClipping::GetDescription()
{
return wxTRANSLATE("This displays runs of clipped samples in a Label Track");
return XO("This displays runs of clipped samples in a Label Track");
}
// EffectIdentInterface implementation
@ -69,24 +69,19 @@ EffectType EffectFindClipping::GetType()
bool EffectFindClipping::GetAutomationParameters(EffectAutomationParameters & parms)
{
parms.Write(wxT("Start"), mStart);
parms.Write(wxT("Stop"), mStop);
parms.Write(KEY_Start, mStart);
parms.Write(KEY_Stop, mStop);
return true;
}
bool EffectFindClipping::SetAutomationParameters(EffectAutomationParameters & parms)
{
int start;
int stop;
ReadAndVerifyInt(Start);
ReadAndVerifyInt(Stop);
parms.Read(wxT("Start"), &start, DEF_Start);
parms.Read(wxT("Stop"), &stop, DEF_Stop);
if (start < MIN_Start || stop < MIN_Stop)
{
return false;
}
mStart = Start;
mStop = Stop;
return true;
}

View File

@ -21,7 +21,7 @@ class wxString;
#include "Effect.h"
#define FINDCLIPPING_PLUGIN_SYMBOL wxTRANSLATE("Find Clipping")
#define FINDCLIPPING_PLUGIN_SYMBOL XO("Find Clipping")
class EffectFindClipping : public Effect
{

View File

@ -23,7 +23,7 @@
bool Generator::Process()
{
if (mDuration < 0.0)
if (GetDuration() < 0.0)
return false;
@ -49,7 +49,7 @@ bool Generator::Process()
//make sure there's room.
if (!editClipCanMove &&
track->IsEmpty(mT0, mT1+1.0/track->GetRate()) &&
!track->IsEmpty(mT0, mT0+mDuration-(mT1-mT0)-1.0/track->GetRate()))
!track->IsEmpty(mT0, mT0+GetDuration()-(mT1-mT0)-1.0/track->GetRate()))
{
wxMessageBox(
_("There is not enough room available to generate the audio"),
@ -58,7 +58,7 @@ bool Generator::Process()
return false;
}
if (mDuration > 0.0)
if (GetDuration() > 0.0)
{
// Create a temporary track
std::auto_ptr<WaveTrack> tmp(
@ -74,7 +74,7 @@ bool Generator::Process()
else {
// Transfer the data from the temporary track to the actual one
tmp->Flush();
SetTimeWarper(new StepTimeWarper(mT0+mDuration, mDuration-(mT1-mT0)));
SetTimeWarper(new StepTimeWarper(mT0+GetDuration(), GetDuration()-(mT1-mT0)));
bGoodResult = track->ClearAndPaste(mT0, mT1, &*tmp, true,
false, GetTimeWarper());
}
@ -94,7 +94,7 @@ bool Generator::Process()
ntrack++;
}
else if (t->IsSyncLockSelected()) {
t->SyncLockAdjust(mT1, mT0 + mDuration);
t->SyncLockAdjust(mT1, mT0 + GetDuration());
}
// Move on to the next track
t = iter.Next();
@ -104,7 +104,7 @@ bool Generator::Process()
this->ReplaceProcessedTracks(bGoodResult);
mT1 = mT0 + mDuration; // Update selection.
mT1 = mT0 + GetDuration(); // Update selection.
return true;
}
@ -114,7 +114,7 @@ bool BlockGenerator::GenerateTrack(WaveTrack *tmp,
int ntrack)
{
bool bGoodResult = true;
numSamples = track.TimeToLongSamples(mDuration);
numSamples = track.TimeToLongSamples(GetDuration());
sampleCount i = 0;
float *data = new float[tmp->GetMaxBlockSize()];
sampleCount block = 0;

View File

@ -24,12 +24,9 @@
class Generator : public Effect
{
public:
Generator() : mDuration(GetDefaultDuration()) { }
Generator() { }
protected:
// Amount of time to generate, in seconds
double mDuration;
// [ GenerateTrack() must be overridden by the actual generator class ]
// Precondition: mDuration > 0.0
// Postcondition: <tmp> is filled with the data intended for <track>

View File

@ -37,7 +37,7 @@ wxString EffectInvert::GetSymbol()
wxString EffectInvert::GetDescription()
{
return wxTRANSLATE("Flips the audio samples upside-down, reversing their polarity");
return XO("Flips the audio samples upside-down, reversing their polarity");
}
// EffectIdentInterface implementation

View File

@ -17,7 +17,7 @@
#include "Effect.h"
#define INVERT_PLUGIN_SYMBOL wxTRANSLATE("Invert")
#define INVERT_PLUGIN_SYMBOL XO("Invert")
class EffectInvert : public Effect
{

View File

@ -38,19 +38,19 @@ enum kPasses
static const wxString kPassStrings[kNumPasses] =
{
/* i18n-hint: Of strength of an effect. Not strongly.*/
wxTRANSLATE("Light"),
wxTRANSLATE("Moderate"),
XO("Light"),
XO("Moderate"),
/* i18n-hint: Of strength of an effect. Strongly.*/
wxTRANSLATE("Heavy"),
wxTRANSLATE("Heavier"),
wxTRANSLATE("Heaviest"),
XO("Heavy"),
XO("Heavier"),
XO("Heaviest"),
};
// Define keys, defaults, minimums, and maximums for the effect parameters
//
// Name Type Key Def Min Max Scale
Param( Level, int, wxTRANSLATE("dB"), 10, 0, Enums::NumDbChoices - 1, 1 );
Param( Passes, int, wxTRANSLATE("Passes"), kModerate, 0, kNumPasses - 1, 1 );
Param( Level, int, XO("dB"), 10, 0, Enums::NumDbChoices - 1, 1 );
Param( Passes, int, XO("Passes"), kModerate, 0, kNumPasses - 1, 1 );
//
// EffectLeveller
@ -80,7 +80,7 @@ wxString EffectLeveller::GetSymbol()
wxString EffectLeveller::GetDescription()
{
return wxTRANSLATE("Leveler is a simple, combined compressor and limiter effect for reducing the dynamic range of audio");
return XO("Leveler is a simple, combined compressor and limiter effect for reducing the dynamic range of audio");
}
// EffectIdentInterface implementation

View File

@ -18,7 +18,7 @@
#include "Effect.h"
#define LEVELLER_PLUGIN_SYMBOL wxTRANSLATE("Leveller")
#define LEVELLER_PLUGIN_SYMBOL XO("Leveller")
class EffectLeveller : public Effect
{

View File

@ -220,17 +220,17 @@ wxString BuiltinEffectsModule::GetPath()
wxString BuiltinEffectsModule::GetSymbol()
{
return wxTRANSLATE("Builtin Effects");
return XO("Builtin Effects");
}
wxString BuiltinEffectsModule::GetName()
{
return wxTRANSLATE("Builtin Effects");
return XO("Builtin Effects");
}
wxString BuiltinEffectsModule::GetVendor()
{
return wxTRANSLATE("The Audacity Team");
return XO("The Audacity Team");
}
wxString BuiltinEffectsModule::GetVersion()
@ -241,7 +241,7 @@ wxString BuiltinEffectsModule::GetVersion()
wxString BuiltinEffectsModule::GetDescription()
{
return wxTRANSLATE("Provides builtin effects to Audacity");
return XO("Provides builtin effects to Audacity");
}
// ============================================================================

View File

@ -37,14 +37,16 @@ enum kTypes
static const wxChar *kTypeStrings[kNumTypes] =
{
wxTRANSLATE("White"),
wxTRANSLATE("Pink"),
wxTRANSLATE("Brownian")
XO("White"),
XO("Pink"),
XO("Brownian")
};
// Define keys, defaults, minimums, and maximums for the effect parameters
//
// Name Type Key Def Min Max Scale
Param( Type, int, wxTRANSLATE("Type"), kWhite, 0, kNumTypes - 1, 1 );
Param( Amp, double, wxTRANSLATE("Amplitude"), 0.8, 0.0, 1.0, 1 );
Param( Type, int, XO("Type"), kWhite, 0, kNumTypes - 1, 1 );
Param( Amp, double, XO("Amplitude"), 0.8, 0.0, 1.0, 1 );
//
// EffectNoise
@ -54,7 +56,6 @@ EffectNoise::EffectNoise()
{
mType = DEF_Type;
mAmp = DEF_Amp;
mDuration = GetDefaultDuration();
y = z = buf0 = buf1 = buf2 = buf3 = buf4 = buf5 = buf6 = 0;
}
@ -72,7 +73,7 @@ wxString EffectNoise::GetSymbol()
wxString EffectNoise::GetDescription()
{
return wxTRANSLATE("Generates one of three different types of noise");
return XO("Generates one of three different types of noise");
}
// EffectIdentInterface implementation
@ -220,18 +221,17 @@ void EffectNoise::PopulateOrExchange(ShuttleGui & S)
FloatingPointValidator<double> vldAmp(1, &mAmp, NUM_VAL_NO_TRAILING_ZEROES);
vldAmp.SetRange(MIN_Amp, MAX_Amp);
S.AddTextBox(_("Amplitude (0-1):"), wxT(""), 12)->SetValidator(vldAmp);
S.AddPrompt(_("Duration:"));
bool isSelection;
double duration = GetDuration(&isSelection);
S.AddPrompt(_("Duration:"));
mNoiseDurationT = new
NumericTextCtrl(NumericConverter::TIME,
S.GetParent(),
wxID_ANY,
/* use this instead of "seconds" because if a selection is passed to
* the effect, I want it (nDuration) to be used as the duration, and
* with "seconds" this does not always work properly. For example,
* it rounds down to zero... */
(mT1 > mT0) ? _("hh:mm:ss + samples") : _("hh:mm:ss + milliseconds"),
mDuration,
isSelection ? _("hh:mm:ss + samples") : _("hh:mm:ss + milliseconds"),
duration,
mProjectRate,
wxDefaultPosition,
wxDefaultSize,
@ -250,7 +250,7 @@ bool EffectNoise::TransferDataToWindow()
return false;
}
mNoiseDurationT->SetValue(mDuration);
mNoiseDurationT->SetValue(GetDuration());
return true;
}
@ -262,7 +262,7 @@ bool EffectNoise::TransferDataFromWindow()
return false;
}
mDuration = mNoiseDurationT->GetValue();
SetDuration(mNoiseDurationT->GetValue());
return true;
}

View File

@ -20,7 +20,7 @@
#include "Effect.h"
#define NOISE_PLUGIN_SYMBOL wxTRANSLATE("Noise")
#define NOISE_PLUGIN_SYMBOL XO("Noise")
class EffectNoise : public Effect
{

View File

@ -426,7 +426,7 @@ wxString EffectNoiseReduction::GetSymbol()
wxString EffectNoiseReduction::GetDescription()
{
return wxTRANSLATE("Removes background noise such as fans, tape noise, or hums");
return XO("Removes background noise such as fans, tape noise, or hums");
}
// EffectIdentInterface implementation
@ -1451,26 +1451,26 @@ const ControlInfo *controlInfo() {
static const ControlInfo table[] = {
ControlInfo(&EffectNoiseReduction::Settings::mNoiseGain,
0.0, 48.0, 48, wxT("%d"), true,
wxTRANSLATE("&Noise reduction (dB):"), wxTRANSLATE("Noise reduction")),
XO("&Noise reduction (dB):"), XO("Noise reduction")),
ControlInfo(&EffectNoiseReduction::Settings::mNewSensitivity,
0.0, 24.0, 48, wxT("%.2f"), false,
wxTRANSLATE("&Sensitivity:"), wxTRANSLATE("Sensitivity")),
XO("&Sensitivity:"), XO("Sensitivity")),
#ifdef ATTACK_AND_RELEASE
ControlInfo(&EffectNoiseReduction::Settings::mAttackTime,
0, 1.0, 100, wxT("%.2f"), false,
wxTRANSLATE("Attac&k time (secs):"), wxTRANSLATE("Attack time")),
XO("Attac&k time (secs):"), XO("Attack time")),
ControlInfo(&EffectNoiseReduction::Settings::mReleaseTime,
0, 1.0, 100, wxT("%.2f"), false,
wxTRANSLATE("R&elease time (secs):"), wxTRANSLATE("Release time")),
XO("R&elease time (secs):"), XO("Release time")),
#endif
ControlInfo(&EffectNoiseReduction::Settings::mFreqSmoothingBands,
0, 6, 6, wxT("%d"), true,
wxTRANSLATE("&Frequency smoothing (bands):"), wxTRANSLATE("Frequency smoothing")),
XO("&Frequency smoothing (bands):"), XO("Frequency smoothing")),
#ifdef ADVANCED_SETTINGS
ControlInfo(&EffectNoiseReduction::Settings::mOldSensitivity,
-20.0, 20.0, 4000, wxT("%.2f"), false,
wxTRANSLATE("Sensiti&vity (dB):"), wxTRANSLATE("Old Sensitivity")),
XO("Sensiti&vity (dB):"), XO("Old Sensitivity")),
// add here
#endif
};

View File

@ -17,7 +17,7 @@
#include <memory>
#define NOISEREDUCTION_PLUGIN_SYMBOL wxTRANSLATE("Noise Reduction")
#define NOISEREDUCTION_PLUGIN_SYMBOL XO("Noise Reduction")
class EffectNoiseReduction: public Effect {
public:

View File

@ -115,12 +115,12 @@ EffectNoiseRemoval::~EffectNoiseRemoval()
wxString EffectNoiseRemoval::GetSymbol()
{
return wxTRANSLATE("Noise Removal");
return XO("Noise Removal");
}
wxString EffectNoiseRemoval::GetDescription()
{
return wxTRANSLATE("Removes constant background noise such as fans, tape noise, or hums");
return XO("Removes constant background noise such as fans, tape noise, or hums");
}
// EffectIdentInterface implementation

View File

@ -33,10 +33,10 @@
// Define keys, defaults, minimums, and maximums for the effect parameters
//
// Name Type Key Def Min Max Scale
Param( Level, double, wxTRANSLATE("Level"), 0.0, -145.0, 0.0, 1 );
Param( RemoveDC, bool, wxTRANSLATE("RemoveDcOffset"), true, false, true, 1 );
Param( ApplyGain, bool, wxTRANSLATE("ApplyGain"), true, false, true, 1 );
Param( StereoInd, bool, wxTRANSLATE("StereoIndependent"), false, false, true, 1 );
Param( Level, double, XO("Level"), 0.0, -145.0, 0.0, 1 );
Param( RemoveDC, bool, XO("RemoveDcOffset"), true, false, true, 1 );
Param( ApplyGain, bool, XO("ApplyGain"), true, false, true, 1 );
Param( StereoInd, bool, XO("StereoIndependent"), false, false, true, 1 );
BEGIN_EVENT_TABLE(EffectNormalize, wxEvtHandler)
EVT_CHECKBOX(wxID_ANY, EffectNormalize::OnUpdateUI)
@ -64,7 +64,7 @@ wxString EffectNormalize::GetSymbol()
wxString EffectNormalize::GetDescription()
{
return wxTRANSLATE("Sets the peak amplitude of a one or more tracks");
return XO("Sets the peak amplitude of a one or more tracks");
}
// EffectIdentInterface implementation

View File

@ -23,7 +23,7 @@
#include "Effect.h"
#define NORMALIZE_PLUGIN_SYMBOL wxTRANSLATE("Normalize")
#define NORMALIZE_PLUGIN_SYMBOL XO("Normalize")
class EffectNormalize : public Effect
{

View File

@ -28,11 +28,10 @@
#include "Paulstretch.h"
// Define keys, defaults, minimums, and maximums for the effect parameters
//
// Name Type Key Def Min Max Scale
Param( Amount, float, wxTRANSLATE("Stretch Factor"), 10.0, 1.0, FLT_MAX, 1 );
Param( Time, float, wxTRANSLATE("Time Resolution"), 0.25f, 0.001f, FLT_MAX, 1 );
Param( Amount, float, XO("Stretch Factor"), 10.0, 1.0, FLT_MAX, 1 );
Param( Time, float, XO("Time Resolution"), 0.25f, 0.001f, FLT_MAX, 1 );
class PaulStretch
{
@ -95,7 +94,7 @@ wxString EffectPaulstretch::GetSymbol()
wxString EffectPaulstretch::GetDescription()
{
return wxTRANSLATE("Use Paulstretch only for an extreme time-stretch or \"stasis\" effect");
return XO("Use Paulstretch only for an extreme time-stretch or \"stasis\" effect");
}
// EffectIdentInterface implementation

View File

@ -17,7 +17,7 @@
#include "Effect.h"
#define PAULSTRETCH_PLUGIN_SYMBOL wxTRANSLATE("Paulstretch")
#define PAULSTRETCH_PLUGIN_SYMBOL XO("Paulstretch")
class EffectPaulstretch : public Effect
{

View File

@ -39,13 +39,15 @@ enum
ID_Feedback
};
// Define keys, defaults, minimums, and maximums for the effect parameters
//
// Name Type Key Def Min Max Scale
Param( Stages, int, wxTRANSLATE("Stages"), 2, 2, NUM_STAGES, 1 );
Param( DryWet, int, wxTRANSLATE("DryWet"), 128, 0, 255, 1 );
Param( Freq, double, wxTRANSLATE("Freq"), 0.4, 0.1, 4.0, 10 );
Param( Phase, double, wxTRANSLATE("Phase"), 0.0, 0.0, 359.0, 1 );
Param( Depth, int, wxTRANSLATE("Depth"), 100, 0, 255, 1 );
Param( Feedback, int, wxTRANSLATE("Feedback"), 0, -100, 100, 1 );
Param( Stages, int, XO("Stages"), 2, 2, NUM_STAGES, 1 );
Param( DryWet, int, XO("DryWet"), 128, 0, 255, 1 );
Param( Freq, double, XO("Freq"), 0.4, 0.1, 4.0, 10 );
Param( Phase, double, XO("Phase"), 0.0, 0.0, 359.0, 1 );
Param( Depth, int, XO("Depth"), 100, 0, 255, 1 );
Param( Feedback, int, XO("Feedback"), 0, -100, 100, 1 );
//
#define phaserlfoshape 4.0
@ -95,7 +97,7 @@ wxString EffectPhaser::GetSymbol()
wxString EffectPhaser::GetDescription()
{
return wxTRANSLATE("Combines phase-shifted signals with the original signal");
return XO("Combines phase-shifted signals with the original signal");
}
// EffectIdentInterface implementation

View File

@ -27,7 +27,7 @@
#define NUM_STAGES 24
#define PHASER_PLUGIN_SYMBOL wxTRANSLATE("Phaser")
#define PHASER_PLUGIN_SYMBOL XO("Phaser")
class EffectPhaser : public Effect
{

View File

@ -50,7 +50,7 @@ wxString EffectRepair::GetSymbol()
wxString EffectRepair::GetDescription()
{
return wxTRANSLATE("Sets the peak amplitude of a one or more tracks");
return XO("Sets the peak amplitude of a one or more tracks");
}
// EffectIdentInterface implementation

View File

@ -15,7 +15,7 @@
#include "Effect.h"
#define REPAIR_PLUGIN_SYMBOL wxTRANSLATE("Repair")
#define REPAIR_PLUGIN_SYMBOL XO("Repair")
class WaveTrack;

View File

@ -35,6 +35,11 @@
#include "Repeat.h"
// Define keys, defaults, minimums, and maximums for the effect parameters
//
// Name Type Key Def Min Max Scale
Param( Count, int, XO("Count"), 10, 2, INT_MAX, 1 );
BEGIN_EVENT_TABLE(EffectRepeat, wxEvtHandler)
EVT_TEXT(wxID_ANY, EffectRepeat::OnRepeatTextChange)
END_EVENT_TABLE()
@ -57,7 +62,7 @@ wxString EffectRepeat::GetSymbol()
wxString EffectRepeat::GetDescription()
{
return wxTRANSLATE("Repeats the selection the specified number of times");
return XO("Repeats the selection the specified number of times");
}
// EffectIdentInterface implementation
@ -71,23 +76,16 @@ EffectType EffectRepeat::GetType()
bool EffectRepeat::GetAutomationParameters(EffectAutomationParameters & parms)
{
parms.Write(wxT("Count"), repeatCount);
parms.Write(KEY_Count, repeatCount);
return true;
}
bool EffectRepeat::SetAutomationParameters(EffectAutomationParameters & parms)
{
int count;
ReadAndVerifyInt(Count);
parms.Read(wxT("Count"), &count, 10);
if (count < 0 || count > 2147483647 / mProjectRate)
{
return false;
}
repeatCount = count;
repeatCount = Count;
return true;
}
@ -174,7 +172,7 @@ void EffectRepeat::PopulateOrExchange(ShuttleGui & S)
S.StartHorizontalLay(wxCENTER, false);
{
IntegerValidator<int> vldRepeatCount(&repeatCount);
vldRepeatCount.SetRange(1, 2147483647 / mProjectRate);
vldRepeatCount.SetRange(MIN_Count, 2147483647 / mProjectRate);
mRepeatCount = S.AddTextBox(_("Number of times to repeat:"), wxT(""), 12);
mRepeatCount->SetValidator(vldRepeatCount);
}

View File

@ -20,7 +20,7 @@
#include "Effect.h"
#define REPEAT_PLUGIN_SYMBOL wxTRANSLATE("Repeat")
#define REPEAT_PLUGIN_SYMBOL XO("Repeat")
class EffectRepeat : public Effect
{

View File

@ -43,16 +43,16 @@ enum
// Define keys, defaults, minimums, and maximums for the effect parameters
//
// Name Type Key Def Min Max Scale
Param( RoomSize, double, wxTRANSLATE("RoomSize"), 75, 0, 100, 1 );
Param( PreDelay, double, wxTRANSLATE("Delay"), 10, 0, 200, 1 );
Param( Reverberance, double, wxTRANSLATE("Reverberance"), 50, 0, 100, 1 );
Param( HfDamping, double, wxTRANSLATE("HfDamping"), 50, 0, 100, 1 );
Param( ToneLow, double, wxTRANSLATE("ToneLow"), 100, 0, 100, 1 );
Param( ToneHigh, double, wxTRANSLATE("ToneHigh"), 100, 0, 100, 1 );
Param( WetGain, double, wxTRANSLATE("WetGain"), -1, -20, 10, 1 );
Param( DryGain, double, wxTRANSLATE("DryGain"), -1, -20, 10, 1 );
Param( StereoWidth, double, wxTRANSLATE("StereoWidth"), 100, 0, 100, 1 );
Param( WetOnly, bool, wxTRANSLATE("WetOnly"), false, false, true, 1 );
Param( RoomSize, double, XO("RoomSize"), 75, 0, 100, 1 );
Param( PreDelay, double, XO("Delay"), 10, 0, 200, 1 );
Param( Reverberance, double, XO("Reverberance"), 50, 0, 100, 1 );
Param( HfDamping, double, XO("HfDamping"), 50, 0, 100, 1 );
Param( ToneLow, double, XO("ToneLow"), 100, 0, 100, 1 );
Param( ToneHigh, double, XO("ToneHigh"), 100, 0, 100, 1 );
Param( WetGain, double, XO("WetGain"), -1, -20, 10, 1 );
Param( DryGain, double, XO("DryGain"), -1, -20, 10, 1 );
Param( StereoWidth, double, XO("StereoWidth"), 100, 0, 100, 1 );
Param( WetOnly, bool, XO("WetOnly"), false, false, true, 1 );
static const struct
{
@ -63,15 +63,15 @@ FactoryPresets[] =
{
// Room Pre Hf Tone Tone Wet Dry Stereo Wet
// Name Size, Delay, Reverb, Damping, Low, High, Gain, Gain, Width, Only
wxTRANSLATE("Vocal I" ), { 70, 20, 40, 99, 100, 50, -12, 0, 70, false },
wxTRANSLATE("Vocal II"), { 50, 0, 50, 99, 50, 100, -1, -1, 70, false },
wxTRANSLATE("Bathroom"), { 16, 8, 80, 0, 0, 100, -6, 0, 100, false },
wxTRANSLATE("Small Room Bright"), { 30, 10, 50, 50, 50, 100, -1, -1, 100, false },
wxTRANSLATE("Small Room Dark"), { 30, 10, 50, 50, 100, 0, -1, -1, 100, false },
wxTRANSLATE("Medium Room"), { 75, 10, 40, 50, 100, 70, -1, -1, 70, false },
wxTRANSLATE("Large Room"), { 85, 10, 40, 50, 100, 80, 0, -6, 90, false },
wxTRANSLATE("Church Hall"), { 90, 32, 60, 50, 100, 50, 0, -12, 100, false },
wxTRANSLATE("Cathedral"), { 90, 16, 90, 50, 100, 0, 0, -20, 100, false },
XO("Vocal I" ), { 70, 20, 40, 99, 100, 50, -12, 0, 70, false },
XO("Vocal II"), { 50, 0, 50, 99, 50, 100, -1, -1, 70, false },
XO("Bathroom"), { 16, 8, 80, 0, 0, 100, -6, 0, 100, false },
XO("Small Room Bright"), { 30, 10, 50, 50, 50, 100, -1, -1, 100, false },
XO("Small Room Dark"), { 30, 10, 50, 50, 100, 0, -1, -1, 100, false },
XO("Medium Room"), { 75, 10, 40, 50, 100, 70, -1, -1, 70, false },
XO("Large Room"), { 85, 10, 40, 50, 100, 80, 0, -6, 90, false },
XO("Church Hall"), { 90, 32, 60, 50, 100, 50, 0, -12, 100, false },
XO("Cathedral"), { 90, 16, 90, 50, 100, 0, 0, -20, 100, false },
};
struct Reverb_priv_t
@ -134,7 +134,7 @@ wxString EffectReverb::GetSymbol()
wxString EffectReverb::GetDescription()
{
return wxTRANSLATE("Adds ambience or a \"hall effect\"");
return XO("Adds ambience or a \"hall effect\"");
}
// EffectIdentInterface implementation

View File

@ -22,7 +22,7 @@
#include "Effect.h"
#define REVERB_PLUGIN_SYMBOL wxTRANSLATE("Reverb")
#define REVERB_PLUGIN_SYMBOL XO("Reverb")
struct Reverb_priv_t;

View File

@ -45,7 +45,7 @@ wxString EffectReverse::GetSymbol()
wxString EffectReverse::GetDescription()
{
return wxTRANSLATE("Reverses the selected audio");
return XO("Reverses the selected audio");
}
// EffectIdentInterface implementation

View File

@ -19,7 +19,7 @@
#include "Effect.h"
#define REVERSE_PLUGIN_SYMBOL wxTRANSLATE("Reverse")
#define REVERSE_PLUGIN_SYMBOL XO("Reverse")
class EffectReverse : public Effect
{

View File

@ -88,11 +88,11 @@ enum kTypes
static const wxChar *kTypeStrings[] =
{
/*i18n-hint: Butterworth is the name of the person after whom the filter type is named.*/
wxTRANSLATE("Butterworth"),
XO("Butterworth"),
/*i18n-hint: Chebyshev is the name of the person after whom the filter type is named.*/
wxTRANSLATE("Chebyshev Type I"),
XO("Chebyshev Type I"),
/*i18n-hint: Chebyshev is the name of the person after whom the filter type is named.*/
wxTRANSLATE("Chebyshev Type II")
XO("Chebyshev Type II")
};
enum kSubTypes
@ -104,19 +104,19 @@ enum kSubTypes
static const wxChar *kSubTypeStrings[] =
{
wxTRANSLATE("Lowpass"),
wxTRANSLATE("Highpass")
XO("Lowpass"),
XO("Highpass")
};
// Define keys, defaults, minimums, and maximums for the effect parameters
//
// Name Type Key Def Min Max Scale
Param( Type, int, wxTRANSLATE("FilterType"), kButterworth, 0, kNumTypes - 1, 1 );
Param( Subtype, int, wxTRANSLATE("FilterSubtype"), kLowPass, 0, kNumSubTypes - 1, 1 );
Param( Order, int, wxTRANSLATE("Order"), 1, 1, 10, 1 );
Param( Cutoff, float, wxTRANSLATE("Cutoff"), 1000.0, 1.0, FLT_MAX, 1 );
Param( Passband, float, wxTRANSLATE("PassbandRipple"), 1.0, 0.0, 100.0, 1 );
Param( Stopband, float, wxTRANSLATE("StopbandRipple"), 30.0, 0.0, 100.0, 1 );
Param( Type, int, XO("FilterType"), kButterworth, 0, kNumTypes - 1, 1 );
Param( Subtype, int, XO("FilterSubtype"), kLowPass, 0, kNumSubTypes - 1, 1 );
Param( Order, int, XO("Order"), 1, 1, 10, 1 );
Param( Cutoff, float, XO("Cutoff"), 1000.0, 1.0, FLT_MAX, 1 );
Param( Passband, float, XO("PassbandRipple"), 1.0, 0.0, 100.0, 1 );
Param( Stopband, float, XO("StopbandRipple"), 30.0, 0.0, 100.0, 1 );
static const double s_fChebyCoeffs[MAX_Order][MAX_Order + 1] =
{
@ -190,7 +190,7 @@ wxString EffectScienFilter::GetSymbol()
wxString EffectScienFilter::GetDescription()
{
return wxTRANSLATE("Performs IIR filtering that emulates analog filters");
return XO("Performs IIR filtering that emulates analog filters");
}
// EffectIdentInterface implementation

View File

@ -29,7 +29,7 @@ Vaughan Johnson (Preview)
#include "Effect.h"
#define CLASSICFILTERS_PLUGIN_SYMBOL wxTRANSLATE("Classic Filters")
#define CLASSICFILTERS_PLUGIN_SYMBOL XO("Classic Filters")
class EffectScienFilterPanel;

View File

@ -21,7 +21,6 @@
EffectSilence::EffectSilence()
{
mDuration = GetDuration();
}
EffectSilence::~EffectSilence()
@ -37,7 +36,7 @@ wxString EffectSilence::GetSymbol()
wxString EffectSilence::GetDescription()
{
return wxTRANSLATE("Creates audio of zero amplitude");
return XO("Creates audio of zero amplitude");
}
// EffectIdentInterface implementation
@ -55,22 +54,22 @@ void EffectSilence::PopulateOrExchange(ShuttleGui & S)
{
S.StartHorizontalLay();
{
bool isSelection;
double duration = GetDuration(&isSelection);
S.AddPrompt(_("Duration:"));
if (S.GetMode() == eIsCreating)
{
mDurationT = new
NumericTextCtrl(NumericConverter::TIME,
S.GetParent(),
wxID_ANY,
(mT1 > mT0) ? _("hh:mm:ss + samples") : _("hh:mm:ss + milliseconds"),
mDuration,
isSelection ? _("hh:mm:ss + samples") : _("hh:mm:ss + milliseconds"),
duration,
mProjectRate,
wxDefaultPosition,
wxDefaultSize,
true);
mDurationT->SetName(_("Duration"));
mDurationT->EnableMenu();
}
S.AddWindow(mDurationT, wxALIGN_CENTER | wxALL);
}
S.EndHorizontalLay();
@ -82,14 +81,14 @@ void EffectSilence::PopulateOrExchange(ShuttleGui & S)
bool EffectSilence::TransferDataToWindow()
{
mDurationT->SetValue(mDuration);
mDurationT->SetValue(GetDuration());
return true;
}
bool EffectSilence::TransferDataFromWindow()
{
mDuration = mDurationT->GetValue();
SetDuration(mDurationT->GetValue());
return true;
}
@ -98,7 +97,7 @@ bool EffectSilence::GenerateTrack(WaveTrack *tmp,
const WaveTrack & WXUNUSED(track),
int WXUNUSED(ntrack))
{
bool bResult = tmp->InsertSilence(0.0, mDuration);
bool bResult = tmp->InsertSilence(0.0, GetDuration());
wxASSERT(bResult);
return bResult;
}

View File

@ -20,7 +20,7 @@
#include "Generator.h"
#define SILENCE_PLUGIN_SYMBOL wxTRANSLATE("Silence")
#define SILENCE_PLUGIN_SYMBOL XO("Silence")
class EffectSilence : public Generator
{

View File

@ -36,7 +36,7 @@ wxString EffectStereoToMono::GetSymbol()
wxString EffectStereoToMono::GetDescription()
{
return wxTRANSLATE("Converts stereo tracks to mono");
return XO("Converts stereo tracks to mono");
}
// EffectIdentInterface implementation

View File

@ -15,7 +15,7 @@
#include "Effect.h"
#define STEREOTOMONO_PLUGIN_SYMBOL wxTRANSLATE("Stereo To Mono")
#define STEREOTOMONO_PLUGIN_SYMBOL XO("Stereo To Mono")
class EffectStereoToMono : public Effect
{

View File

@ -39,12 +39,12 @@ enum
// Define keys, defaults, minimums, and maximums for the effect parameters
//
// Name Type Key Def Min Max Scale
Param( RatePercentStart, double, wxTRANSLATE("RatePercentChangeStart"), 0.0, -90.0, 500, 1 );
Param( RatePercentEnd, double, wxTRANSLATE("RatePercentChangeEnd"), 0.0, -90.0, 500, 1 );
Param( HalfStepsStart, double, wxTRANSLATE("PitchHalfStepsStart"), 0.0, -12.0, 12.0, 1 );
Param( HalfStepsEnd, double, wxTRANSLATE("PitchHalfStepsEnd"), 0.0, -12.0, 12.0, 1 );
Param( PitchPercentStart, double, wxTRANSLATE("PitchPercentChangeStart"), 0.0, -50.0, 100.0, 1 );
Param( PitchPercentEnd, double, wxTRANSLATE("PitchPercentChangeEnd"), 0.0, -50.0, 100.0, 1 );
Param( RatePercentStart, double, XO("RatePercentChangeStart"), 0.0, -90.0, 500, 1 );
Param( RatePercentEnd, double, XO("RatePercentChangeEnd"), 0.0, -90.0, 500, 1 );
Param( HalfStepsStart, double, XO("PitchHalfStepsStart"), 0.0, -12.0, 12.0, 1 );
Param( HalfStepsEnd, double, XO("PitchHalfStepsEnd"), 0.0, -12.0, 12.0, 1 );
Param( PitchPercentStart, double, XO("PitchPercentChangeStart"), 0.0, -50.0, 100.0, 1 );
Param( PitchPercentEnd, double, XO("PitchPercentChangeEnd"), 0.0, -50.0, 100.0, 1 );
//
// EffectTimeScale
@ -84,12 +84,12 @@ wxString EffectTimeScale::GetSymbol()
wxString EffectTimeScale::GetName()
{
return wxTRANSLATE("Sliding Time Scale/Pitch Shift");
return XO("Sliding Time Scale/Pitch Shift");
}
wxString EffectTimeScale::GetDescription()
{
return wxTRANSLATE("Allows continuous changes to the tempo and/or pitch");
return XO("Allows continuous changes to the tempo and/or pitch");
}
// EffectIdentInterface implementation

View File

@ -24,7 +24,7 @@
#include "SBSMSEffect.h"
#define TIMESCALE_PLUGIN_SYMBOL wxTRANSLATE("Time Scale")
#define TIMESCALE_PLUGIN_SYMBOL XO("Time Scale")
class EffectTimeScale : public EffectSBSMS
{

View File

@ -24,6 +24,7 @@ frequency changes smoothly during the tone.
#include <float.h>
#include <wx/intl.h>
#include <wx/valgen.h>
#include "../Project.h"
#include "../widgets/NumericTextCtrl.h"
@ -40,8 +41,8 @@ enum kInterpolations
static const wxString kInterStrings[kNumInterpolations] =
{
wxTRANSLATE("Linear"),
wxTRANSLATE("Logarithmic")
XO("Linear"),
XO("Logarithmic")
};
enum kWaveforms
@ -55,23 +56,23 @@ enum kWaveforms
static const wxString kWaveStrings[kNumWaveforms] =
{
wxTRANSLATE("Sine"),
wxTRANSLATE("Square"),
wxTRANSLATE("Sawtooth"),
wxTRANSLATE("Square, no alias")
XO("Sine"),
XO("Square"),
XO("Sawtooth"),
XO("Square, no alias")
};
// Define keys, defaults, minimums, and maximums for the effect parameters
//
// Name Type Key Def Min Max Scale
Param( StartFreq, double, wxTRANSLATE("StartFreq"), 440.0, 1.0, DBL_MAX, 1 );
Param( EndFreq, double, wxTRANSLATE("EndFreq"), 1320.0, 1.0, DBL_MAX, 1 );
Param( StartAmp, double, wxTRANSLATE("StartAmp"), 0.8, 0.0, 1.0, 1 );
Param( EndAmp, double, wxTRANSLATE("EndAmp"), 0.1, 0.0, 1.0, 1 );
Param( Frequency, double, wxTRANSLATE("Frequency"), 440.0, 1.0, DBL_MAX, 1 );
Param( Amplitude, double, wxTRANSLATE("Amplitude"), 0.8, 0.0, 1.0, 1 );
Param( Waveform, int, wxTRANSLATE("Waveform"), 0, 0, kNumWaveforms - 1, 1 );
Param( Interp, int, wxTRANSLATE("Interpolation"), 0, 0, kNumInterpolations - 1, 1 );
Param( StartFreq, double, XO("StartFreq"), 440.0, 1.0, DBL_MAX, 1 );
Param( EndFreq, double, XO("EndFreq"), 1320.0, 1.0, DBL_MAX, 1 );
Param( StartAmp, double, XO("StartAmp"), 0.8, 0.0, 1.0, 1 );
Param( EndAmp, double, XO("EndAmp"), 0.1, 0.0, 1.0, 1 );
Param( Frequency, double, XO("Frequency"), 440.0, 1.0, DBL_MAX, 1 );
Param( Amplitude, double, XO("Amplitude"), 0.8, 0.0, 1.0, 1 );
Param( Waveform, int, XO("Waveform"), 0, 0, kNumWaveforms - 1, 1 );
Param( Interp, int, XO("Interpolation"), 0, 0, kNumInterpolations - 1, 1 );
//
// EffectToneGen
@ -94,7 +95,6 @@ EffectToneGen::EffectToneGen(bool isChirp)
mAmplitude[0] = DEF_StartAmp;
mAmplitude[1] = DEF_EndAmp;
mInterpolation = DEF_Interp;
mDuration = GetDuration();
for (int i = 0; i < kNumWaveforms; i++)
{
@ -123,8 +123,8 @@ wxString EffectToneGen::GetSymbol()
wxString EffectToneGen::GetDescription()
{
return mChirp
? wxTRANSLATE("Generates four different types of tone waveform while allowing starting and ending amplitude and frequency")
: wxTRANSLATE("Generates four different types of tone waveform");
? XO("Generates four different types of tone waveform while allowing starting and ending amplitude and frequency")
: XO("Generates four different types of tone waveform");
}
// EffectIdentInterface implementation
@ -300,7 +300,8 @@ void EffectToneGen::PopulateOrExchange(ShuttleGui & S)
S.StartMultiColumn(2, wxCENTER);
{
S.TieChoice(_("Waveform:"), mWaveform, &mWaveforms);
wxChoice *c = S.AddChoice(_("Waveform:"), wxT(""), &mWaveforms);
c->SetValidator(wxGenericValidator(&mWaveform));
if (mChirp)
{
@ -370,6 +371,9 @@ void EffectToneGen::PopulateOrExchange(ShuttleGui & S)
S.EndHorizontalLay();
}
S.EndHorizontalLay();
c = S.AddChoice(_("Interpolation:"), wxT(""), &mInterpolations);
c->SetValidator(wxGenericValidator(&mInterpolation));
}
else
{
@ -378,20 +382,22 @@ void EffectToneGen::PopulateOrExchange(ShuttleGui & S)
t = S.AddTextBox(_("Frequency (Hz):"), wxT(""), 12);
t->SetValidator(vldFrequency);
FloatingPointValidator<double> vldAmplitude(6, &mAmplitude[1], NUM_VAL_NO_TRAILING_ZEROES);
FloatingPointValidator<double> vldAmplitude(6, &mAmplitude[0], NUM_VAL_NO_TRAILING_ZEROES);
vldAmplitude.SetRange(MIN_Amplitude, MAX_Amplitude);
t = S.AddTextBox(_("Amplitude (0-1):"), wxT(""), 12);
t->SetValidator(vldAmplitude);
}
S.TieChoice(_("Interpolation:"), mInterpolation, &mInterpolations);
bool isSelection;
double duration = GetDuration(&isSelection);
S.AddPrompt(_("Duration:"));
mToneDurationT = new
NumericTextCtrl(NumericConverter::TIME,
S.GetParent(),
wxID_ANY,
(mT1 > mT0) ? _("hh:mm:ss + samples") : _("hh:mm:ss + milliseconds"),
mDuration,
isSelection ? _("hh:mm:ss + samples") : _("hh:mm:ss + milliseconds"),
duration,
mProjectRate,
wxDefaultPosition,
wxDefaultSize,
@ -412,7 +418,7 @@ bool EffectToneGen::TransferDataToWindow()
return false;
}
mToneDurationT->SetValue(mDuration);
mToneDurationT->SetValue(GetDuration());
return true;
}
@ -430,7 +436,7 @@ bool EffectToneGen::TransferDataFromWindow()
mAmplitude[1] = mAmplitude[0];
}
mDuration = mToneDurationT->GetValue();
SetDuration(mToneDurationT->GetValue());
return true;
}

View File

@ -21,8 +21,8 @@
#include "Effect.h"
#define CHIRP_PLUGIN_SYMBOL wxTRANSLATE("Chirp")
#define TONE_PLUGIN_SYMBOL wxTRANSLATE("Tone")
#define CHIRP_PLUGIN_SYMBOL XO("Chirp")
#define TONE_PLUGIN_SYMBOL XO("Tone")
class EffectToneGen : public Effect
{

View File

@ -37,8 +37,8 @@ enum kActions
static const wxChar *kActionStrings[kNumActions] =
{
wxTRANSLATE("Truncate Detected Silence"),
wxTRANSLATE("Compress Excess Silence")
XO("Truncate Detected Silence"),
XO("Compress Excess Silence")
};
// Define defaults, minimums, and maximums for each parameter
@ -50,11 +50,11 @@ static const wxChar *kActionStrings[kNumActions] =
// Define keys, defaults, minimums, and maximums for the effect parameters
//
// Name Type Key Def Min Max Scale
Param( DbIndex, int, wxTRANSLATE("Db"), 0, 0, Enums::NumDbChoices - 1, 1 );
Param( ActIndex, int, wxTRANSLATE("Action"), kTruncate, 0, kNumActions - 1, 1 );
Param( Minimum, double, wxTRANSLATE("Minimum"), 0.5, 0.001, 10000.0, 1 );
Param( Truncate, double, wxTRANSLATE("Truncate"), 0.5, 0.0, 10000.0, 1 );
Param( Compress, double, wxTRANSLATE("Compress"), 50.0, 0.0, 99.9, 1 );
Param( DbIndex, int, XO("Db"), 0, 0, Enums::NumDbChoices - 1, 1 );
Param( ActIndex, int, XO("Action"), kTruncate, 0, kNumActions - 1, 1 );
Param( Minimum, double, XO("Minimum"), 0.5, 0.001, 10000.0, 1 );
Param( Truncate, double, XO("Truncate"), 0.5, 0.0, 10000.0, 1 );
Param( Compress, double, XO("Compress"), 50.0, 0.0, 99.9, 1 );
static const sampleCount DEF_BlendFrameCount = 100;
@ -100,7 +100,7 @@ wxString EffectTruncSilence::GetSymbol()
wxString EffectTruncSilence::GetDescription()
{
return wxTRANSLATE("Automatically reduces the length of passages where the volume is below a specified level");
return XO("Automatically reduces the length of passages where the volume is below a specified level");
}
// EffectIdentInterface implementation

View File

@ -28,7 +28,7 @@
#include "Effect.h"
#define TRUNCATESILENCE_PLUGIN_SYMBOL wxTRANSLATE("Truncate Silence")
#define TRUNCATESILENCE_PLUGIN_SYMBOL XO("Truncate Silence")
// Declaration of RegionList
struct REGION;

Some files were not shown because too many files have changed in this diff Show More