mirror of
https://github.com/cookiengineer/audacity
synced 2025-05-02 00:29:41 +02:00
Internationalization of strings in .ny files, both headers and bodies
This commit is contained in:
commit
24a350920c
3
configure
vendored
3
configure
vendored
@ -24233,7 +24233,7 @@ case "${host_os}" in
|
||||
esac
|
||||
|
||||
# process Makefile.in's to generate Makefiles
|
||||
ac_config_files="$ac_config_files Makefile help/Makefile images/Makefile lib-src/Makefile po/Makefile.in src/audacity.desktop src/Makefile tests/Makefile"
|
||||
ac_config_files="$ac_config_files Makefile help/Makefile images/Makefile lib-src/Makefile po/Makefile.in nyq-po/Makefile.in src/audacity.desktop src/Makefile tests/Makefile"
|
||||
|
||||
|
||||
cat >confcache <<\_ACEOF
|
||||
@ -25517,6 +25517,7 @@ do
|
||||
"images/Makefile") CONFIG_FILES="$CONFIG_FILES images/Makefile" ;;
|
||||
"lib-src/Makefile") CONFIG_FILES="$CONFIG_FILES lib-src/Makefile" ;;
|
||||
"po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;;
|
||||
"nyq-po/Makefile.in") CONFIG_FILES="$CONFIG_FILES nyq-po/Makefile.in" ;;
|
||||
"src/audacity.desktop") CONFIG_FILES="$CONFIG_FILES src/audacity.desktop" ;;
|
||||
"src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
|
||||
"tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
|
||||
|
@ -708,6 +708,7 @@ AC_CONFIG_FILES([
|
||||
images/Makefile
|
||||
lib-src/Makefile
|
||||
po/Makefile.in
|
||||
nyq-po/Makefile.in
|
||||
src/audacity.desktop
|
||||
src/Makefile
|
||||
tests/Makefile
|
||||
|
1767
locale/audacity.pot
1767
locale/audacity.pot
File diff suppressed because it is too large
Load Diff
1
nyq-po/LINGUAS
Symbolic link
1
nyq-po/LINGUAS
Symbolic link
@ -0,0 +1 @@
|
||||
locale/LINGUAS
|
444
nyq-po/Makefile.in.in
Normal file
444
nyq-po/Makefile.in.in
Normal file
@ -0,0 +1,444 @@
|
||||
# Makefile for PO directory in any package using GNU gettext.
|
||||
# Copyright (C) 1995-1997, 2000-2007, 2009-2010 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
|
||||
#
|
||||
# This file can be copied and used freely without restrictions. It can
|
||||
# be used in projects which are not available under the GNU General Public
|
||||
# License but which still want to provide support for the GNU gettext
|
||||
# functionality.
|
||||
# Please note that the actual code of GNU gettext is covered by the GNU
|
||||
# General Public License and is *not* in the public domain.
|
||||
#
|
||||
# Origin: gettext-0.18
|
||||
GETTEXT_MACRO_VERSION = 0.18
|
||||
|
||||
PACKAGE = @PACKAGE@
|
||||
VERSION = @VERSION@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
|
||||
SHELL = /bin/sh
|
||||
@SET_MAKE@
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
|
||||
prefix = @prefix@
|
||||
exec_prefix = @exec_prefix@
|
||||
datarootdir = @datarootdir@
|
||||
datadir = @datadir@
|
||||
localedir = @localedir@
|
||||
gettextsrcdir = $(datadir)/gettext/po
|
||||
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
|
||||
# We use $(mkdir_p).
|
||||
# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as
|
||||
# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions,
|
||||
# @install_sh@ does not start with $(SHELL), so we add it.
|
||||
# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined
|
||||
# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake
|
||||
# versions, $(mkinstalldirs) and $(install_sh) are unused.
|
||||
mkinstalldirs = $(SHELL) @install_sh@ -d
|
||||
install_sh = $(SHELL) @install_sh@
|
||||
MKDIR_P = @MKDIR_P@
|
||||
mkdir_p = @mkdir_p@
|
||||
|
||||
GMSGFMT_ = @GMSGFMT@
|
||||
GMSGFMT_no = @GMSGFMT@
|
||||
GMSGFMT_yes = @GMSGFMT_015@
|
||||
GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT))
|
||||
MSGFMT_ = @MSGFMT@
|
||||
MSGFMT_no = @MSGFMT@
|
||||
MSGFMT_yes = @MSGFMT_015@
|
||||
MSGFMT = $(MSGFMT_$(USE_MSGCTXT))
|
||||
XGETTEXT_ = @XGETTEXT@
|
||||
XGETTEXT_no = @XGETTEXT@
|
||||
XGETTEXT_yes = @XGETTEXT_015@
|
||||
XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT))
|
||||
MSGMERGE = msgmerge
|
||||
MSGMERGE_UPDATE = @MSGMERGE@ --update
|
||||
MSGINIT = msginit
|
||||
MSGCONV = msgconv
|
||||
MSGFILTER = msgfilter
|
||||
|
||||
POFILES = @POFILES@
|
||||
GMOFILES = @GMOFILES@
|
||||
UPDATEPOFILES = @UPDATEPOFILES@
|
||||
DUMMYPOFILES = @DUMMYPOFILES@
|
||||
DISTFILES.common = Makefile.in.in remove-potcdate.sin \
|
||||
$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
|
||||
DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \
|
||||
$(POFILES) $(GMOFILES) \
|
||||
$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
|
||||
|
||||
POTFILES = \
|
||||
|
||||
CATALOGS = @CATALOGS@
|
||||
|
||||
# Makevars gets inserted here. (Don't remove this line!)
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update
|
||||
|
||||
.po.mo:
|
||||
@echo "$(MSGFMT) -c -o $@ $<"; \
|
||||
$(MSGFMT) -c -o t-$@ $< && mv t-$@ $@
|
||||
|
||||
.po.gmo:
|
||||
@lang=`echo $* | sed -e 's,.*/,,'`; \
|
||||
test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
|
||||
echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.po"; \
|
||||
cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo
|
||||
|
||||
.sin.sed:
|
||||
sed -e '/^#/d' $< > t-$@
|
||||
mv t-$@ $@
|
||||
|
||||
|
||||
all: check-macro-version all-@USE_NLS@
|
||||
|
||||
all-yes: stamp-po
|
||||
all-no:
|
||||
|
||||
# Ensure that the gettext macros and this Makefile.in.in are in sync.
|
||||
check-macro-version:
|
||||
@test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \
|
||||
|| { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \
|
||||
exit 1; \
|
||||
}
|
||||
|
||||
# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no
|
||||
# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because
|
||||
# we don't want to bother translators with empty POT files). We assume that
|
||||
# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty.
|
||||
# In this case, stamp-po is a nop (i.e. a phony target).
|
||||
|
||||
# stamp-po is a timestamp denoting the last time at which the CATALOGS have
|
||||
# been loosely updated. Its purpose is that when a developer or translator
|
||||
# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS,
|
||||
# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent
|
||||
# invocations of "make" will do nothing. This timestamp would not be necessary
|
||||
# if updating the $(CATALOGS) would always touch them; however, the rule for
|
||||
# $(POFILES) has been designed to not touch files that don't need to be
|
||||
# changed.
|
||||
stamp-po: $(srcdir)/$(DOMAIN).pot
|
||||
test ! -f $(srcdir)/$(DOMAIN).pot || \
|
||||
test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
|
||||
@test ! -f $(srcdir)/$(DOMAIN).pot || { \
|
||||
echo "touch stamp-po" && \
|
||||
echo timestamp > stamp-poT && \
|
||||
mv stamp-poT stamp-po; \
|
||||
}
|
||||
|
||||
# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
|
||||
# otherwise packages like GCC can not be built if only parts of the source
|
||||
# have been downloaded.
|
||||
|
||||
# This target rebuilds $(DOMAIN).pot; it is an expensive operation.
|
||||
# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
|
||||
$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
|
||||
if LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null | grep -v 'libtool:' >/dev/null; then \
|
||||
package_gnu='GNU '; \
|
||||
else \
|
||||
package_gnu=''; \
|
||||
fi; \
|
||||
if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \
|
||||
msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \
|
||||
else \
|
||||
msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \
|
||||
fi; \
|
||||
case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
|
||||
'' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \
|
||||
$(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
|
||||
--add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
|
||||
--files-from=$(srcdir)/POTFILES.in \
|
||||
--copyright-holder='$(COPYRIGHT_HOLDER)' \
|
||||
--msgid-bugs-address="$$msgid_bugs_address" \
|
||||
;; \
|
||||
*) \
|
||||
$(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
|
||||
--add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
|
||||
--files-from=$(srcdir)/POTFILES.in \
|
||||
--copyright-holder='$(COPYRIGHT_HOLDER)' \
|
||||
--package-name="$${package_gnu}@PACKAGE@" \
|
||||
--package-version='@VERSION@' \
|
||||
--msgid-bugs-address="$$msgid_bugs_address" \
|
||||
;; \
|
||||
esac
|
||||
test ! -f $(DOMAIN).po || { \
|
||||
if test -f $(srcdir)/$(DOMAIN).pot; then \
|
||||
sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
|
||||
sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
|
||||
if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \
|
||||
rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \
|
||||
else \
|
||||
rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \
|
||||
mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
|
||||
fi; \
|
||||
else \
|
||||
mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
|
||||
fi; \
|
||||
}
|
||||
|
||||
# This rule has no dependencies: we don't need to update $(DOMAIN).pot at
|
||||
# every "make" invocation, only create it when it is missing.
|
||||
# Only "make $(DOMAIN).pot-update" or "make dist" will force an update.
|
||||
$(srcdir)/$(DOMAIN).pot:
|
||||
$(MAKE) $(DOMAIN).pot-update
|
||||
|
||||
# This target rebuilds a PO file if $(DOMAIN).pot has changed.
|
||||
# Note that a PO file is not touched if it doesn't need to be changed.
|
||||
$(POFILES): $(srcdir)/$(DOMAIN).pot
|
||||
@lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
|
||||
if test -f "$(srcdir)/$${lang}.po"; then \
|
||||
test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
|
||||
echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot"; \
|
||||
cd $(srcdir) \
|
||||
&& { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
|
||||
'' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \
|
||||
$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \
|
||||
*) \
|
||||
$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot;; \
|
||||
esac; \
|
||||
}; \
|
||||
else \
|
||||
$(MAKE) $${lang}.po-create; \
|
||||
fi
|
||||
|
||||
|
||||
install: install-exec install-data
|
||||
install-exec:
|
||||
install-data: install-data-@USE_NLS@
|
||||
if test "$(PACKAGE)" = "gettext-tools"; then \
|
||||
$(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
|
||||
for file in $(DISTFILES.common) Makevars.template; do \
|
||||
$(INSTALL_DATA) $(srcdir)/$$file \
|
||||
$(DESTDIR)$(gettextsrcdir)/$$file; \
|
||||
done; \
|
||||
for file in Makevars; do \
|
||||
rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
|
||||
done; \
|
||||
else \
|
||||
: ; \
|
||||
fi
|
||||
install-data-no: all
|
||||
install-data-yes: all
|
||||
@catalogs='$(CATALOGS)'; \
|
||||
for cat in $$catalogs; do \
|
||||
cat=`basename $$cat`; \
|
||||
lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
|
||||
dir=$(localedir)/$$lang/LC_MESSAGES; \
|
||||
$(mkdir_p) $(DESTDIR)$$dir; \
|
||||
if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
|
||||
$(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
|
||||
echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
|
||||
for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
|
||||
if test -n "$$lc"; then \
|
||||
if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
|
||||
link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
|
||||
mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
|
||||
mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
|
||||
(cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
|
||||
for file in *; do \
|
||||
if test -f $$file; then \
|
||||
ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
|
||||
fi; \
|
||||
done); \
|
||||
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
|
||||
else \
|
||||
if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
|
||||
:; \
|
||||
else \
|
||||
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
|
||||
mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
|
||||
fi; \
|
||||
fi; \
|
||||
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
|
||||
ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
|
||||
ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
|
||||
cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
|
||||
echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
|
||||
fi; \
|
||||
done; \
|
||||
done
|
||||
|
||||
install-strip: install
|
||||
|
||||
installdirs: installdirs-exec installdirs-data
|
||||
installdirs-exec:
|
||||
installdirs-data: installdirs-data-@USE_NLS@
|
||||
if test "$(PACKAGE)" = "gettext-tools"; then \
|
||||
$(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
|
||||
else \
|
||||
: ; \
|
||||
fi
|
||||
installdirs-data-no:
|
||||
installdirs-data-yes:
|
||||
@catalogs='$(CATALOGS)'; \
|
||||
for cat in $$catalogs; do \
|
||||
cat=`basename $$cat`; \
|
||||
lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
|
||||
dir=$(localedir)/$$lang/LC_MESSAGES; \
|
||||
$(mkdir_p) $(DESTDIR)$$dir; \
|
||||
for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
|
||||
if test -n "$$lc"; then \
|
||||
if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
|
||||
link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
|
||||
mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
|
||||
mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
|
||||
(cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
|
||||
for file in *; do \
|
||||
if test -f $$file; then \
|
||||
ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
|
||||
fi; \
|
||||
done); \
|
||||
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
|
||||
else \
|
||||
if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
|
||||
:; \
|
||||
else \
|
||||
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
|
||||
mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
|
||||
fi; \
|
||||
fi; \
|
||||
fi; \
|
||||
done; \
|
||||
done
|
||||
|
||||
# Define this as empty until I found a useful application.
|
||||
installcheck:
|
||||
|
||||
uninstall: uninstall-exec uninstall-data
|
||||
uninstall-exec:
|
||||
uninstall-data: uninstall-data-@USE_NLS@
|
||||
if test "$(PACKAGE)" = "gettext-tools"; then \
|
||||
for file in $(DISTFILES.common) Makevars.template; do \
|
||||
rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
|
||||
done; \
|
||||
else \
|
||||
: ; \
|
||||
fi
|
||||
uninstall-data-no:
|
||||
uninstall-data-yes:
|
||||
catalogs='$(CATALOGS)'; \
|
||||
for cat in $$catalogs; do \
|
||||
cat=`basename $$cat`; \
|
||||
lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
|
||||
for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
|
||||
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
|
||||
done; \
|
||||
done
|
||||
|
||||
check: all
|
||||
|
||||
info dvi ps pdf html tags TAGS ctags CTAGS ID:
|
||||
|
||||
mostlyclean:
|
||||
rm -f remove-potcdate.sed
|
||||
rm -f stamp-poT
|
||||
rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
|
||||
rm -fr *.o
|
||||
|
||||
clean: mostlyclean
|
||||
|
||||
distclean: clean
|
||||
rm -f Makefile Makefile.in POTFILES *.mo
|
||||
|
||||
maintainer-clean: distclean
|
||||
@echo "This command is intended for maintainers to use;"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
rm -f stamp-po $(GMOFILES)
|
||||
|
||||
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
|
||||
dist distdir:
|
||||
$(MAKE) update-po
|
||||
@$(MAKE) dist2
|
||||
# This is a separate target because 'update-po' must be executed before.
|
||||
dist2: stamp-po $(DISTFILES)
|
||||
dists="$(DISTFILES)"; \
|
||||
if test "$(PACKAGE)" = "gettext-tools"; then \
|
||||
dists="$$dists Makevars.template"; \
|
||||
fi; \
|
||||
if test -f $(srcdir)/$(DOMAIN).pot; then \
|
||||
dists="$$dists $(DOMAIN).pot stamp-po"; \
|
||||
fi; \
|
||||
if test -f $(srcdir)/ChangeLog; then \
|
||||
dists="$$dists ChangeLog"; \
|
||||
fi; \
|
||||
for i in 0 1 2 3 4 5 6 7 8 9; do \
|
||||
if test -f $(srcdir)/ChangeLog.$$i; then \
|
||||
dists="$$dists ChangeLog.$$i"; \
|
||||
fi; \
|
||||
done; \
|
||||
if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
|
||||
for file in $$dists; do \
|
||||
if test -f $$file; then \
|
||||
cp -p $$file $(distdir) || exit 1; \
|
||||
else \
|
||||
cp -p $(srcdir)/$$file $(distdir) || exit 1; \
|
||||
fi; \
|
||||
done
|
||||
|
||||
update-po: Makefile
|
||||
$(MAKE) $(DOMAIN).pot-update
|
||||
test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
|
||||
$(MAKE) update-gmo
|
||||
|
||||
# General rule for creating PO files.
|
||||
|
||||
.nop.po-create:
|
||||
@lang=`echo $@ | sed -e 's/\.po-create$$//'`; \
|
||||
echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
|
||||
exit 1
|
||||
|
||||
# General rule for updating PO files.
|
||||
|
||||
.nop.po-update:
|
||||
@lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
|
||||
if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \
|
||||
tmpdir=`pwd`; \
|
||||
echo "$$lang:"; \
|
||||
test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
|
||||
echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
|
||||
cd $(srcdir); \
|
||||
if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
|
||||
'' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \
|
||||
$(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
|
||||
*) \
|
||||
$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
|
||||
esac; \
|
||||
}; then \
|
||||
if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
|
||||
rm -f $$tmpdir/$$lang.new.po; \
|
||||
else \
|
||||
if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
|
||||
:; \
|
||||
else \
|
||||
echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
fi; \
|
||||
else \
|
||||
echo "msgmerge for $$lang.po failed!" 1>&2; \
|
||||
rm -f $$tmpdir/$$lang.new.po; \
|
||||
fi
|
||||
|
||||
$(DUMMYPOFILES):
|
||||
|
||||
update-gmo: Makefile $(GMOFILES)
|
||||
@:
|
||||
|
||||
# Recreate Makefile by invoking config.status. Explicitly invoke the shell,
|
||||
# because execution permission bits may not work on the current file system.
|
||||
# Use @SHELL@, which is the shell determined by autoconf for the use by its
|
||||
# scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient.
|
||||
Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@
|
||||
cd $(top_builddir) \
|
||||
&& @SHELL@ ./config.status $(subdir)/$@.in po-directories
|
||||
|
||||
force:
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make not to export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
41
nyq-po/Makevars
Normal file
41
nyq-po/Makevars
Normal file
@ -0,0 +1,41 @@
|
||||
# Makefile variables for PO directory in any package using GNU gettext.
|
||||
|
||||
# Usually the message domain is the same as the package name.
|
||||
DOMAIN = $(PACKAGE)
|
||||
|
||||
# These two variables depend on the location of this directory.
|
||||
subdir = nyq-po
|
||||
top_builddir = ..
|
||||
|
||||
# These options get passed to xgettext.
|
||||
XGETTEXT_OPTIONS = -L lisp --add-comments=" i18n" --add-location=file --keyword=_
|
||||
|
||||
# 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
|
||||
# package. (Note that the msgstr strings, extracted from the package's
|
||||
# sources, belong to the copyright holder of the package.) Translators are
|
||||
# expected to transfer the copyright for their translations to this person
|
||||
# or entity, or to disclaim their copyright. The empty string stands for
|
||||
# the public domain; in this case the translators are expected to disclaim
|
||||
# their copyright.
|
||||
COPYRIGHT_HOLDER = Audacity Team
|
||||
|
||||
# This is the email address or URL to which the translators shall report
|
||||
# bugs in the untranslated strings:
|
||||
# - Strings which are not entire sentences, see the maintainer guidelines
|
||||
# in the GNU gettext documentation, section 'Preparing Strings'.
|
||||
# - Strings which use unclear terms or require additional context to be
|
||||
# understood.
|
||||
# - Strings which make invalid assumptions about notation of date, time or
|
||||
# money.
|
||||
# - Pluralisation problems.
|
||||
# - Incorrect English spelling.
|
||||
# - Incorrect formatting.
|
||||
# It can be your email address, or a mailing list address where translators
|
||||
# can write to without being subscribed, or the URL of a web page through
|
||||
# which the translators can contact you.
|
||||
MSGID_BUGS_ADDRESS = audacity-translation@lists.sourceforge.net
|
||||
|
||||
# This is the list of locale categories, beyond LC_MESSAGES, for which the
|
||||
# message catalogs shall be used. It is usually empty.
|
||||
EXTRA_LOCALE_CATEGORIES =
|
26
nyq-po/POTFILES.in
Normal file
26
nyq-po/POTFILES.in
Normal file
@ -0,0 +1,26 @@
|
||||
plug-ins/SilenceMarker.ny
|
||||
plug-ins/SoundFinder.ny
|
||||
plug-ins/SpectralEditMulti.ny
|
||||
plug-ins/SpectralEditParametricEQ.ny
|
||||
plug-ins/SpectralEditShelves.ny
|
||||
plug-ins/StudioFadeOut.ny
|
||||
plug-ins/adjustable-fade.ny
|
||||
plug-ins/beat.ny
|
||||
plug-ins/clipfix.ny
|
||||
plug-ins/crossfadeclips.ny
|
||||
plug-ins/crossfadetracks.ny
|
||||
plug-ins/delay.ny
|
||||
plug-ins/equalabel.ny
|
||||
plug-ins/highpass.ny
|
||||
plug-ins/limiter.ny
|
||||
plug-ins/lowpass.ny
|
||||
plug-ins/notch.ny
|
||||
plug-ins/pluck.ny
|
||||
plug-ins/rhythmtrack.ny
|
||||
plug-ins/rissetdrum.ny
|
||||
plug-ins/sample-data-export.ny
|
||||
plug-ins/sample-data-import.ny
|
||||
plug-ins/tremolo.ny
|
||||
plug-ins/vocalrediso.ny
|
||||
plug-ins/vocalremover.ny
|
||||
plug-ins/vocoder.ny
|
1797
nyq-po/audacity.pot
Normal file
1797
nyq-po/audacity.pot
Normal file
File diff suppressed because it is too large
Load Diff
19
nyq-po/remove-potcdate.sin
Normal file
19
nyq-po/remove-potcdate.sin
Normal file
@ -0,0 +1,19 @@
|
||||
# Sed script that remove the POT-Creation-Date line in the header entry
|
||||
# from a POT file.
|
||||
#
|
||||
# The distinction between the first and the following occurrences of the
|
||||
# pattern is achieved by looking at the hold space.
|
||||
/^"POT-Creation-Date: .*"$/{
|
||||
x
|
||||
# Test if the hold space is empty.
|
||||
s/P/P/
|
||||
ta
|
||||
# Yes it was empty. First occurrence. Remove the line.
|
||||
g
|
||||
d
|
||||
bb
|
||||
:a
|
||||
# The hold space was nonempty. Following occurrences. Do nothing.
|
||||
x
|
||||
:b
|
||||
}
|
@ -2,20 +2,23 @@
|
||||
;version 1
|
||||
;type analyze
|
||||
;categories "http://lv2plug.in/ns/lv2core#AnalyserPlugin"
|
||||
;name "Silence Finder..."
|
||||
$name (_"Silence Finder")
|
||||
;manpage "Silence_Finder"
|
||||
;action "Finding silence..."
|
||||
;info "Adds point labels in areas of silence according to the specified\nlevel and duration of silence. If too many silences are detected,\nincrease the silence level and duration; if too few are detected,\nreduce the level and duration."
|
||||
;author "Alex S. Brown"
|
||||
;copyright "Released under terms of the GNU General Public License version 2"
|
||||
$action (_"Finding silence...")
|
||||
$info (_"Adds point labels in areas of silence according to the specified
|
||||
level and duration of silence. If too many silences are detected,
|
||||
increase the silence level and duration; if too few are detected,
|
||||
reduce the level and duration.")
|
||||
$author (_"Alex S. Brown")
|
||||
$copyright (_"Released under terms of the GNU General Public License version 2")
|
||||
|
||||
;; by Alex S. Brown, PMP (http://www.alexsbrown.com)
|
||||
;; Released under terms of the GNU General Public License version 2:
|
||||
;; http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
|
||||
;control sil-lev "Treat audio below this level as silence [ -dB]" real "" 26 0 100
|
||||
;control sil-dur "Minimum duration of silence [seconds]" real "" 1.0 0.1 5.0
|
||||
;control labelbeforedur "Label placement [seconds before silence ends]" real "" 0.3 0.0 1.0
|
||||
$control sil-lev (_"Treat audio below this level as silence [ -dB]") real "" 26 0 100
|
||||
$control sil-dur (_"Minimum duration of silence [seconds]") real "" 1.0 0.1 5.0
|
||||
$control labelbeforedur (_"Label placement [seconds before silence ends]") real "" 0.3 0.0 1.0
|
||||
|
||||
;Create a function to make the sum the two channels if they are stereo
|
||||
(defun mono-s (s-in) (if (arrayp s-in) (snd-add (aref s-in 0) (aref s-in 1))
|
||||
@ -88,6 +91,7 @@ s-in))
|
||||
(if (and (> v thres) (> sil-c sil-length))
|
||||
;Mark the user-set number of seconds BEFORE this point to avoid clipping the start
|
||||
;of the material.
|
||||
; Should "S" be translated or become a control value?
|
||||
(add-label (- (/ n s1-srate) labelbeforedur) "S")
|
||||
)
|
||||
;If this sample is NOT silent, then reset the silence counter
|
||||
@ -110,6 +114,6 @@ s-in))
|
||||
|
||||
;If no silence markers were found, return a message
|
||||
(if (null l)
|
||||
(setq l "No silences found. Try reducing the silence\nlevel and minimum silence duration.")
|
||||
(setq l (format nil (_"No silences found. Try reducing the silence~%level and minimum silence duration.")))
|
||||
)
|
||||
l
|
||||
|
@ -2,23 +2,26 @@
|
||||
;version 1
|
||||
;type analyze
|
||||
;categories "http://lv2plug.in/ns/lv2core#AnalyserPlugin"
|
||||
;name "Sound Finder..."
|
||||
$name (_"Sound Finder")
|
||||
;manpage "Sound_Finder"
|
||||
;action "Finding sound..."
|
||||
;info "Adds region labels for areas of sound according to the specified level\nand duration of surrounding silence. If too many labels are produced,\nincrease the silence level and duration; if too few are produced,\nreduce the level and duration."
|
||||
;author "Jeremy R. Brown"
|
||||
;copyright "Released under terms of the GNU General Public License version 2"
|
||||
$action (_"Finding sound...")
|
||||
$info (_"Adds region labels for areas of sound according to the specified level
|
||||
and duration of surrounding silence. If too many labels are produced,
|
||||
increase the silence level and duration; if too few are produced,
|
||||
reduce the level and duration.")
|
||||
$author (_"Jeremy R. Brown")
|
||||
$copyright (_"Released under terms of the GNU General Public License version 2")
|
||||
|
||||
;; by Jeremy R. Brown (http://www.jeremy-brown.com/)
|
||||
;; based on the Silence Finder script by Alex S. Brown (http://www.alexsbrown.com)
|
||||
;; Released under terms of the GNU General Public License version 2:
|
||||
;; http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
|
||||
;control sil-lev "Treat audio below this level as silence [ -dB]" real "" 26 0 100
|
||||
;control sil-dur "Minimum duration of silence between sounds [seconds]" real "" 1.0 0.1 5.0
|
||||
;control labelbeforedur "Label starting point [seconds before sound starts]" real "" 0.1 0.0 1.0
|
||||
;control labelafterdur "Label ending point [seconds after sound ends]" real "" 0.1 0.0 1.0
|
||||
;control finallabel "Add a label at the end of the track? [No=0, Yes=1]" int "" 0 0 1
|
||||
$control sil-lev (_"Treat audio below this level as silence [ -dB]") real "" 26 0 100
|
||||
$control sil-dur (_"Minimum duration of silence between sounds [seconds]") real "" 1.0 0.1 5.0
|
||||
$control labelbeforedur (_"Label starting point [seconds before sound starts]") real "" 0.1 0.0 1.0
|
||||
$control labelafterdur (_"Label ending point [seconds after sound ends]") real "" 0.1 0.0 1.0
|
||||
$control finallabel (_"Add a label at the end of the track? [No=0, Yes=1]") int "" 0 0 1
|
||||
|
||||
;30Dec09: couple of changes made to default control values by Gale Andrews
|
||||
|
||||
@ -149,7 +152,7 @@ s-in))
|
||||
;If no sound markers were found, return a message
|
||||
;Otherwise, if some sounds were found, also optionally place a label at the end of the file.
|
||||
(if (null l)
|
||||
(setq l "No sounds found. Try reducing the silence\nlevel and minimum silence duration.")
|
||||
(if (= finallabel 1) (add-label (/ s1-length s1-srate) (/ s1-length s1-srate) "[End]"))
|
||||
(setq l (format nil (_"No sounds found. Try reducing the silence~%level and minimum silence duration.")))
|
||||
(if (= finallabel 1) (add-label (/ s1-length s1-srate) (/ s1-length s1-srate) (_"[End]")))
|
||||
)
|
||||
l
|
||||
|
@ -1,11 +1,11 @@
|
||||
;nyquist plug-in
|
||||
;version 4
|
||||
;type process spectral
|
||||
;name "Spectral edit multi tool"
|
||||
$name (_"Spectral edit multi tool")
|
||||
;manpage "Spectral_edit_multi_tool"
|
||||
;action "Filtering..."
|
||||
;author "Paul Licameli"
|
||||
;copyright "Released under terms of the GNU General Public License version 2"
|
||||
$action (_"Filtering...")
|
||||
$author (_"Paul Licameli")
|
||||
$copyright (_"Released under terms of the GNU General Public License version 2")
|
||||
|
||||
;; SpectralEditMulti.ny by Paul Licameli, November 2014.
|
||||
;; Updated by Steve Daulton 2014 / 2015.
|
||||
@ -33,20 +33,21 @@
|
||||
(env (snd-pwl 0.0 rate breakpoints)))
|
||||
(cond
|
||||
((not (or f0 f1)) ; This should never happen for a 'spectral' effect.
|
||||
(throw 'error-message "Please select frequencies."))
|
||||
(throw 'error-message
|
||||
(format nil (_"~aPlease select frequencies.") p-err)))
|
||||
((and f0 f1 (= f0 f1))
|
||||
(throw 'error-message
|
||||
(format nil "~aBandwidth is zero (the upper and lower~%~
|
||||
(format nil (_"~aBandwidth is zero (the upper and lower~%~
|
||||
frequencies are both ~a Hz).~%~
|
||||
Please select a frequency range."
|
||||
Please select a frequency range.")
|
||||
p-err f0)))
|
||||
;; Biqud filter fails if centre frequency is very low and bandwidth very high.
|
||||
;; 'Magic numbers' 10 Hz and 10 octaves are experimental.
|
||||
((and f0 (< f0 10) (or (not bw)(> bw 10)))
|
||||
(throw 'error-message
|
||||
(format nil "~aNotch filter parameters cannot be applied.~%~
|
||||
(format nil (_"~aNotch filter parameters cannot be applied.~%~
|
||||
Try increasing the low frequency bound~%~
|
||||
or reduce the filter 'Width'."
|
||||
or reduce the filter 'Width'.")
|
||||
p-err)))
|
||||
;; low pass frequency is above Nyquist so do nothing
|
||||
((and (not f1) (>= f0 (/ *sound-srate* 2.0)))
|
||||
@ -61,5 +62,5 @@
|
||||
(prod (diff 1.0 env) sig))))))
|
||||
|
||||
(catch 'error-message
|
||||
(setf p-err "Error.\n")
|
||||
(setf p-err (format nil (_"Error.~%")))
|
||||
(multichan-expand #'result *track*))
|
||||
|
@ -2,18 +2,18 @@
|
||||
;version 4
|
||||
;type process spectral
|
||||
;preview linear
|
||||
;name "Spectral edit parametric EQ..."
|
||||
$name (_"Spectral edit parametric EQ")
|
||||
;manpage "Spectral_edit_parametric_EQ"
|
||||
;action "Filtering..."
|
||||
;author "Paul Licameli"
|
||||
;copyright "Released under terms of the GNU General Public License version 2"
|
||||
$action (_"Filtering...")
|
||||
$author (_"Paul Licameli")
|
||||
$copyright (_"Released under terms of the GNU General Public License version 2")
|
||||
|
||||
;; SpectralEditParametricEQ.ny by Paul Licameli, November 2014.
|
||||
;; Updated by Steve Daulton 2014 / 2015.
|
||||
;; Released under terms of the GNU General Public License version 2:
|
||||
;; http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
|
||||
;control control-gain "Gain (dB)" real "" 0 -24 24
|
||||
$control control-gain (_"Gain (dB)") real "" 0 -24 24
|
||||
|
||||
(defun wet (sig gain fc bw)
|
||||
(eq-band sig fc gain (/ bw 2)))
|
||||
@ -33,24 +33,24 @@
|
||||
(env (snd-pwl 0.0 rate breakpoints)))
|
||||
(cond
|
||||
((not (or f0 f1)) ; This should never happen for a 'spectral' effect.
|
||||
(throw 'error-message (format nil "~aPlease select frequencies." p-err)))
|
||||
(throw 'error-message (format nil (_"~aPlease select frequencies.") p-err)))
|
||||
((not f0)
|
||||
(throw 'error-message (format nil "~aLow frequency is undefined." p-err)))
|
||||
(throw 'error-message (format nil (_"~aLow frequency is undefined.") p-err)))
|
||||
((not f1)
|
||||
(throw 'error-message (format nil "~aHigh frequency is undefined." p-err)))
|
||||
(throw 'error-message (format nil (_"~aHigh frequency is undefined.") p-err)))
|
||||
((and fc (= fc 0))
|
||||
(throw 'error-message (format nil "~aCenter frequency must be above 0 Hz." p-err)))
|
||||
(throw 'error-message (format nil (_"~aCenter frequency must be above 0 Hz.") p-err)))
|
||||
((and f1 (> f1 (/ *sound-srate* 2)))
|
||||
(throw 'error-message
|
||||
(format nil "~aFrequency selection is too high for track sample rate.
|
||||
(format nil (_"~aFrequency selection is too high for track sample rate.~%~
|
||||
For the current track, the high frequency setting cannot~%~
|
||||
be greater than ~a Hz"
|
||||
be greater than ~a Hz")
|
||||
p-err (/ *sound-srate* 2))))
|
||||
((and bw (= bw 0))
|
||||
(throw 'error-message
|
||||
(format nil "~aBandwidth is zero (the upper and lower~%~
|
||||
(format nil (_"~aBandwidth is zero (the upper and lower~%~
|
||||
frequencies are both ~a Hz).~%~
|
||||
Please select a frequency range."
|
||||
Please select a frequency range.")
|
||||
p-err f0)))
|
||||
;; If centre frequency band is above Nyquist, do nothing.
|
||||
((and fc (>= fc (/ *sound-srate* 2.0)))
|
||||
@ -59,7 +59,7 @@
|
||||
(prod (diff 1.0 env) sig))))))
|
||||
|
||||
(catch 'error-message
|
||||
(setf p-err "Error.\n")
|
||||
(setf p-err (format nil (_"Error.~%")))
|
||||
(if (= control-gain 0)
|
||||
nil ; Do nothing
|
||||
(multichan-expand #'result *track*)))
|
||||
|
@ -2,11 +2,11 @@
|
||||
;version 4
|
||||
;type process spectral
|
||||
;preview linear
|
||||
;name "Spectral edit shelves..."
|
||||
$name (_"Spectral edit shelves")
|
||||
;manpage "Spectral_edit_shelves"
|
||||
;action "Filtering..."
|
||||
;author "Paul Licameli"
|
||||
;copyright "Released under terms of the GNU General Public License version 2"
|
||||
$action (_"Filtering...")
|
||||
$author (_"Paul Licameli")
|
||||
$copyright (_"Released under terms of the GNU General Public License version 2")
|
||||
|
||||
|
||||
;; SpectralEditShelves.ny by Paul Licameli, November 2014.
|
||||
@ -14,7 +14,7 @@
|
||||
;; Released under terms of the GNU General Public License version 2:
|
||||
;; http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
|
||||
;control control-gain "Gain (dB)" real "" 0 -24 24
|
||||
$control control-gain (_"Gain (dB)") real "" 0 -24 24
|
||||
|
||||
(defmacro validate (hz)
|
||||
"If frequency is above Nyquist, don't use it"
|
||||
@ -49,15 +49,15 @@
|
||||
(env (snd-pwl 0.0 rate breakpoints)))
|
||||
(cond
|
||||
((not (or f0 f1)) ; This should never happen for a 'spectral' effect.
|
||||
(throw 'error-message (format nil "~aPlease select frequencies." p-err)))
|
||||
(throw 'error-message (format nil (_"~aPlease select frequencies.") p-err)))
|
||||
((and f0 (>= f0 (/ *sound-srate* 2.0)))
|
||||
; Shelf is above Nyquist frequency so do nothing.
|
||||
nil)
|
||||
((and f0 f1 (= f0 f1))
|
||||
(throw 'error-message
|
||||
(format nil "~aBandwidth is zero (the upper and lower~%~
|
||||
(format nil (_"~aBandwidth is zero (the upper and lower~%~
|
||||
frequencies are both ~a Hz).~%~
|
||||
Please select a frequency range."
|
||||
Please select a frequency range.")
|
||||
p-err f0)))
|
||||
(T (if f0 (validate f0))
|
||||
(if f1 (validate f1))
|
||||
@ -67,7 +67,7 @@
|
||||
(prod (diff 1.0 env) sig)))))))
|
||||
|
||||
(catch 'error-message
|
||||
(setf p-err "Error.\n")
|
||||
(setf p-err (format nil (_"Error.~%")))
|
||||
(if (= control-gain 0)
|
||||
nil ; Do nothing
|
||||
(multichan-expand #'result *track*)))
|
||||
|
@ -2,11 +2,11 @@
|
||||
;version 1
|
||||
;type process
|
||||
;categories "http://lv2plug.in/ns/lv2core#MixerPlugin"
|
||||
;name "Studio Fade Out"
|
||||
$name (_"Studio Fade Out")
|
||||
;manpage "Fades#studio_fadeout"
|
||||
;action "Applying Fade..."
|
||||
;author "Steve Daulton"
|
||||
;copyright "Released under terms of the GNU General Public License version 2"
|
||||
$action (_"Applying Fade...")
|
||||
$author (_"Steve Daulton")
|
||||
$copyright (_"Released under terms of the GNU General Public License version 2")
|
||||
|
||||
;; StudioFadeOut.ny by Steve Daulton December 2012.
|
||||
;; Released under terms of the GNU General Public License version 2:
|
||||
@ -39,7 +39,7 @@
|
||||
|
||||
(let ((dur (get-duration 1)))
|
||||
(cond
|
||||
((< len 3) "Selection too short.\nIt must be more than 2 samples.")
|
||||
((< len 3) (format nil (_"Selection too short.~%It must be more than 2 samples.")))
|
||||
((< dur 0.2) (mult s (r-cos dur)))
|
||||
(t (mult (filter s dur)(r-cos dur)))))
|
||||
|
||||
|
||||
|
@ -4,12 +4,12 @@
|
||||
;preview linear
|
||||
;preview selection
|
||||
;categories "http://lv2plug.in/ns/lv2core#MixerPlugin"
|
||||
;name "Adjustable Fade..."
|
||||
$name (_"Adjustable Fade")
|
||||
;manpage "Adjustable_Fade"
|
||||
;debugbutton false
|
||||
;action "Applying Fade..."
|
||||
;author "Steve Daulton"
|
||||
;copyright "Released under terms of the GNU General Public License version 2"
|
||||
$action (_"Applying Fade...")
|
||||
$author (_"Steve Daulton")
|
||||
$copyright (_"Released under terms of the GNU General Public License version 2")
|
||||
|
||||
;; adjustable-fade.ny by Steve Daulton Dec 2012
|
||||
;; Released under terms of the GNU General Public License version 2:
|
||||
@ -18,12 +18,21 @@
|
||||
;; For information about writing and modifying Nyquist plug-ins:
|
||||
;; https://wiki.audacityteam.org/wiki/Nyquist_Plug-ins_Reference
|
||||
|
||||
;control type "Fade Type" choice "Fade Up,Fade Down,S-Curve Up,S-Curve Down" 0
|
||||
;control curve "Mid-fade Adjust (%)" real "" 0 -100 100
|
||||
;control units "Start/End as" choice "% of Original,dB Gain" 0
|
||||
;control gain0 "Start (or end)" float-text "" 0 nil nil
|
||||
;control gain1 "End (or start)" float-text "" 100 nil nil
|
||||
;control preset " Handy Presets\n(override controls)" choice "None Selected,Linear In,Linear Out,Exponential In,Exponential Out,Logarithmic In,Logarithmic Out,Rounded In,Rounded Out,Cosine In,Cosine Out,S-Curve In,S-Curve Out" 0
|
||||
$control type (_"Fade Type") choice ((_"Fade Up") (_"Fade Down") (_"S-Curve Up") (_"S-Curve Down")) 0
|
||||
$control curve (_"Mid-fade Adjust (%)") real "" 0 -100 100
|
||||
$control units (_"Start/End as") choice ((_"% of Original") (_"dB Gain")) 0
|
||||
$control gain0 (_"Start (or end)") float-text "" 0 nil nil
|
||||
$control gain1 (_"End (or start)") float-text "" 100 nil nil
|
||||
$control preset (_" Handy Presets
|
||||
(override controls)") choice (
|
||||
(_"None Selected")
|
||||
(_"Linear In") (_"Linear Out")
|
||||
(_"Exponential In") (_"Exponential Out")
|
||||
(_"Logarithmic In") (_"Logarithmic Out")
|
||||
(_"Rounded In") (_"Rounded Out")
|
||||
(_"Cosine In") (_"Cosine Out")
|
||||
(_"S-Curve In") (_"S-Curve Out")
|
||||
) 0
|
||||
|
||||
|
||||
(defun get-input (sig)
|
||||
@ -45,14 +54,14 @@ selection length, but preview only needs to process preview length."
|
||||
(if (= units 0) ;percentage values
|
||||
(cond
|
||||
((or (< x 0)(< y 0))
|
||||
(throw 'err (format nil "~aPercentage values cannot be negative." err)))
|
||||
(throw 'err (format nil (_"~aPercentage values cannot be negative.") err)))
|
||||
((or (> x 1000)(> y 1000))
|
||||
(throw 'err (format nil "~aPercentage values cannot be more than 1000 %." err))))
|
||||
(throw 'err (format nil (_"~aPercentage values cannot be more than 1000 %.") err))))
|
||||
(cond ;dB values
|
||||
((or (> x 100)(> y 100))
|
||||
(throw 'err (format nil "~adB values cannot be more than +100 dB.~%~%~
|
||||
(throw 'err (format nil (_"~adB values cannot be more than +100 dB.~%~%~
|
||||
Hint: 6 dB doubles the amplitude~%~
|
||||
\t-6 dB halves the amplitude." err))))))
|
||||
\t-6 dB halves the amplitude." err)))))))
|
||||
|
||||
;;; select and apply fade
|
||||
(defun fade (sig type curve g0 g1)
|
||||
@ -184,7 +193,7 @@ selection length, but preview only needs to process preview length."
|
||||
(setf curve (/ curve 100.0))
|
||||
(setf gain0 (gainscale gain0 units))
|
||||
(setf gain1 (gainscale gain1 units))
|
||||
(setf err "Error\n\n")
|
||||
(setf err (format nil (_"Error~%~%")))
|
||||
|
||||
|
||||
(catch 'err (fade *track* type curve gain0 gain1))
|
||||
|
@ -2,22 +2,23 @@
|
||||
;version 1
|
||||
;type analyze
|
||||
;categories "https://audacityteam.org/namespace#OnsetDetector"
|
||||
;name "Beat Finder..."
|
||||
$name (_"Beat Finder")
|
||||
;manpage "Beat_Finder"
|
||||
;action "Finding beats..."
|
||||
;author "Audacity"
|
||||
;copyright "Released under terms of the GNU General Public License version 2"
|
||||
$action (_"Finding beats...")
|
||||
$author (_"Audacity")
|
||||
$copyright (_"Released under terms of the GNU General Public License version 2")
|
||||
|
||||
;; Released under terms of the GNU General Public License version 2:
|
||||
;; http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
|
||||
;control thresval "Threshold Percentage" int "" 65 5 100
|
||||
$control thresval (_"Threshold Percentage") int "" 65 5 100
|
||||
(setf s1 (if (arrayp s) (snd-add (aref s 0) (aref s 1)) s))
|
||||
(defun signal () (force-srate 1000 (lp (snd-follow (lp s1 50) 0.001 0.01 0.1 512) 10)))
|
||||
(setq max (peak (signal) NY:ALL))
|
||||
(setq thres (* (/ thresval 100.0) max))
|
||||
(setq s2 (signal))
|
||||
(do ((c 0.0) (l NIL) (p T) (v (snd-fetch s2))) ((not v) l)
|
||||
; "B" seems too short to put into the i18n catalog. Make it a control?
|
||||
(if (and p (> v thres)) (setq l (cons (list c "B") l)))
|
||||
(setq p (< v thres))
|
||||
(setq c (+ c 0.001))
|
||||
|
@ -2,11 +2,11 @@
|
||||
;version 4
|
||||
;type process
|
||||
;preview enabled
|
||||
;name "Clip Fix..."
|
||||
$name (_"Clip Fix")
|
||||
;manpage "Clip_Fix"
|
||||
;action "Reconstructing clips..."
|
||||
;author "Benjamin Schwartz and Steve Daulton"
|
||||
;copyright "Licensing confirmed under terms of the GNU General Public License version 2"
|
||||
$action (_"Reconstructing clips...")
|
||||
$author (_"Benjamin Schwartz and Steve Daulton")
|
||||
$copyright (_"Licensing confirmed under terms of the GNU General Public License version 2")
|
||||
|
||||
;; Algorithm by Benjamin Schwartz
|
||||
;; Clip Fix is a simple, stupid (but not blind) digital-clipping-corrector
|
||||
@ -16,8 +16,8 @@
|
||||
;; 3. Do a cubic spline interpolation.
|
||||
;; 4. Go to next region
|
||||
|
||||
;control threshold "Threshold of Clipping (%)" float "" 95 0 100
|
||||
;control gain "Reduce amplitude to allow for restored peaks (dB)" float "" -9 -30 0
|
||||
$control threshold (_"Threshold of Clipping (%)") float "" 95 0 100
|
||||
$control gain (_"Reduce amplitude to allow for restored peaks (dB)") float "" -9 -30 0
|
||||
|
||||
(setf threshold (/ threshold 100))
|
||||
(setf gain (db-to-linear gain))
|
||||
|
@ -3,11 +3,11 @@
|
||||
;type process
|
||||
;mergeclips 1
|
||||
;restoresplits 0
|
||||
;name "Crossfade Clips"
|
||||
$name (_"Crossfade Clips")
|
||||
;manpage "Crossfade_Clips"
|
||||
;action "Crossfading..."
|
||||
;author "Steve Daulton"
|
||||
;copyright "Released under terms of the GNU General Public License version 2"
|
||||
$action (_"Crossfading...")
|
||||
$author (_"Steve Daulton")
|
||||
$copyright (_"Released under terms of the GNU General Public License version 2")
|
||||
|
||||
|
||||
;; crossfadeclips.ny by Steve Daulton Dec 2014.
|
||||
@ -37,8 +37,8 @@
|
||||
;; 2) The selection may not start or end in white-space.
|
||||
|
||||
|
||||
(setf err1 "Error.\nInvalid selection.\nMore than 2 audio clips selected.")
|
||||
(setf err2 "Error.\nInvalid selection.\nEmpty space at start/ end of the selection.")
|
||||
(setf err1 (format nil (_"Error.~%Invalid selection.~%More than 2 audio clips selected.")))
|
||||
(setf err2 (format nil (_"Error.~%Invalid selection.~%Empty space at start/ end of the selection.")))
|
||||
|
||||
|
||||
(defun find-ends (T0 T1 clips)
|
||||
@ -128,4 +128,4 @@
|
||||
(get '*selection* 'start)
|
||||
(get '*selection* 'end)
|
||||
(get '*track* 'clips)))
|
||||
"Error.\nCrossfade Clips may only be applied to one track.")
|
||||
(format nil (_"Error.~%Crossfade Clips may only be applied to one track.")))
|
||||
|
@ -1,21 +1,21 @@
|
||||
;nyquist plug-in
|
||||
;version 4
|
||||
;type process
|
||||
;name "Crossfade Tracks..."
|
||||
$name (_"Crossfade Tracks")
|
||||
;manpage "Crossfade_Tracks"
|
||||
;debugbutton disabled
|
||||
;action "Crossfading..."
|
||||
$action (_"Crossfading...")
|
||||
;preview selection
|
||||
;author "Steve Daulton"
|
||||
;copyright "Released under terms of the GNU General Public License version 2"
|
||||
$author (_"Steve Daulton")
|
||||
$copyright (_"Released under terms of the GNU General Public License version 2")
|
||||
|
||||
;; crossfadetracks.ny by Steve Daulton Nov 2014 / Sep 2015
|
||||
;; Released under terms of the GNU General Public License version 2:
|
||||
;; http://www.gnu.org/licenses/old-licenses/gpl-2.0.html .
|
||||
|
||||
;control type "Fade type" choice "Constant Gain,Constant Power 1,Constant Power 2,Custom Curve" 0
|
||||
;control curve "Custom curve" real "" 0 0 1
|
||||
;control direction "Fade direction" choice "Automatic,Alternating Out / In,Alternating In / Out" 0
|
||||
$control type (_"Fade type") choice ((_"Constant Gain") (_"Constant Power 1") (_"Constant Power 2") (_"Custom Curve")) 0
|
||||
$control curve (_"Custom curve") real "" 0 0 1
|
||||
$control direction (_"Fade direction") choice ((_"Automatic") (_"Alternating Out / In") (_"Alternating In / Out")) 0
|
||||
|
||||
|
||||
(defun crossfade (type dir curve)
|
||||
@ -72,5 +72,5 @@ audio clip, fade in, otherwise fade out."
|
||||
(if (< in-dist out-dist) 'in 'out)))
|
||||
|
||||
(if (< (length (get '*selection* 'tracks)) 2)
|
||||
"Error.\nSelect 2 (or more) tracks to crossfade."
|
||||
(format nil (_"Error.~%Select 2 (or more) tracks to crossfade."))
|
||||
(crossfade type direction curve))
|
||||
|
@ -3,11 +3,11 @@
|
||||
;type process
|
||||
;preview linear
|
||||
;categories "http://lv2plug.in/ns/lv2core#DelayPlugin"
|
||||
;name "Delay..."
|
||||
$name (_"Delay")
|
||||
;manpage "Delay"
|
||||
;action "Applying Delay Effect..."
|
||||
;author "Steve Daulton"
|
||||
;copyright "Released under terms of the GNU General Public License version 2"
|
||||
$action (_"Applying Delay Effect...")
|
||||
$author (_"Steve Daulton")
|
||||
$copyright (_"Released under terms of the GNU General Public License version 2")
|
||||
|
||||
;; by Steve Daulton, July 2012.
|
||||
;; based on 'Delay' by David R. Sky
|
||||
@ -17,13 +17,13 @@
|
||||
;; For information about writing and modifying Nyquist plug-ins:
|
||||
;; https://wiki.audacityteam.org/wiki/Nyquist_Plug-ins_Reference
|
||||
|
||||
;control delay-type "Delay type" choice "regular,bouncing ball,reverse bouncing ball" 0
|
||||
;control dgain "Delay level per echo (dB)" real "" -6 -30 1
|
||||
;control delay "Delay time (seconds)" real "" 0.3 0 5
|
||||
;control pitch-type "Pitch change effect" choice "Pitch/Tempo,LQ Pitch Shift" 0
|
||||
;control shift "Pitch change per echo (semitones)" real "" 0 -2 2
|
||||
;control number "Number of echoes" int "" 5 1 30
|
||||
;control constrain "Allow duration to change" choice "Yes,No" 0
|
||||
$control delay-type (_"Delay type") choice ((_"regular") (_"bouncing ball") (_"reverse bouncing ball")) 0
|
||||
$control dgain (_"Delay level per echo (dB)") real "" -6 -30 1
|
||||
$control delay (_"Delay time (seconds)") real "" 0.3 0 5
|
||||
$control pitch-type (_"Pitch change effect") choice ((_"Pitch/Tempo") (_"LQ Pitch Shift")) 0
|
||||
$control shift (_"Pitch change per echo (semitones)") real "" 0 -2 2
|
||||
$control number (_"Number of echoes") int "" 5 1 30
|
||||
$control constrain (_"Allow duration to change") choice ((_"Yes") (_"No")) 0
|
||||
|
||||
|
||||
;; The default pitch shift effect is a simple resampling,
|
||||
@ -42,19 +42,19 @@
|
||||
T nil))
|
||||
|
||||
(when (err-chk number 1 50)(setq err (format nil
|
||||
"Number of echoes '~a' outside valid range 1 to 50.~%~a"
|
||||
(_"Number of echoes '~a' outside valid range 1 to 50.~%~a")
|
||||
number err)))
|
||||
|
||||
(when (err-chk shift -12 12)(setq err (format nil
|
||||
"Pitch change '~a' outside valid range -12 to +12 semitones.~%~a"
|
||||
(_"Pitch change '~a' outside valid range -12 to +12 semitones.~%~a")
|
||||
shift err)))
|
||||
|
||||
(when (err-chk delay 0 10)(setq err (format nil
|
||||
"Delay time '~a' outside valid range 0 to 10 seconds.~%~a"
|
||||
(_"Delay time '~a' outside valid range 0 to 10 seconds.~%~a")
|
||||
delay err)))
|
||||
|
||||
(when (err-chk dgain -30 6)(setq err (format nil
|
||||
"Delay level '~a' outside valid range -30 to +6 dB.~%~a"
|
||||
(_"Delay level '~a' outside valid range -30 to +6 dB.~%~a")
|
||||
dgain err)))
|
||||
|
||||
|
||||
@ -121,7 +121,7 @@
|
||||
|
||||
;;; return errors or process
|
||||
(if (> (length err) 0)
|
||||
(format nil "Error.~%~a" err) ; return error
|
||||
(format nil (_"Error.~%~a") err) ; return error
|
||||
(let* ((delay (if (= delay-type 0) delay (/ delay number)))
|
||||
(output
|
||||
(multichan-expand #'delays
|
||||
|
@ -1,11 +1,11 @@
|
||||
;nyquist plug-in
|
||||
;version 4
|
||||
;type analyze
|
||||
;name "Regular Interval Labels..."
|
||||
$name (_"Regular Interval Labels")
|
||||
;manpage "Regular_Interval_Labels"
|
||||
;action "Adding equally-spaced labels to the label track..."
|
||||
;author "Steve Daulton"
|
||||
;copyright "Released under terms of the GNU General Public License version 2"
|
||||
$action (_"Adding equally-spaced labels to the label track...")
|
||||
$author (_"Steve Daulton")
|
||||
$copyright (_"Released under terms of the GNU General Public License version 2")
|
||||
|
||||
;; Released under terms of the GNU General Public License version 2:
|
||||
;; http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
@ -15,13 +15,17 @@
|
||||
;; Alex S.Brown, Dominic Mazzoni, Pierre M.I., Gale Andrews, Steve Daulton.
|
||||
;; This version by Steve Daulton (http://easyspacepro.com) 2016
|
||||
|
||||
;control mode "Use 'Number of labels' OR 'Label interval'" choice "Number of labels,Label interval" 0
|
||||
;control totalnum "Number of labels" int-text "" 10 1 1000
|
||||
;control interval "Label interval (seconds)" float-text "" 60 0.001 3600
|
||||
;control adjust "Adjust label interval to fit length" choice "No,Yes" 0
|
||||
;control labeltext "Label text" string "" "Label" ""
|
||||
;control zeros "Minimum number of digits in label" choice "None - text only,1 (before label),2 (before label),3 (before label),1 (after label),2 (after label),3 (after label)" 2
|
||||
;control firstnum "Begin numbering from" int-text "" 1 0 nil
|
||||
$control mode (_"Use 'Number of labels' OR 'Label interval'") choice ((_"Number of labels") (_"Label interval")) 0
|
||||
$control totalnum (_"Number of labels") int-text "" 10 1 1000
|
||||
$control interval (_"Label interval (seconds)") float-text "" 60 0.001 3600
|
||||
$control adjust (_"Adjust label interval to fit length") choice ((_"No") (_"Yes")) 0
|
||||
$control labeltext (_"Label text") string "" (_"Label")
|
||||
$control zeros (_"Minimum number of digits in label") choice (
|
||||
(_"None - text only")
|
||||
(_"1 (before label)") (_"2 (before label)") (_"3 (before label)")
|
||||
(_"1 (after label)") (_"2 (after label)") (_"3 (after label)")
|
||||
) 2
|
||||
$control firstnum (_"Begin numbering from") int-text "" 1 0 nil
|
||||
|
||||
|
||||
(defun make-labels ()
|
||||
@ -45,12 +49,12 @@
|
||||
"Throw error if excessive number of labels ('Interval' mode only)"
|
||||
(when (> totalnum 1000)
|
||||
(throw 'err
|
||||
(format nil "Too many labels.~%~%~
|
||||
(format nil ("Too many labels.~%~%~
|
||||
Selection length is ~a seconds and~%~
|
||||
Label interval is ~a seconds~%~
|
||||
giving a total of ~a labels.~%~
|
||||
Maximum number of labels from this effect is 1000.~%~
|
||||
Please use a shorter selection, or a longer Label interval."
|
||||
Please use a shorter selection, or a longer Label interval.")
|
||||
(formatgg (get-duration 1))
|
||||
(formatgg interval)
|
||||
(if (= adjust 1)
|
||||
|
@ -2,12 +2,12 @@
|
||||
;version 4
|
||||
;type process
|
||||
;preview linear
|
||||
;name "High Pass Filter..."
|
||||
$name (_"High Pass Filter")
|
||||
;manpage "High_Pass_Filter"
|
||||
;debugbutton disabled
|
||||
;action "Performing High Pass Filter..."
|
||||
;author "Dominic Mazzoni"
|
||||
;copyright "Released under terms of the GNU General Public License version 2"
|
||||
$action (_"Performing High Pass Filter...")
|
||||
$author (_"Dominic Mazzoni")
|
||||
$copyright (_"Released under terms of the GNU General Public License version 2")
|
||||
|
||||
;; highpass.ny by Dominic Mazzoni
|
||||
;; Last updated August 2015
|
||||
@ -15,16 +15,16 @@
|
||||
;; http://www.gnu.org/licenses/old-licenses/gpl-2.0.html .
|
||||
|
||||
|
||||
;control frequency "Frequency (Hz)" float-text "" 1000 0 nil
|
||||
;control rolloff "Rolloff (dB per octave)" choice " 6 dB,12 dB,24 dB,36 dB,48 dB" 0
|
||||
$control frequency (_"Frequency (Hz)") float-text "" 1000 0 nil
|
||||
$control rolloff (_"Rolloff (dB per octave)") choice ((_"6 dB") (_"12 dB") (_"24 dB") (_"36 dB") (_"48 dB")) 0
|
||||
|
||||
|
||||
(cond
|
||||
((< frequency 0.1) "Frequency must be at least 0.1 Hz.")
|
||||
((< frequency 0.1) (_"Frequency must be at least 0.1 Hz."))
|
||||
((>= frequency (/ *sound-srate* 2.0))
|
||||
(format nil "Error:~%~%Frequency (~a Hz) is too high for track sample rate.~%~%~
|
||||
(format nil (_"Error:~%~%Frequency (~a Hz) is too high for track sample rate.~%~%~
|
||||
Track sample rate is ~a Hz~%~
|
||||
Frequency must be less than ~a Hz."
|
||||
Frequency must be less than ~a Hz.")
|
||||
frequency
|
||||
*sound-srate*
|
||||
(/ *sound-srate* 2.0)))
|
||||
|
@ -2,13 +2,13 @@
|
||||
;version 4
|
||||
;type process
|
||||
;categories "http://lv2plug.in/ns/lv2core/#DynamicsPlugin"
|
||||
;name "Limiter..."
|
||||
$name (_"Limiter")
|
||||
;manpage "Limiter"
|
||||
;debugbutton false
|
||||
;action "Limiting..."
|
||||
$action (_"Limiting...")
|
||||
;preview enabled
|
||||
;author "Steve Daulton"
|
||||
;copyright "Released under terms of the GNU General Public License version 2"
|
||||
$author (_"Steve Daulton")
|
||||
$copyright (_"Released under terms of the GNU General Public License version 2")
|
||||
|
||||
;; limiter.ny by Steve Daulton November 2011, updated May 2015.
|
||||
;; Released under terms of the GNU General Public License version 2:
|
||||
@ -17,12 +17,14 @@
|
||||
;; For information about writing and modifying Nyquist plug-ins:
|
||||
;; https://wiki.audacityteam.org/wiki/Nyquist_Plug-ins_Reference
|
||||
|
||||
;control type "Type" choice "Soft Limit,Hard Limit,Soft Clip,Hard Clip" 0
|
||||
;control gain-L "Input Gain (dB)\nmono/Left" real "" 0 0 10
|
||||
;control gain-R "Input Gain (dB)\nRight channel" real "" 0 0 10
|
||||
;control thresh "Limit to (dB)" real "" -3 -10 0
|
||||
;control hold "Hold (ms)" real "" 10 1 50
|
||||
;control makeup "Apply Make-up Gain" choice "No,Yes" 0
|
||||
$control type (_"Type") choice ((_"Soft Limit") (_"Hard Limit") (_"Soft Clip") (_"Hard Clip")) 0
|
||||
$control gain-L (_"Input Gain (dB)
|
||||
mono/Left") real "" 0 0 10
|
||||
$control gain-R (_"Input Gain (dB)
|
||||
Right channel") real "" 0 0 10
|
||||
$control thresh (_"Limit to (dB)") real "" -3 -10 0
|
||||
$control hold (_"Hold (ms)") real "" 10 1 50
|
||||
$control makeup (_"Apply Make-up Gain") choice ((_"No") (_"Yes")) 0
|
||||
|
||||
(if (not (boundp 'type))
|
||||
(setf type 0))
|
||||
|
@ -2,12 +2,12 @@
|
||||
;version 4
|
||||
;type process
|
||||
;preview linear
|
||||
;name "Low Pass Filter..."
|
||||
$name (_"Low Pass Filter")
|
||||
;manpage "Low_Pass_Filter"
|
||||
;debugbutton disabled
|
||||
;action "Performing Low Pass Filter..."
|
||||
;author "Dominic Mazzoni"
|
||||
;copyright "Released under terms of the GNU General Public License version 2"
|
||||
$action (_"Performing Low Pass Filter...")
|
||||
$author (_"Dominic Mazzoni")
|
||||
$copyright (_"Released under terms of the GNU General Public License version 2")
|
||||
|
||||
;; lowpass.ny by Dominic Mazzoni
|
||||
;; Last updated August 2015
|
||||
@ -15,16 +15,16 @@
|
||||
;; http://www.gnu.org/licenses/old-licenses/gpl-2.0.html .
|
||||
|
||||
|
||||
;control frequency "Frequency (Hz)" float-text "" 1000 0 nil
|
||||
;control rolloff "Rolloff (dB per octave)" choice " 6 dB,12 dB,24 dB,36 dB,48 dB" 0
|
||||
$control frequency (_"Frequency (Hz)") float-text "" 1000 0 nil
|
||||
$control rolloff (_"Rolloff (dB per octave)") choice ((_"6 dB") (_"12 dB") (_"24 dB") (_"36 dB") (_"48 dB")) 0
|
||||
|
||||
|
||||
(cond
|
||||
((< frequency 0.1) "Frequency must be at least 0.1 Hz.")
|
||||
((< frequency 0.1) (_"Frequency must be at least 0.1 Hz."))
|
||||
((>= frequency (/ *sound-srate* 2.0))
|
||||
(format nil "Error:~%~%Frequency (~a Hz) is too high for track sample rate.~%~%~
|
||||
(format nil (_"Error:~%~%Frequency (~a Hz) is too high for track sample rate.~%~%~
|
||||
Track sample rate is ~a Hz~%~
|
||||
Frequency must be less than ~a Hz."
|
||||
Frequency must be less than ~a Hz.")
|
||||
frequency
|
||||
*sound-srate*
|
||||
(/ *sound-srate* 2.0)))
|
||||
|
@ -2,27 +2,27 @@
|
||||
;version 4
|
||||
;type process
|
||||
;preview linear
|
||||
;name "Notch Filter..."
|
||||
$name (_"Notch Filter")
|
||||
;manpage "Notch_Filter"
|
||||
;debugbutton false
|
||||
;action "Applying Notch Filter..."
|
||||
;author "Steve Daulton and Bill Wharrie"
|
||||
;copyright "Released under terms of the GNU General Public License version 2"
|
||||
$action (_"Applying Notch Filter...")
|
||||
$author (_"Steve Daulton and Bill Wharrie")
|
||||
$copyright (_"Released under terms of the GNU General Public License version 2")
|
||||
|
||||
;; notch.ny by Steve Daulton and Bill Wharrie
|
||||
;; Released under terms of the GNU General Public License version 2:
|
||||
;; http://www.gnu.org/licenses/old-licenses/gpl-2.0.html .
|
||||
|
||||
|
||||
;control frequency "Frequency (Hz)" float-text "" 60 0 nil
|
||||
;control q "Q (higher value reduces width)" float-text "" 1 0.1 1000
|
||||
$control frequency (_"Frequency (Hz)") float-text "" 60 0 nil
|
||||
$control q (_"Q (higher value reduces width)") float-text "" 1 0.1 1000
|
||||
|
||||
(cond
|
||||
((< frequency 0.1) "Frequency must be at least 0.1 Hz.")
|
||||
((< frequency 0.1) (_"Frequency must be at least 0.1 Hz."))
|
||||
((>= frequency (/ *sound-srate* 2.0))
|
||||
(format nil "Error:~%~%Frequency (~a Hz) is too high for track sample rate.~%~%~
|
||||
(format nil (_"Error:~%~%Frequency (~a Hz) is too high for track sample rate.~%~%~
|
||||
Track sample rate is ~a Hz.~%~
|
||||
Frequency must be less than ~a Hz."
|
||||
Frequency must be less than ~a Hz.")
|
||||
frequency
|
||||
*sound-srate*
|
||||
(/ *sound-srate* 2.0)))
|
||||
|
@ -2,21 +2,21 @@
|
||||
;version 4
|
||||
;type generate
|
||||
;categories "http://lv2plug.in/ns/lv2core#GeneratorPlugin"
|
||||
;name "Pluck..."
|
||||
$name (_"Pluck")
|
||||
;manpage "Pluck"
|
||||
;debugbutton false
|
||||
;preview linear
|
||||
;action "Generating pluck sound..."
|
||||
;info "MIDI values for C notes: 36, 48, 60 [middle C], 72, 84, 96."
|
||||
;author "David R.Sky"
|
||||
;copyright "Released under terms of the GNU General Public License version 2"
|
||||
$action (_"Generating pluck sound...")
|
||||
$info (_"MIDI values for C notes: 36, 48, 60 [middle C], 72, 84, 96.")
|
||||
$author (_"David R.Sky")
|
||||
$copyright (_"Released under terms of the GNU General Public License version 2")
|
||||
|
||||
;; Released under terms of the GNU General Public License version 2:
|
||||
;; http://www.gnu.org/licenses/old-licenses/gpl-2.0.html .
|
||||
|
||||
;control pitch "Pluck MIDI pitch" int "" 60 1 120
|
||||
;control fade "Fade-out type" choice "abrupt,gradual" 0
|
||||
;control dur "Duration [seconds]" real "" 1 0.1 30
|
||||
$control pitch (_"Pluck MIDI pitch") int "" 60 1 120
|
||||
$control fade (_"Fade-out type") choice ((_"abrupt") (_"gradual")) 0
|
||||
$control dur (_"Duration [seconds]") real "" 1 0.1 30
|
||||
|
||||
; original pluck.ny modified by David R.Sky October 2007
|
||||
; [vastly simplified later]
|
||||
|
@ -2,12 +2,12 @@
|
||||
;version 4
|
||||
;type generate
|
||||
;categories "http://lv2plug.in/ns/lv2core#GeneratorPlugin"
|
||||
;name "Rhythm Track..."
|
||||
$name (_"Rhythm Track")
|
||||
;manpage "Rhythm_Track"
|
||||
;preview linear
|
||||
;action "Generating Rhythm..."
|
||||
;author "Dominic Mazzoni"
|
||||
;copyright "Released under terms of the GNU General Public License version 2"
|
||||
$action (_"Generating Rhythm...")
|
||||
$author (_"Dominic Mazzoni")
|
||||
$copyright (_"Released under terms of the GNU General Public License version 2")
|
||||
|
||||
;; by Dominic Mazzoni, David R. Sky and Steve Daulton.
|
||||
;; Drip sound generator by Paul Beach
|
||||
@ -15,22 +15,24 @@
|
||||
;; http://www.gnu.org/licenses/old-licenses/gpl-2.0.html .
|
||||
|
||||
|
||||
;control action "Action choice" choice "Generate track, Help screen 1, Help screen 2" 0
|
||||
;control tempo "Tempo (beats per minute)" real "30 - 300 beats/minute" 120 30 300
|
||||
;control timesig "Beats per measure (bar)" int "1 - 20 beats/measure" 4 1 20
|
||||
;control swing "Swing amount" float "+/- 1" 0 -1 1
|
||||
;control measures "Number of measures (bars)" int "1 - 1000 bars" 16 1 1000
|
||||
;control click-track-dur "Optional rhythm track duration (minutes seconds)" string "Whole numbers only" ""
|
||||
$control action (_"Action choice") choice ((_"Generate track") (_"Help screen 1") (_"Help screen 2")) 0
|
||||
$control tempo (_"Tempo (beats per minute)") real (_"30 - 300 beats/minute") 120 30 300
|
||||
$control timesig (_"Beats per measure (bar)") int (_"1 - 20 beats/measure") 4 1 20
|
||||
$control swing (_"Swing amount") float (_"+/- 1") 0 -1 1
|
||||
$control measures (_"Number of measures (bars)") int (_"1 - 1000 bars") 16 1 1000
|
||||
$control click-track-dur (_"Optional rhythm track duration (minutes seconds)") string (_"Whole numbers only") ""
|
||||
|
||||
;;control ticklen "Individual beat duration (milliseconds)" int "1 - 100 ms" 10 1 100
|
||||
|
||||
;control offset "Start time offset (seconds)" real "0 - 30 seconds" 0 0 30
|
||||
;control click-type "Beat sound" choice "Metronome tick,Ping,Cowbell,Resonant noise,Noise click,Drip" 0
|
||||
$control offset (_"Start time offset (seconds)") real (_"0 - 30 seconds") 0 0 30
|
||||
$control click-type (_"Beat sound") choice (
|
||||
(_"Metronome tick") (_"Ping") (_"Cowbell") (_"Resonant noise") (_"Noise click") (_"Drip")
|
||||
) 0
|
||||
|
||||
;;control q "Noise click resonance - discernable pitch (q)" int "1 - 20" 1 1 20
|
||||
|
||||
;control high "MIDI pitch of strong beat" int "18 - 116" 84 18 116
|
||||
;control low "MIDI pitch of weak beat" int "18 - 116" 80 18 116
|
||||
$control high (_"MIDI pitch of strong beat") int (_"18 - 116") 84 18 116
|
||||
$control low (_"MIDI pitch of weak beat") int (_"18 - 116") 80 18 116
|
||||
|
||||
;; allow q control to be commented out.
|
||||
(if (not (boundp 'q))
|
||||
@ -46,7 +48,7 @@
|
||||
|
||||
(defun help1 ()
|
||||
(format nil
|
||||
"Rhythm Track Generator help - screen 1 of 2
|
||||
(_"Rhythm Track Generator help - screen 1 of 2
|
||||
|
||||
Generates a rhythm track at the selected tempo, beats per
|
||||
measure, and either number of measures or track duration,
|
||||
@ -73,12 +75,12 @@ If you enter a value into this field, the 'number of measures'
|
||||
value will be ignored.
|
||||
|
||||
To generate rhythm track or view help screen 2,
|
||||
restart Rhythm Track and select from 'Action choice'.")) ;end of help1
|
||||
restart Rhythm Track and select from 'Action choice'."))) ;end of help1
|
||||
|
||||
|
||||
(defun help2 ()
|
||||
(format nil
|
||||
"Rhythm Track Generator help - screen 2 of 2
|
||||
(_"Rhythm Track Generator help - screen 2 of 2
|
||||
|
||||
'Start time offset': makes the rhythm track start at a later
|
||||
time than the very beginning (zero seconds), maximum
|
||||
@ -93,7 +95,7 @@ what pitch to use. C-notes are:
|
||||
C# (C-sharp) above middle C is 61.
|
||||
|
||||
To generate rhythm track or view help screen 1,
|
||||
restart Rhythm Track and select from 'Action choice'.")) ;end of help 2
|
||||
restart Rhythm Track and select from 'Action choice'."))) ;end of help 2
|
||||
|
||||
|
||||
;Check function: returns 1 on error
|
||||
@ -154,44 +156,44 @@ restart Rhythm Track and select from 'Action choice'.")) ;end of help 2
|
||||
; tempo
|
||||
(if (= (check tempo 30 300) 1)
|
||||
(setq error-msg (strcat error-msg (format nil
|
||||
"Tempo ~a outside valid range 30 to 300 bpm
|
||||
" tempo))))
|
||||
(_"Tempo ~a outside valid range 30 to 300 bpm
|
||||
") tempo))))
|
||||
|
||||
;beats per measure
|
||||
(if (= (check timesig 1 20) 1)
|
||||
(setq error-msg (strcat error-msg (format nil
|
||||
"Beats per measure ~a outside valid range 1 to 20
|
||||
" timesig))))
|
||||
(_"Beats per measure ~a outside valid range 1 to 20
|
||||
") timesig))))
|
||||
|
||||
;number of measures
|
||||
(if (= (check measures 1 1000) 1)
|
||||
(setq error-msg (strcat error-msg (format nil
|
||||
"Number of measures ~a outside valid range 1 to 1000
|
||||
" measures))))
|
||||
(_"Number of measures ~a outside valid range 1 to 1000
|
||||
") measures))))
|
||||
|
||||
;time start offset
|
||||
(if (= (check offset 0 30) 1)
|
||||
(setq error-msg (strcat error-msg (format nil
|
||||
"Time offset ~a outside valid range 0 to 30 seconds
|
||||
" offset))))
|
||||
(_"Time offset ~a outside valid range 0 to 30 seconds
|
||||
") offset))))
|
||||
|
||||
; q
|
||||
(if (= (check q 1 20) 1)
|
||||
(setq error-msg (strcat error-msg (format nil
|
||||
"Filter quality q ~a outside valid range 1 to 20
|
||||
" q))))
|
||||
(_"Filter quality q ~a outside valid range 1 to 20
|
||||
") q))))
|
||||
|
||||
;high MIDI pitch
|
||||
(if (= (check high 18 116) 1)
|
||||
(setq error-msg (strcat error-msg (format nil
|
||||
"High MIDI pitch ~a outside valid range 18 to 116
|
||||
" high))))
|
||||
(_"High MIDI pitch ~a outside valid range 18 to 116
|
||||
") high))))
|
||||
|
||||
;low MIDI pitch
|
||||
(if (= (check low 18 116) 1)
|
||||
(setq error-msg (strcat error-msg (format nil
|
||||
"Low MIDI pitch ~a outside valid range 18 to 116
|
||||
" low))))
|
||||
(_"Low MIDI pitch ~a outside valid range 18 to 116
|
||||
") low))))
|
||||
|
||||
;validate string
|
||||
(if (> (length m-s) 0) ;if at least one item
|
||||
@ -201,16 +203,16 @@ restart Rhythm Track and select from 'Action choice'.")) ;end of help 2
|
||||
(not (integerp (first m-s))) ;first is not an integer or
|
||||
(and (= (length m-s) 2)(not (integerp (second m-s))))) ;second is not an integer
|
||||
(setq error-msg (strcat error-msg (format nil
|
||||
"If used, 'Optional rhythm track duration' must be
|
||||
(_"If used, 'Optional rhythm track duration' must be
|
||||
entered as either one number (seconds0, or two
|
||||
numbers (minutes seconds) separated by a space.
|
||||
Use whole numbers only.~%"))))
|
||||
Use whole numbers only.~%")))))
|
||||
;one or two integers
|
||||
((and
|
||||
(= (length m-s) 1) ;one integer and
|
||||
(= (check (first m-s) 0 3660) 1)) ;outside valid range
|
||||
(setq error-msg (strcat error-msg (format nil
|
||||
"~a seconds is outside valid range 0 to 3660~%" (first m-s)))))
|
||||
(_"~a seconds is outside valid range 0 to 3660~%") (first m-s)))))
|
||||
;one or two integers
|
||||
((and
|
||||
(= (length m-s) 2) ;2 integers and
|
||||
@ -218,7 +220,7 @@ Use whole numbers only.~%"))))
|
||||
(= (check (first m-s) 0 60) 1) ;1st is outside valid range or
|
||||
(= (check (second m-s) 0 59) 1))) ;2nd is outside valid range or
|
||||
(setq error-msg (strcat error-msg (format nil
|
||||
"~a is outside valid range 0 to (60 59)~%"
|
||||
(_"~a is outside valid range 0 to (60 59)~%")
|
||||
m-s))))))) ;end of error checking
|
||||
|
||||
(defun metronome-tick (hz peak)
|
||||
@ -364,4 +366,4 @@ Use whole numbers only.~%"))))
|
||||
(make-click-track measures (* timesig beatlen)))) ;click track
|
||||
;Else error message
|
||||
(setq error-msg (strcat (format nil
|
||||
"Error.~%You have entered at least one invalid value:~%~%") error-msg)))))
|
||||
(_"Error.~%You have entered at least one invalid value:~%~%")) error-msg)))))
|
||||
|
@ -3,11 +3,12 @@
|
||||
;type generate
|
||||
;categories "http://lv2plug.in/ns/lv2core#GeneratorPlugin"
|
||||
;preview linear
|
||||
;name "Risset Drum..."
|
||||
;i18n-hint named for Jean-Claude Risset (silent t)
|
||||
$name (_"Risset Drum")
|
||||
;manpage "Risset_Drum"
|
||||
;action "Generating Risset Drum..."
|
||||
;author "Steven Jones"
|
||||
;copyright "Released under terms of the GNU General Public License version 2"
|
||||
$action (_"Generating Risset Drum...")
|
||||
$author (_"Steven Jones")
|
||||
$copyright (_"Released under terms of the GNU General Public License version 2")
|
||||
|
||||
;; rissetdrum.ny by Steven Jones, after Jean Claude Risset.
|
||||
;; Updated by Steve Daulton July 2012 and May 2015.
|
||||
@ -17,12 +18,12 @@
|
||||
;; For information about writing and modifying Nyquist plug-ins:
|
||||
;; https://wiki.audacityteam.org/wiki/Nyquist_Plug-ins_Reference
|
||||
|
||||
;control freq "Frequency (Hz)" real "" 100 50 2000
|
||||
;control decay "Decay (seconds)" real "" 2 0.1 60
|
||||
;control cf "Center frequency of noise (Hz)" real "" 500 100 5000
|
||||
;control bw "Width of noise band (Hz)" real "" 400 10 1000
|
||||
;control noise "Amount of noise in mix (percent)" real "" 25 0 100
|
||||
;control gain "Amplitude (0 - 1)" real "" 0.8 0 1
|
||||
$control freq (_"Frequency (Hz)") real "" 100 50 2000
|
||||
$control decay (_"Decay (seconds)") real "" 2 0.1 60
|
||||
$control cf (_"Center frequency of noise (Hz)") real "" 500 100 5000
|
||||
$control bw (_"Width of noise band (Hz)") real "" 400 10 1000
|
||||
$control noise (_"Amount of noise in mix (percent)") real "" 25 0 100
|
||||
$control gain (_"Amplitude (0 - 1)") real "" 0.8 0 1
|
||||
|
||||
|
||||
(defun sanitise (val minx maxx)
|
||||
|
@ -1,13 +1,13 @@
|
||||
;nyquist plug-in
|
||||
;version 3
|
||||
;type analyze
|
||||
;name "Sample Data Export..."
|
||||
$name (_"Sample Data Export")
|
||||
;manpage "Sample_Data_Export"
|
||||
;action "Analyzing..."
|
||||
$action (_"Analyzing...")
|
||||
;maxlen 1000001
|
||||
;categories "http://lv2plug.in/ns/lv2core#AnalyserPlugin"
|
||||
;author "Steve Daulton"
|
||||
;copyright "Released under terms of the GNU General Public License version 2"
|
||||
$author (_"Steve Daulton")
|
||||
$copyright (_"Released under terms of the GNU General Public License version 2")
|
||||
|
||||
;; sample-data-export.ny by Steve Daulton June 2012.
|
||||
;; Updated July 16 2012.
|
||||
@ -17,16 +17,35 @@
|
||||
;; For information about writing and modifying Nyquist plug-ins:
|
||||
;; https://wiki.audacityteam.org/wiki/Nyquist_Plug-ins_Reference
|
||||
|
||||
;control number "Limit output to first" string "samples" "100"
|
||||
;control units "Measurement scale" choice "dB,Linear" 0
|
||||
;control fileformat "File data format" choice "Sample List (txt),Indexed List (txt),Time Indexed (txt),Data (csv),Web Page (html)" 0
|
||||
;control header "Include header information" choice "None,Minimal,Standard,All" 2
|
||||
;control optext "Optional header text" string ""
|
||||
;control chan "Channel layout for stereo" choice "L-R on Same Line,Alternate Lines,L Channel First" 0
|
||||
;control messages "Show messages" choice "Yes,Errors Only,None" 0
|
||||
;control filename "File name" string "" "sample-data"
|
||||
;control path "Output folder" string "" "Home directory"
|
||||
;control owrite "Allow files to be overwritten" choice "No,Yes" 0
|
||||
$control number (_"Limit output to first") string (_"samples") "100"
|
||||
$control units (_"Measurement scale") choice ((_"dB") (_"Linear")) 0
|
||||
$control fileformat (_"File data format") choice (
|
||||
(_"Sample List (txt)")
|
||||
(_"Indexed List (txt)")
|
||||
(_"Time Indexed (txt)")
|
||||
(_"Data (csv)")
|
||||
(_"Web Page (html)")
|
||||
) 0
|
||||
$control header (_"Include header information") choice (
|
||||
(_"None")
|
||||
(_"Minimal")
|
||||
(_"Standard")
|
||||
(_"All")
|
||||
) 2
|
||||
$control optext (_"Optional header text") string ""
|
||||
$control chan (_"Channel layout for stereo") choice (
|
||||
(_"L-R on Same Line")
|
||||
(_"Alternate Lines")
|
||||
(_"L Channel First")
|
||||
) 0
|
||||
$control messages (_"Show messages") choice (
|
||||
(_"Yes")
|
||||
(_"Errors Only")
|
||||
(_"None")
|
||||
) 0
|
||||
$control filename (_"File name") string "" (_"sample-data")
|
||||
$control path (_"Output folder") string "" (_"Home directory")
|
||||
$control owrite (_"Allow files to be overwritten") choice ((_"No") (_"Yes")) 0
|
||||
|
||||
|
||||
;; To enable L/R prefix before alternate L/R channels
|
||||
@ -36,7 +55,7 @@
|
||||
|
||||
(when (not (boundp 'LR-prefix))(setq LR-prefix nil))
|
||||
|
||||
(setq default-filename "sample-data") ; default filename
|
||||
(setq default-filename (_"sample-data")) ; default filename
|
||||
(setq err "") ; initialise error mesaage
|
||||
|
||||
(setq *float-format* "%1.5f") ; 5 decimal places
|
||||
@ -90,9 +109,9 @@
|
||||
(defun checknumber ()
|
||||
(setq number (min number len))
|
||||
(if (< number 1)
|
||||
(add-error "No samples selected."))
|
||||
(add-error (_"No samples selected.")))
|
||||
(if (> number 1000000)
|
||||
(add-error "Cannot export more than 1 million samples."))
|
||||
(add-error (_"Cannot export more than 1 million samples.")))
|
||||
(setq number (truncate number)))
|
||||
|
||||
|
||||
@ -112,7 +131,8 @@
|
||||
(setf ln10over20 (/ (log 10.0) 20))
|
||||
(defun lin-to-db (val)
|
||||
(if (= val 0)
|
||||
"[-inf]"
|
||||
;i18n-hint abbreviates negative infinity
|
||||
(_"[-inf]")
|
||||
(/ (log val) ln10over20)))
|
||||
|
||||
|
||||
@ -195,15 +215,15 @@
|
||||
(if (and (arrayp s)(= chan 2))
|
||||
(progn
|
||||
(unless (= header 0) ; Don't print 'channel' if no header
|
||||
(format fp "Left Channel.~%~%"))
|
||||
(format fp (_"Left Channel.~%~%")))
|
||||
(print-text (aref s 0))
|
||||
(if (= header 0) ; Don't print 'channel' if no header
|
||||
(format fp "~%")
|
||||
(format fp "~%~%Right Channel.~%~%"))
|
||||
(format fp (_"~%~%Right Channel.~%~%")))
|
||||
(print-text (aref s 1))
|
||||
(close fp)
|
||||
(if (= messages 0)
|
||||
(format nil "~aData written to:~%~a~a~a"
|
||||
(format nil (_"~aData written to:~%~a~a~a")
|
||||
(normhead) path fileseparator filename)
|
||||
nil))
|
||||
;; mono or alternate
|
||||
@ -211,7 +231,7 @@
|
||||
(print-text s)
|
||||
(close fp)
|
||||
(if (= messages 0)
|
||||
(format nil "~aData written to:~%~a~a~a"
|
||||
(format nil (_"~aData written to:~%~a~a~a")
|
||||
(normhead) path fileseparator filename)
|
||||
nil))))
|
||||
|
||||
@ -240,7 +260,7 @@
|
||||
(if (string-equal path "~/" :end1 2)
|
||||
(setq path (strcat (home)(subseq path 1)))))
|
||||
;; If path not set use home directory
|
||||
(if (or (string-equal path "Home directory")
|
||||
(if (or (string-equal path (_"Home directory"))
|
||||
(string-equal path ""))
|
||||
(setq path (home)))
|
||||
;; if file name not set use default
|
||||
@ -255,7 +275,7 @@
|
||||
(string-equal path realdir)))
|
||||
;; makefilename or error
|
||||
(setq filename (makefilename filename FileExt))
|
||||
(add-error (format nil "Output folder \"~a~a\" cannot be accessed."
|
||||
(add-error (format nil (_"Output folder \"~a~a\" cannot be accessed.")
|
||||
path fileseparator))))
|
||||
;; check if file is writeable
|
||||
(when (= (length err) 0)
|
||||
@ -263,7 +283,7 @@
|
||||
(setq fp (open filename :direction :output))
|
||||
;check file is writeable
|
||||
(if (not fp)
|
||||
(add-error (format nil "\"~a~a~a\" cannot be written."
|
||||
(add-error (format nil (_"\"~a~a~a\" cannot be written.")
|
||||
path fileseparator filename)))))
|
||||
|
||||
|
||||
@ -279,7 +299,7 @@
|
||||
|
||||
(defun minhead ()
|
||||
(format nil
|
||||
"Sample Rate: ~a Hz. Sample values on ~a scale.~%~a~%~a"
|
||||
(_"Sample Rate: ~a Hz. Sample values on ~a scale.~%~a~%~a")
|
||||
(get 'info 'srate) ; sample rate
|
||||
(get 'info 'units) ; units
|
||||
(get 'info 'chan-order) ; Channel Order
|
||||
@ -291,7 +311,7 @@
|
||||
(defun normhead ()
|
||||
(if (= fileformat 4) ; html
|
||||
(format nil
|
||||
"~a ~a~%~aSample Rate: ~a Hz.~%Length processed: ~a samples ~a seconds.~a"
|
||||
(_"~a ~a~%~aSample Rate: ~a Hz.~%Length processed: ~a samples ~a seconds.~a")
|
||||
filename ; file name
|
||||
(get 'info 'channels) ; mono/stereo
|
||||
(get 'info 'chan-order) ; Channel Order
|
||||
@ -302,8 +322,8 @@
|
||||
(format nil "~%~a~%~%~%" optext) ; optional text
|
||||
(format nil "~%~%~%"))) ; no optional text
|
||||
(format nil
|
||||
"~a ~a~%~aSample Rate: ~a Hz. Sample values on ~a scale.~%~
|
||||
Length processed: ~a samples ~a seconds.~a"
|
||||
(_"~a ~a~%~aSample Rate: ~a Hz. Sample values on ~a scale.~%~
|
||||
Length processed: ~a samples ~a seconds.~a")
|
||||
filename ; file name
|
||||
(get 'info 'channels) ; mono/stereo
|
||||
(get 'info 'chan-order) ; Channel Order
|
||||
@ -318,9 +338,9 @@ Length processed: ~a samples ~a seconds.~a"
|
||||
|
||||
(defun fullhead ()
|
||||
(format nil
|
||||
"~a~%Sample Rate: ~a Hz. Sample values on ~a scale. ~a.~%~aLength processed: ~a ~
|
||||
(_"~a~%Sample Rate: ~a Hz. Sample values on ~a scale. ~a.~%~aLength processed: ~a ~
|
||||
samples, ~a seconds.~%Peak amplitude: ~a (lin) ~a dB. Unweighted RMS: ~a dB.~%~
|
||||
DC offset: ~a~a"
|
||||
DC offset: ~a~a")
|
||||
filename ; file name
|
||||
(get 'info 'srate) ; sample rate
|
||||
(get 'info 'units) ; units
|
||||
@ -333,9 +353,9 @@ DC offset: ~a~a"
|
||||
(srms s) ; rms
|
||||
(let ((vals (dc-off s))) ; DC offset
|
||||
(if (= (length vals) 2) ; mono
|
||||
(format nil "~a linear, ~a dB."
|
||||
(format nil (_"~a linear, ~a dB.")
|
||||
(first vals)(second vals))
|
||||
(format nil "Left: ~a lin, ~a dB | Right: ~a lin, ~a dB."
|
||||
(format nil (_"Left: ~a lin, ~a dB | Right: ~a lin, ~a dB.")
|
||||
(first vals)(second vals)(third vals)(fourth vals))))
|
||||
(if (> (length optext)0)
|
||||
(format nil "~%~a~%~%~%" optext) ; optional text
|
||||
@ -346,7 +366,7 @@ DC offset: ~a~a"
|
||||
;; HTML Output ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
(defun html-head ()
|
||||
(defun html-head () (strcat
|
||||
"<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
@ -427,26 +447,29 @@ ul {
|
||||
color: blue;
|
||||
}
|
||||
</style>
|
||||
<title>Sample Data Export</title>
|
||||
<title>" (_"Sample Data Export") "</title>
|
||||
</head>
|
||||
")
|
||||
"))
|
||||
|
||||
|
||||
;;; document headings
|
||||
(defun doc-head ()
|
||||
(format nil
|
||||
"<body>
|
||||
<h1>Sample Data Export - ~a</h1>
|
||||
(strcat "<body>
|
||||
<h1>" (_"Sample Data Export") " - ~a</h1>
|
||||
~a
|
||||
<h4>~a. ~a samples. ~a seconds.<br></h4>
|
||||
<h3>Audio data analysis:</h3>
|
||||
<h4>~a. " (_"~a samples.") " " (_"~a seconds.") "<br></h4>
|
||||
<h3>" (_"Audio data analysis:") "</h3>
|
||||
<ul>
|
||||
<li><b>Sample Rate:</b> ~a Hz.</li>
|
||||
<li><b>Peak Amplitude:</b> ~a (lin) ~a dB.</li>
|
||||
<li><b>RMS</b> (unweighted): ~a dB.</li>
|
||||
<li><b>DC Offset:</b> ~a</li>
|
||||
<li>" (_"<b>Sample Rate:</b> ~a Hz.") "</li>"
|
||||
; i18n-hint: abbreviates "linear" and "decibels"
|
||||
"<li>" (_"<b>Peak Amplitude:</b> ~a (lin) ~a dB.") "</li>"
|
||||
; i18n-hint: RMS abbreviates root-mean-square, a method of averaging a signal; there also "weighted" versions of it but this isn't that
|
||||
"<li>" (_"<b>RMS</b> (unweighted): ~a dB.") "</li>"
|
||||
; i18n-hint: DC derives from "direct current" in electronics, really means the zero frequency component of a signal
|
||||
"<li>" (_"<b>DC Offset:</b> ~a") "</li>
|
||||
</ul>
|
||||
"
|
||||
") ; end concatenated format string with inserted translations
|
||||
(string-right-trim ".html" filename)
|
||||
(format nil "<h2>~a</h2>" optext) ; Optional heading
|
||||
(get 'info 'channels) ; mono/stereo
|
||||
@ -458,44 +481,45 @@ ul {
|
||||
(srms s) ; rms
|
||||
(let ((vals (dc-off s))) ; DC offset
|
||||
(if (= (length vals) 2) ; mono
|
||||
(format nil "~a linear, ~a dB."
|
||||
(format nil (_"~a linear, ~a dB.")
|
||||
(first vals)(second vals))
|
||||
(format nil "Left: ~a lin, ~a dB | Right: ~a linear, ~a dB."
|
||||
(format nil (_"Left: ~a lin, ~a dB | Right: ~a linear, ~a dB.")
|
||||
(first vals)(second vals)(third vals)(fourth vals))))))
|
||||
|
||||
|
||||
;;; table headings (mono)
|
||||
(defun table-head-mono ()
|
||||
"<table title=\"sample data\">
|
||||
(strcat "<table title=\"" (_"sample data") "\">
|
||||
<tr>
|
||||
<th>Sample #</th>
|
||||
<th>Seconds</th>
|
||||
<th>Value (linear)</th>
|
||||
<th>Value (dB)</th>
|
||||
</tr>")
|
||||
<th>" (_"Sample #") "</th>
|
||||
<th>" (_"Seconds") "</th>
|
||||
<th>" (_"Value (linear)") "</th>
|
||||
<th>" (_"Value (dB)") "</th>
|
||||
</tr>"))
|
||||
|
||||
|
||||
;;; table headings (stereo)
|
||||
(defun table-head-stereo ()
|
||||
"<table title=\"audio sample value analysis\">
|
||||
(strcat "<table title=\"" (_"audio sample value analysis") "\">
|
||||
<tr>
|
||||
<th>Sample #</th>
|
||||
<th>Seconds </th>
|
||||
<th>Left (linear)</th>
|
||||
<th>Right (linear)</th>
|
||||
<th>Left (dB)</th>
|
||||
<th>Right (dB)</th>
|
||||
</tr>")
|
||||
<th>" (_"Sample #") "</th>
|
||||
<th>" (_"Seconds") "</th>
|
||||
<th>" (_"Left (linear)") "</th>
|
||||
<th>" (_"Right (linear)") "</th>
|
||||
<th>" (_"Left (dB)") "</th>
|
||||
<th>" (_"Right (dB)") "</th>
|
||||
</tr>"))
|
||||
|
||||
|
||||
(defun html-foot ()
|
||||
(format nil (strcat
|
||||
"</table>
|
||||
<p id=\"footer\">Produced with <span>Sample Data Export</span> for
|
||||
<a href=\"https://www.audacityteam.org/\">Audacity</a> by Steve
|
||||
Daulton (<a href=
|
||||
<p id=\"footer\">" (_"Produced with <span>Sample Data Export</span> for
|
||||
<a href=\"~a\">Audacity</a> by Steve
|
||||
Daulton") " (<a href=
|
||||
\"http://www.easyspacepro.com\">www.easyspacepro.com</a>)</p>
|
||||
</body>
|
||||
</html>")
|
||||
</html>") "https://www.audacityteam.org/"))
|
||||
|
||||
|
||||
;;; html generator
|
||||
@ -537,7 +561,7 @@ Daulton (<a href=
|
||||
(format fp (html-foot))
|
||||
(close fp)
|
||||
(if (= messages 0)
|
||||
(format nil "~aData written to:~%~a~a~a"
|
||||
(format nil (_"~aData written to:~%~a~a~a")
|
||||
(normhead) path fileseparator filename)
|
||||
nil))
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
@ -548,25 +572,25 @@ Daulton (<a href=
|
||||
;;; basic info for headers
|
||||
(defun put-head-info ()
|
||||
(putprop 'info (truncate *sound-srate*) 'srate)
|
||||
(putprop 'info (if (= units 0) "dB" "linear") 'units)
|
||||
(putprop 'info (if (= units 0) (_"dB") (_"linear")) 'units)
|
||||
(putprop 'info (/ number *sound-srate*) 'duration)
|
||||
(putprop 'info
|
||||
(if (arrayp s)
|
||||
"2 channels (stereo)""1 channel (mono)")
|
||||
(_"2 channels (stereo)") (_"1 channel (mono)"))
|
||||
'channels)
|
||||
;; stereo sample order
|
||||
(putprop 'info
|
||||
(cond
|
||||
((and (= fileformat 3)(= chan 0)) ; csv, channel in column
|
||||
"One column per channel.\n")
|
||||
(format nil (_"One column per channel.~%")))
|
||||
((and (= fileformat 3)(= chan 2)) ; csv, channel in row
|
||||
"One row per channel.\n")
|
||||
(format nil (_"One row per channel.~%")))
|
||||
((or (soundp s)(= fileformat 4)) ; mono soundor HTML
|
||||
"")
|
||||
((= chan 0) "Left channel then Right channel on same line.\n")
|
||||
((= chan 1) "Left and right channels on alternate lines.\n")
|
||||
((= chan 2) "Left channel first then right channel.\n")
|
||||
(T "Unspecified channel order"))
|
||||
((= chan 0) (format nil (_"Left channel then Right channel on same line.~%")))
|
||||
((= chan 1) (format nil (_"Left and right channels on alternate lines.~%")))
|
||||
((= chan 2) (format nil (_"Left channel first then right channel.~%")))
|
||||
(T (_"Unspecified channel order")))
|
||||
'chan-order))
|
||||
|
||||
|
||||
@ -574,14 +598,14 @@ Daulton (<a href=
|
||||
(setq number (read (make-string-input-stream number)))
|
||||
(if (numberp number)
|
||||
(checknumber)
|
||||
(add-error (format nil "~a is not a number." number)))
|
||||
(add-error (format nil (_"~a is not a number.") number)))
|
||||
|
||||
(filewriter)
|
||||
(if (> (length err) 0)
|
||||
;; output error message if enabled
|
||||
(if (= messages 2)
|
||||
nil ; return nil
|
||||
(format nil "Error.~%~a" err)) ; return errors
|
||||
(format nil (_"Error.~%~a") err)) ; return errors
|
||||
;; else print to file
|
||||
(progn
|
||||
(put-head-info) ; put basic info for headers
|
||||
|
@ -1,20 +1,20 @@
|
||||
;nyquist plug-in
|
||||
;version 4
|
||||
;type generate
|
||||
;name "Sample Data Import..."
|
||||
$name (_"Sample Data Import")
|
||||
;manpage "Sample_Data_Import"
|
||||
;action "Reading and rendering samples..."
|
||||
;author "Steve Daulton"
|
||||
;copyright "Released under terms of the GNU General Public License version 2"
|
||||
$action (_"Reading and rendering samples...")
|
||||
$author (_"Steve Daulton")
|
||||
$copyright (_"Released under terms of the GNU General Public License version 2")
|
||||
|
||||
;; sample-data-import.ny by Steve Daulton November 2016.
|
||||
;; Released under terms of the GNU General Public License version 2:
|
||||
;; http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
|
||||
|
||||
;control filename "File name" string "" "sample-data.txt"
|
||||
;control path "File location (path to file)" string "" "Home directory"
|
||||
;control bad-data "Invalid data handling" choice "Throw error,Read as zero" 0
|
||||
$control filename (_"File name") string "" "sample-data.txt"
|
||||
$control path (_"File location (path to file)") string "" "Home directory"
|
||||
$control bad-data (_"Invalid data handling") choice ((_"Throw error") (_"Read as zero")) 0
|
||||
|
||||
|
||||
;; Documentation.
|
||||
@ -107,23 +107,25 @@
|
||||
(defun fileopensp (path fname)
|
||||
(let ((path (string-trim " " path)))
|
||||
(if (string-equal fname "")
|
||||
(throw 'err "Error\nNo file name."))
|
||||
(throw 'err (format nil (_"Error~%No file name."))))
|
||||
(if (string-not-equal fname ".txt" :start1 (- (length fname) 4))
|
||||
(throw 'err "Error\nThe file must be a plain ASCII text file\nwith '.txt' file extension."))
|
||||
(throw 'err (format nil (_"Error~%The file must be a plain ASCII text file~%with '.txt' file extension."))))
|
||||
;; Handle special 'path' formats:
|
||||
(cond
|
||||
; "~" without "/" is not recommended (or documented)
|
||||
; but more user friendly to allow it.
|
||||
((string= path "~")
|
||||
(if (windowsp)
|
||||
"Error\n'~/' is not valid on Windows"
|
||||
;i18n-hint: ~~ format directive must be preserved; displays as one ~
|
||||
(format nil (_"Error~%'~~/' is not valid on Windows"))
|
||||
(setq path (home))))
|
||||
;; replace "~/" on Linux/Mac
|
||||
((and (>= (length path) 2) (string= path "~/" :end1 2))
|
||||
(if (windowsp)
|
||||
"Error\n'~/' is not valid on Windows"
|
||||
;i18n-hint: ~~ format directive must be preserved; displays as one ~
|
||||
(format nil (_"Error~%'~~/' is not valid on Windows"))
|
||||
(setq path (strcat (home)(subseq path 1)))))
|
||||
((string-equal path "Home directory")
|
||||
((string-equal path (_"Home directory"))
|
||||
(setf path (home)))
|
||||
;; If empty, use 'Home'
|
||||
((string-equal path "")
|
||||
@ -131,26 +133,26 @@
|
||||
;; Now check that the file can be opened:
|
||||
(cond
|
||||
((not (setdir path))
|
||||
(throw 'err (format nil "Error~%~
|
||||
Directory '~a' could not be opened." path)))
|
||||
(throw 'err (format nil (_"Error~%~
|
||||
Directory '~a' could not be opened.") path)))
|
||||
((not (setf fstream (open fname)))
|
||||
(throw 'err (format nil "Error~%~
|
||||
(throw 'err (format nil (_"Error~%~
|
||||
'~a~a~a' could not be opened.~%~
|
||||
Check that file exists."
|
||||
Check that file exists.")
|
||||
path *file-separator* fname)))
|
||||
; File opened OK, so check for normal ASCII, then close it and return 'true'
|
||||
(t (do ((j 0 (1+ j))(b (read-byte fstream)(read-byte fstream)))
|
||||
((or (> j 100000)(not b)))
|
||||
(when (> b 127)
|
||||
(throw 'err (format nil "Error:~%~
|
||||
(throw 'err (format nil (_"Error:~%~
|
||||
The file must contain only plain ASCII text.~%~
|
||||
(Invalid byte '~a' at byte number: ~a)" b (1+ j) ))))
|
||||
(Invalid byte '~a' at byte number: ~a)") b (1+ j) ))))
|
||||
(close fstream)
|
||||
t))))
|
||||
|
||||
;; ':new' creates a new class 'streamreader'
|
||||
;; 'filestream' and 'chanel' are its instance variables.
|
||||
;; (every objet of class 'streamreader' has it's own
|
||||
;; (every object of class 'streamreader' has its own
|
||||
;; copy of these variables)
|
||||
(setq streamreader
|
||||
(send class :new '(filestream chanel)))
|
||||
@ -183,9 +185,9 @@
|
||||
((not val) nil) ;end of file
|
||||
((numberp val) (float val)) ;valid.
|
||||
((= bad-data 0) ;invalid. Throw error and quit
|
||||
(throw 'err (format nil "Error~%~
|
||||
(throw 'err (format nil (_"Error~%~
|
||||
Data must be numbers in plain ASCII text.~%~
|
||||
'~a' is not a numeric value." val)))
|
||||
'~a' is not a numeric value.") val)))
|
||||
(t 0.0)))) ;invalid. Replace with zero.
|
||||
|
||||
;; Instantiate a new sound object
|
||||
@ -195,7 +197,7 @@
|
||||
(defun sound-from-file (filename)
|
||||
;; Set path. fileopenp should return 'true'
|
||||
(if (not (fileopensp path filename))
|
||||
(throw 'err "Error.\nUnable to open file"))
|
||||
(throw 'err (format nil (_"Error.~%Unable to open file"))))
|
||||
; Note: we can't use (arrayp *track*) because
|
||||
; *track* is nil in generate type plug-ins.
|
||||
(cond
|
||||
|
@ -3,12 +3,12 @@
|
||||
;type process
|
||||
;preview linear
|
||||
;categories "http://lv2plug.in/ns/lv2core#ModulatorPlugin"
|
||||
;name "Tremolo..."
|
||||
$name (_"Tremolo")
|
||||
;manpage "Tremolo"
|
||||
;debugbutton disabled
|
||||
;action "Applying Tremolo..."
|
||||
;author "Steve Daulton"
|
||||
;copyright "Released under terms of the GNU General Public License version 2"
|
||||
$action (_"Applying Tremolo...")
|
||||
$author (_"Steve Daulton")
|
||||
$copyright (_"Released under terms of the GNU General Public License version 2")
|
||||
|
||||
;; tremolo.ny by Steve Daulton (www.easyspacepro.com) July 2012.
|
||||
;; Based on Tremolo by Dominic Mazzoni and David R. Sky."
|
||||
@ -18,10 +18,10 @@
|
||||
;; For information about writing and modifying Nyquist plug-ins:
|
||||
;; https://wiki.audacityteam.org/wiki/Nyquist_Plug-ins_Reference
|
||||
|
||||
;control wave "Waveform type" choice "sine,triangle,sawtooth,inverse sawtooth,square" 0
|
||||
;control phase "Starting phase (degrees)" int "" 0 -180 180
|
||||
;control wet "Wet level (percent)" int "" 40 1 100
|
||||
;control lfo "Frequency (Hz)" float-text "" 4 0.001 1000
|
||||
$control wave (_"Waveform type") choice ((_"sine") (_"triangle") (_"sawtooth") (_"inverse sawtooth") (_"square")) 0
|
||||
$control phase (_"Starting phase (degrees)") int "" 0 -180 180
|
||||
$control wet (_"Wet level (percent)") int "" 40 1 100
|
||||
$control lfo (_"Frequency (Hz)") float-text "" 4 0.001 1000
|
||||
|
||||
; Convert % to linear
|
||||
(setq wet (/ wet 200.0))
|
||||
|
@ -2,11 +2,11 @@
|
||||
;version 4
|
||||
;type process
|
||||
;categories "http://lv2plug.in/ns/lv2core#MixerPlugin"
|
||||
;name "Vocal Reduction and Isolation..."
|
||||
$name (_"Vocal Reduction and Isolation")
|
||||
;manpage "Vocal_Reduction_and_Isolation"
|
||||
;action "Applying Action..."
|
||||
;author "Robert Haenggi"
|
||||
;copyright "Released under terms of the GNU General Public License version 2"
|
||||
$action (_"Applying Action...")
|
||||
$author (_"Robert Haenggi")
|
||||
$copyright (_"Released under terms of the GNU General Public License version 2")
|
||||
;;
|
||||
;; vocrediso.ny, based on rjh-stereo-tool.ny
|
||||
;; Released under terms of the GNU General Public License version 2:
|
||||
@ -14,12 +14,21 @@
|
||||
;; Plug-in version 1.56, June 2015
|
||||
;; Requires Audacity 2.1.1 or later, developed under Audacity 2.1.1
|
||||
;;
|
||||
;control action "Action" choice "Remove Vocals,Isolate Vocals,Isolate Vocals and Invert,Remove Center,Isolate Center,Isolate Center and Invert,Remove Center Classic: Mono,Analyze" 0
|
||||
$control action (_"Action") choice (
|
||||
(_"Remove Vocals")
|
||||
(_"Isolate Vocals")
|
||||
(_"Isolate Vocals and Invert")
|
||||
(_"Remove Center")
|
||||
(_"Isolate Center")
|
||||
(_"Isolate Center and Invert")
|
||||
(_"Remove Center Classic: Mono")
|
||||
(_"Analyze")
|
||||
) 0
|
||||
(setf rotation 0.0)
|
||||
;;control rotation "Rotation (Degrees)" real "" 0 -180 180
|
||||
;control strength "Strength" real "" 1.0 0.0 50.0
|
||||
;control low-transition "Low Cut for Vocals (Hz)" real "" 120 1 24000
|
||||
;control high-transition "High Cut for Vocals (Hz)" real "" 9000 1 24000
|
||||
$control strength (_"Strength") real "" 1.0 0.0 50.0
|
||||
$control low-transition (_"Low Cut for Vocals (Hz)") real "" 120 1 24000
|
||||
$control high-transition (_"High Cut for Vocals (Hz)") real "" 9000 1 24000
|
||||
;
|
||||
;preview linear
|
||||
;
|
||||
@ -61,14 +70,14 @@
|
||||
(t (/ s-xy s-x2))))
|
||||
(a0 (- bar-y (* a1 bar-x))))
|
||||
(if show (format t
|
||||
"Average x: ~a, y: ~a
|
||||
(_"Average x: ~a, y: ~a
|
||||
Covariance x y: ~a
|
||||
Average variance x: ~a, y: ~a
|
||||
Standard deviation x: ~a, y: ~a
|
||||
Coefficient of correlation: ~a
|
||||
Coefficient of determination: ~a
|
||||
Variation of residuals: ~a
|
||||
y equals ~a plus ~a times x~%"
|
||||
y equals ~a plus ~a times x~%")
|
||||
bar-x bar-y s-xy s-x2 s-y2 (sqrt s-x2) (sqrt s-y2) r r2 (* s-y2 (- 1 r2)) a0 a1))
|
||||
(list r r2 pos-xy a0 a1)))
|
||||
;;
|
||||
@ -77,34 +86,34 @@ bar-x bar-y s-xy s-x2 s-y2 (sqrt s-x2) (sqrt s-y2) r r2 (* s-y2 (- 1 r2)) a0 a1)
|
||||
;;
|
||||
;; Summary for "Analyse", fed with coeff. of correlation
|
||||
(defun summary (analysis &aux (corr (car analysis)) (pan-position (third analysis)))
|
||||
(format nil "Pan position: ~a~%The left and right channels are correlated by about ~a %. This means:~%~a~%"
|
||||
(format nil (_"Pan position: ~a~%The left and right channels are correlated by about ~a %. This means:~%~a~%")
|
||||
pan-position
|
||||
(round (* corr 100))
|
||||
(cond
|
||||
((between corr 0.97 1.1)
|
||||
" - The two channels are identical, i.e. dual mono.
|
||||
(_" - The two channels are identical, i.e. dual mono.
|
||||
The center can't be removed.
|
||||
Any remaining difference may be caused by lossy encoding.")
|
||||
Any remaining difference may be caused by lossy encoding."))
|
||||
((between corr 0.9 0.97)
|
||||
" - The two Channels are strongly related, i.e. nearly mono or extremely panned.
|
||||
Most likely, the center extraction will be poor.")
|
||||
(_" - The two Channels are strongly related, i.e. nearly mono or extremely panned.
|
||||
Most likely, the center extraction will be poor."))
|
||||
((between corr 0.5 0.9)
|
||||
" - A fairly good value, at least stereo in average and not too wide spread.")
|
||||
(_" - A fairly good value, at least stereo in average and not too wide spread."))
|
||||
((between corr 0.2 0.5)
|
||||
" - An ideal value for Stereo.
|
||||
However, the center extraction depends also on the used reverb.")
|
||||
(_" - An ideal value for Stereo.
|
||||
However, the center extraction depends also on the used reverb."))
|
||||
((between corr -0.2 0.2)
|
||||
" - The two channels are almost not related.
|
||||
(_" - The two channels are almost not related.
|
||||
Either you have only noise or the piece is mastered in a unbalanced manner.
|
||||
The center extraction can still be good though.")
|
||||
The center extraction can still be good though."))
|
||||
((between corr -0.8 -0.2)
|
||||
" - Although the Track is stereo, the field is obviously extra wide.
|
||||
(_" - Although the Track is stereo, the field is obviously extra wide.
|
||||
This can cause strange effects.
|
||||
Especially when played by only one speaker.")
|
||||
(t " - The two channels are nearly identical.
|
||||
Especially when played by only one speaker."))
|
||||
(t (_" - The two channels are nearly identical.
|
||||
Obviously, a pseudo stereo effect has been used
|
||||
to spread the signal over the physical distance between the speakers.
|
||||
Don't expect good results from a center removal."))))
|
||||
Don't expect good results from a center removal.")))))
|
||||
;;;
|
||||
;;; FFT Functionality
|
||||
;;
|
||||
@ -119,7 +128,7 @@ bar-x bar-y s-xy s-x2 s-y2 (sqrt s-x2) (sqrt s-y2) r r2 (* s-y2 (- 1 r2)) a0 a1)
|
||||
(progn (setf cut (truncate (- fs zeros 1)))
|
||||
(snd-pwl 0 fs
|
||||
(list 0 (/ (float hop))(- cut hop) 1.0 cut 0.0 fs 0.0 fs)))))
|
||||
; Han
|
||||
; Hann
|
||||
((= type 1)
|
||||
(seq (cue (control-srate-abs fs
|
||||
(mult 0.5 (sum 1 (lfo (/ fs (* 2.0 hop)) (/ (- fs zeros) (get-duration fs)) *table* 270)))))
|
||||
@ -186,7 +195,7 @@ bar-x bar-y s-xy s-x2 s-y2 (sqrt s-x2) (sqrt s-y2) r r2 (* s-y2 (- 1 r2)) a0 a1)
|
||||
;;; main procedure
|
||||
(defun catalog (&aux snd
|
||||
(original-len (/ (+ len hop) *sr*)) (dur (get-duration 1)))
|
||||
(if (soundp *track*) (return-from catalog "This plug-in works only with stereo tracks.")
|
||||
(if (soundp *track*) (return-from catalog (_"This plug-in works only with stereo tracks."))
|
||||
(setf snd (vector (snd-copy (: *track* 0)) (snd-copy (: *track* 1)))))
|
||||
(cond
|
||||
((= action 7)
|
||||
@ -238,4 +247,4 @@ bar-x bar-y s-xy s-x2 s-y2 (sqrt s-x2) (sqrt s-y2) r r2 (* s-y2 (- 1 r2)) a0 a1)
|
||||
(setf *map* (snd-pwl 0 10000 (list 0 0.5 10000 0.0 20000 -0.5 20001)))
|
||||
(setf *norm* 1.0)
|
||||
(expand 120); remove for lower efficiency/more conservative memory management
|
||||
(catalog)
|
||||
(catalog)
|
||||
|
@ -2,12 +2,12 @@
|
||||
;version 4
|
||||
;type process
|
||||
;preview linear
|
||||
;name "Vocal Remover..."
|
||||
$name (_"Vocal Remover")
|
||||
;manpage "Vocal_Remover"
|
||||
;action "Removing center-panned audio..."
|
||||
;info "For reducing center-panned vocals"
|
||||
;author "Steve Daulton"
|
||||
;copyright "Released under terms of the GNU General Public License version 2"
|
||||
$action (_"Removing center-panned audio...")
|
||||
$info (_"For reducing center-panned vocals")
|
||||
$author (_"Steve Daulton")
|
||||
$copyright (_"Released under terms of the GNU General Public License version 2")
|
||||
|
||||
;; This version of vocalremover.ny by Steve Daulton June 2013.
|
||||
;;
|
||||
@ -20,15 +20,22 @@
|
||||
;; Released under terms of the GNU General Public License version 2:
|
||||
;; http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
|
||||
;control action "Remove vocals or view Help" choice "Remove vocals,View Help" 0
|
||||
;control band-choice "Removal choice" choice "Simple (entire spectrum),Remove frequency band,Retain frequency band" 0
|
||||
;control low-range "Frequency band from (Hz)" float-text "" 500 0 nil
|
||||
;control high-range "Frequency band to (Hz)" float-text "" 2000 0 nil
|
||||
$control action (_"Remove vocals or view Help") choice (
|
||||
(_"Remove vocals")
|
||||
(_"View Help")
|
||||
) 0
|
||||
$control band-choice (_"Removal choice") choice (
|
||||
(_"Simple (entire spectrum)")
|
||||
(_"Remove frequency band")
|
||||
(_"Retain frequency band")
|
||||
) 0
|
||||
$control low-range (_"Frequency band from (Hz)") float-text "" 500 0 nil
|
||||
$control high-range (_"Frequency band to (Hz)") float-text "" 2000 0 nil
|
||||
|
||||
|
||||
(defun help ()
|
||||
(let ((msg (format nil
|
||||
"Vocal Remover requires a stereo track. It works best with
|
||||
(_"Vocal Remover requires a stereo track. It works best with
|
||||
lossless files like WAV or AIFF, rather than MP3 or
|
||||
other compressed formats. It only removes vocals or other
|
||||
audio that is panned to center (sounds equally loud in left
|
||||
@ -52,7 +59,7 @@ sounds like the most significant frequency range of the
|
||||
original vocals. If the other choices remove too much
|
||||
audio in a particular frequency range (such as low drums
|
||||
or bass), try 'Retain frequency band'. This only removes
|
||||
frequencies outside the limits, retaining the others.")))
|
||||
frequencies outside the limits, retaining the others."))))
|
||||
(format t "~a" msg) ;print to debug (coppying supported on all platforms)
|
||||
msg)) ;return message
|
||||
|
||||
@ -60,10 +67,10 @@ frequencies outside the limits, retaining the others.")))
|
||||
(defun check-stereo ()
|
||||
(when (soundp *track*)
|
||||
(throw 'err (format nil
|
||||
"~%Vocal Remover requires an unsplit, stereo track.~%~
|
||||
(_"~%Vocal Remover requires an unsplit, stereo track.~%~
|
||||
If you have a stereo track split into left and right~%~
|
||||
channels, use 'Make Stereo Track' on the Track~%~
|
||||
Drop-Down Menu, then run Vocal Remover again.~%"))))
|
||||
Drop-Down Menu, then run Vocal Remover again.~%")))))
|
||||
|
||||
(defmacro validate (Hz)
|
||||
;; Filters become unstable when very close to 0 Hz or
|
||||
@ -93,11 +100,11 @@ Drop-Down Menu, then run Vocal Remover again.~%"))))
|
||||
|
||||
(defun bandstop (sig low high)
|
||||
(if (and low high (< (/ (- high low) low) 0.1))
|
||||
(format t "Warning:~%~
|
||||
(format t (_"Warning:~%~
|
||||
Selected band-stop filter is~%~
|
||||
~a Hz to ~a Hz.~%~
|
||||
A very narrow stop-band filter may have~%~
|
||||
unexpected results.~%~%"
|
||||
unexpected results.~%~%")
|
||||
low high))
|
||||
(let ((low-sig (if low (lowpass8 sig low)(s-rest 1))))
|
||||
(sum
|
||||
@ -114,7 +121,7 @@ Drop-Down Menu, then run Vocal Remover again.~%"))))
|
||||
(bandstop (aref *track* 1) low-range high-range)))
|
||||
; Nothing to remove - skip effect.
|
||||
((and (= band-choice 2)(not low-range)(not high-range))
|
||||
(format t "Current settings returned the original audio.")
|
||||
(format t (_"Current settings returned the original audio."))
|
||||
nil)
|
||||
((= band-choice 2) ; remove frequencies inside range
|
||||
(sum (aref *track* 0)
|
||||
|
@ -3,11 +3,11 @@
|
||||
;type process
|
||||
;preview enabled
|
||||
;categories "http://lv2plug.in/ns/lv2core#SpectralPlugin"
|
||||
;name "Vocoder..."
|
||||
$name (_"Vocoder")
|
||||
;manpage "Vocoder"
|
||||
;action "Processing Vocoder..."
|
||||
;author "Edgar-RFT"
|
||||
;copyright "Released under terms of the GNU General Public License version 2"
|
||||
$action (_"Processing Vocoder...")
|
||||
$author (_"Edgar-RFT")
|
||||
$copyright (_"Released under terms of the GNU General Public License version 2")
|
||||
|
||||
;; vocoder.ny by Edgar-RFT
|
||||
;; a bit of code added by David R. Sky
|
||||
@ -21,13 +21,13 @@
|
||||
;; For information about writing and modifying Nyquist plug-ins:
|
||||
;; https://wiki.audacityteam.org/wiki/Nyquist_Plug-ins_Reference
|
||||
|
||||
;control dst "Distance: (1 to 120, default = 20)" real "" 20 1 120
|
||||
;control mst "Output choice" choice "both channels, right only" 0
|
||||
;control bands "Number of vocoder bands" int "" 40 10 240
|
||||
;control track-vl "Amplitude of original audio (percent)" real "" 100 0 100
|
||||
;control noise-vl "Amplitude of white noise (percent)" real "" 0 0 100
|
||||
;control radar-vl "Amplitude of Radar Needles (percent)" real "" 0 0 100
|
||||
;control radar-f "Frequency of Radar Needles (Hz)" real "" 30 1 100
|
||||
$control dst (_"Distance: (1 to 120, default = 20)") real "" 20 1 120
|
||||
$control mst (_"Output choice") choice ((_"both channels") (_"right only")) 0
|
||||
$control bands (_"Number of vocoder bands") int "" 40 10 240
|
||||
$control track-vl (_"Amplitude of original audio (percent)") real "" 100 0 100
|
||||
$control noise-vl (_"Amplitude of white noise (percent)") real "" 0 0 100
|
||||
$control radar-vl (_"Amplitude of Radar Needles (percent)") real "" 0 0 100
|
||||
$control radar-f (_"Frequency of Radar Needles (Hz)") real "" 30 1 100
|
||||
|
||||
; maybe the code once again has to be changed into _one_ local let-binding
|
||||
; if you have lots of nyquist "[gc:" messages try this:
|
||||
@ -136,4 +136,4 @@
|
||||
(0 s) ; let Audacity coerce back to stereo
|
||||
(1 (vector original s)))))
|
||||
(t ; this effect isn't meant for mono
|
||||
"Error.\nStereo track required."))
|
||||
(format nil (_"Error.~%Stereo track required."))))
|
||||
|
@ -329,7 +329,7 @@ bool NyquistEffect::DefineParams( ShuttleParams & S )
|
||||
}
|
||||
else if (ctrl.type == NYQ_CTRL_CHOICE)
|
||||
{
|
||||
wxArrayString choices = ParseChoice(ctrl);
|
||||
const wxArrayString &choices = ctrl.choices;
|
||||
int x=d;
|
||||
//parms.WriteEnum(ctrl.var, (int) d, choices);
|
||||
S.DefineEnum( x, static_cast<const wxChar*>( ctrl.var.c_str() ), 0, choices );
|
||||
@ -378,7 +378,7 @@ bool NyquistEffect::GetAutomationParameters(CommandParameters & parms)
|
||||
}
|
||||
else if (ctrl.type == NYQ_CTRL_CHOICE)
|
||||
{
|
||||
wxArrayString choices = ParseChoice(ctrl);
|
||||
const wxArrayString &choices = ctrl.choices;
|
||||
parms.WriteEnum(ctrl.var, (int) d, choices);
|
||||
}
|
||||
else if (ctrl.type == NYQ_CTRL_STRING)
|
||||
@ -428,7 +428,7 @@ bool NyquistEffect::SetAutomationParameters(CommandParameters & parms)
|
||||
else if (ctrl.type == NYQ_CTRL_CHOICE)
|
||||
{
|
||||
int val;
|
||||
wxArrayString choices = ParseChoice(ctrl);
|
||||
const wxArrayString &choices = ctrl.choices;
|
||||
good = parms.ReadEnum(ctrl.var, &val, choices) &&
|
||||
val != wxNOT_FOUND;
|
||||
}
|
||||
@ -468,7 +468,7 @@ bool NyquistEffect::SetAutomationParameters(CommandParameters & parms)
|
||||
else if (ctrl.type == NYQ_CTRL_CHOICE)
|
||||
{
|
||||
int val {0};
|
||||
wxArrayString choices = ParseChoice(ctrl);
|
||||
const wxArrayString &choices = ctrl.choices;
|
||||
parms.ReadEnum(ctrl.var, &val, choices);
|
||||
ctrl.val = (double) val;
|
||||
}
|
||||
@ -554,8 +554,12 @@ bool NyquistEffect::CheckWhetherSkipEffect()
|
||||
return (mIsPrompt && mControls.size() > 0);
|
||||
}
|
||||
|
||||
static void RegisterFunctions();
|
||||
|
||||
bool NyquistEffect::Process()
|
||||
{
|
||||
RegisterFunctions();
|
||||
|
||||
bool success = true;
|
||||
|
||||
mProjectChanged = false;
|
||||
@ -1465,16 +1469,29 @@ wxString NyquistEffect::EscapeString(const wxString & inStr)
|
||||
return str;
|
||||
}
|
||||
|
||||
wxArrayString NyquistEffect::ParseChoice(const NyqControl & ctrl)
|
||||
wxArrayString NyquistEffect::ParseChoice(const wxString & text)
|
||||
{
|
||||
wxArrayString choices = wxStringTokenize(ctrl.label, wxT(","));
|
||||
|
||||
for (size_t i = 0, cnt = choices.GetCount();i < cnt; i++)
|
||||
{
|
||||
choices[i] = choices[i].Trim(true).Trim(false);
|
||||
if (text[0] == wxT('(')) {
|
||||
// New style: expecting a Lisp-like list of strings
|
||||
Tokenizer tzer;
|
||||
tzer.Tokenize(text, true, 1, 1);
|
||||
auto &choices = tzer.tokens;
|
||||
for (auto &choice : choices)
|
||||
choice = UnQuote(choice);
|
||||
return choices;
|
||||
}
|
||||
else {
|
||||
// Old style: expecting a comma-separated list of
|
||||
// un-internationalized names, ignoring leading and trailing spaces
|
||||
// on each; and the whole may be quoted
|
||||
auto choices = wxStringTokenize(
|
||||
text[0] == wxT('"') ? text.Mid(1, text.Length() - 2) : text,
|
||||
wxT(",")
|
||||
);
|
||||
for (auto &choice : choices)
|
||||
choice = choice.Trim(true).Trim(false);
|
||||
return choices;
|
||||
}
|
||||
|
||||
return choices;
|
||||
}
|
||||
|
||||
void NyquistEffect::RedirectOutput()
|
||||
@ -1504,16 +1521,29 @@ void NyquistEffect::Stop()
|
||||
mStop = true;
|
||||
}
|
||||
|
||||
wxString NyquistEffect::UnQuote(const wxString &s)
|
||||
wxString NyquistEffect::UnQuote(
|
||||
const wxString &s, bool allowParens, bool translate)
|
||||
{
|
||||
wxString out;
|
||||
int len = s.Length();
|
||||
|
||||
if (len >= 2 && s[0] == wxT('\"') && s[len - 1] == wxT('\"')) {
|
||||
return s.Mid(1, len - 2);
|
||||
auto unquoted = s.Mid(1, len - 2);
|
||||
return translate ? GetCustomTranslation( unquoted ) : unquoted;
|
||||
}
|
||||
|
||||
return s;
|
||||
else if (allowParens &&
|
||||
len >= 2 && s[0] == wxT('(') && s[len - 1] == wxT(')')) {
|
||||
Tokenizer tzer;
|
||||
tzer.Tokenize(s, true, 1, 1);
|
||||
auto &tokens = tzer.tokens;
|
||||
if (tokens.size() > 1)
|
||||
// Assume the first token was _ -- we don't check that
|
||||
// And the second is the string, which is internationalized
|
||||
return UnQuote( tokens[1], false, true );
|
||||
else
|
||||
return {};
|
||||
}
|
||||
else
|
||||
// If string was not quoted, assume no translation exists
|
||||
return s;
|
||||
}
|
||||
|
||||
double NyquistEffect::GetCtrlValue(const wxString &s)
|
||||
@ -1536,56 +1566,92 @@ double NyquistEffect::GetCtrlValue(const wxString &s)
|
||||
return Internat::CompatibleToDouble(s);
|
||||
}
|
||||
|
||||
void NyquistEffect::Parse(const wxString &line)
|
||||
bool NyquistEffect::Tokenizer::Tokenize(
|
||||
const wxString &line, bool eof,
|
||||
size_t trimStart, size_t trimEnd)
|
||||
{
|
||||
wxArrayString tokens;
|
||||
auto endToken = [&]{
|
||||
if (!tok.empty()) {
|
||||
tokens.push_back(tok);
|
||||
tok = wxT("");
|
||||
}
|
||||
};
|
||||
|
||||
int i;
|
||||
int len = line.Length();
|
||||
bool sl = false;
|
||||
bool q = false;
|
||||
wxString tok = wxT("");
|
||||
|
||||
for (i = 1; i < len; i++) {
|
||||
wxChar c = line[i];
|
||||
|
||||
if (c == wxT('\\')) {
|
||||
for (auto c :
|
||||
make_iterator_range(line.begin() + trimStart, line.end() - trimEnd)) {
|
||||
if (q && c == wxT('\\')) {
|
||||
// begin escaped character, only within quotes
|
||||
sl = true;
|
||||
continue;
|
||||
}
|
||||
else if (c == wxT('"')) {
|
||||
q = !q;
|
||||
|
||||
if (!sl && !paren && c == wxT('"')) {
|
||||
if (!q)
|
||||
// finish previous token; begin token, including the delimiter
|
||||
endToken(), q = true, tok += c;
|
||||
else
|
||||
// end token, including the delimiter
|
||||
tok += c, q = false, endToken();
|
||||
}
|
||||
else {
|
||||
if ((!q && !sl && c == wxT(' ')) || c == wxT('\t')) {
|
||||
tokens.Add(tok);
|
||||
tok = wxT("");
|
||||
}
|
||||
else if (sl && c == wxT('n')) {
|
||||
tok += wxT('\n');
|
||||
}
|
||||
else {
|
||||
else if (!q && !paren && (c == wxT(' ') || c == wxT('\t')))
|
||||
// Separate tokens; don't accumulate this character
|
||||
endToken();
|
||||
else if (!q && c == wxT('(')) {
|
||||
if (++paren == 1)
|
||||
// finish previous token; begin list, including the delimiter
|
||||
endToken(), tok += c;
|
||||
else
|
||||
// defer tokenizing of nested list to a later pass over the token
|
||||
tok += c;
|
||||
}
|
||||
|
||||
sl = false;
|
||||
}
|
||||
else if (!q && c == wxT(')')) {
|
||||
if (--paren == 0)
|
||||
// finish list, including the delimiter
|
||||
tok += c, endToken();
|
||||
else if (paren < 0)
|
||||
// forgive unbalanced right paren
|
||||
paren = 0, endToken();
|
||||
else
|
||||
// nested list; deferred tokenizing
|
||||
tok += c;
|
||||
}
|
||||
else
|
||||
tok += c;
|
||||
|
||||
sl = false;
|
||||
}
|
||||
|
||||
if (tok != wxT("")) {
|
||||
tokens.Add(tok);
|
||||
if (eof || (!q && !paren)) {
|
||||
endToken();
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
// End of line but not of file, and a string or list is yet unclosed
|
||||
// If a string, accumulate a newline character
|
||||
if (q)
|
||||
tok += wxT('\n');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
len = tokens.GetCount();
|
||||
bool NyquistEffect::Parse(
|
||||
Tokenizer &tzer, const wxString &line, bool eof, bool first)
|
||||
{
|
||||
if ( !tzer.Tokenize(line, eof, first ? 1 : 0, 0) )
|
||||
return false;
|
||||
|
||||
const auto &tokens = tzer.tokens;
|
||||
int len = tokens.size();
|
||||
if (len < 1) {
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
// Consistency decission is for "plug-in" as the correct spelling
|
||||
// Consistency decision is for "plug-in" as the correct spelling
|
||||
// "plugin" (deprecated) is allowed as an undocumented convenience.
|
||||
if (len == 2 && tokens[0] == wxT("nyquist") &&
|
||||
(tokens[1] == wxT("plug-in") || tokens[1] == wxT("plugin"))) {
|
||||
mOK = true;
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (len >= 2 && tokens[0] == wxT("type")) {
|
||||
@ -1601,7 +1667,7 @@ void NyquistEffect::Parse(const wxString &line)
|
||||
if (len >= 3 && tokens[2] == wxT("spectral")) {;
|
||||
mIsSpectral = true;
|
||||
}
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (len == 2 && tokens[0] == wxT("codetype")) {
|
||||
@ -1614,7 +1680,7 @@ void NyquistEffect::Parse(const wxString &line)
|
||||
mIsSal = true;
|
||||
mFoundType = true;
|
||||
}
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
// TODO: Update documentation.
|
||||
@ -1636,7 +1702,7 @@ void NyquistEffect::Parse(const wxString &line)
|
||||
mCompiler = false;
|
||||
}
|
||||
}
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
// We support versions 1, 2 and 3
|
||||
@ -1653,28 +1719,24 @@ void NyquistEffect::Parse(const wxString &line)
|
||||
_("This version of Audacity does not support Nyquist plug-in version %ld"),
|
||||
v
|
||||
);
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
mVersion = (int) v;
|
||||
}
|
||||
|
||||
if (len >= 2 && tokens[0] == wxT("name")) {
|
||||
mName = UnQuote(tokens[1]);
|
||||
if (mName.EndsWith(wxT("...")))
|
||||
{
|
||||
mName = mName.RemoveLast(3);
|
||||
}
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (len >= 2 && tokens[0] == wxT("action")) {
|
||||
mAction = UnQuote(tokens[1]);
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (len >= 2 && tokens[0] == wxT("info")) {
|
||||
mInfo = UnQuote(tokens[1]);
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (len >= 2 && tokens[0] == wxT("preview")) {
|
||||
@ -1693,7 +1755,7 @@ void NyquistEffect::Parse(const wxString &line)
|
||||
else if (tokens[1] == wxT("disabled") || tokens[1] == wxT("false")) {
|
||||
mEnablePreview = false;
|
||||
}
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
// Maximum number of samples to be processed. This can help the
|
||||
@ -1710,7 +1772,7 @@ void NyquistEffect::Parse(const wxString &line)
|
||||
// -1 = auto (default), 0 = don't merge clips, 1 = do merge clips
|
||||
tokens[1].ToLong(&v);
|
||||
mMergeClips = v;
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (len >= 2 && tokens[0] == wxT("restoresplits")) {
|
||||
@ -1718,32 +1780,34 @@ void NyquistEffect::Parse(const wxString &line)
|
||||
// Splits are restored by default. Set to 0 to prevent.
|
||||
tokens[1].ToLong(&v);
|
||||
mRestoreSplits = !!v;
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (len >= 2 && tokens[0] == wxT("author")) {
|
||||
mAuthor = UnQuote(tokens[1]);
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (len >= 2 && tokens[0] == wxT("copyright")) {
|
||||
mCopyright = UnQuote(tokens[1]);
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
// TODO: Document.
|
||||
// Page name in Audacity development manual
|
||||
if (len >= 2 && tokens[0] == wxT("manpage")) {
|
||||
mManPage = UnQuote(tokens[1]);
|
||||
return;
|
||||
// do not translate
|
||||
mManPage = UnQuote(tokens[1], false, false);
|
||||
return true;
|
||||
}
|
||||
|
||||
// TODO: Document.
|
||||
// Local Help file
|
||||
if (len >= 2 && tokens[0] == wxT("helpfile")) {
|
||||
mHelpFile = UnQuote(tokens[1]);
|
||||
return;
|
||||
// do not translate
|
||||
mHelpFile = UnQuote(tokens[1], false, false);
|
||||
return true;
|
||||
}
|
||||
|
||||
// TODO: Document.
|
||||
@ -1752,27 +1816,40 @@ void NyquistEffect::Parse(const wxString &line)
|
||||
if (tokens[1] == wxT("disabled") || tokens[1] == wxT("false")) {
|
||||
mDebugButton = false;
|
||||
}
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (len >= 6 && tokens[0] == wxT("control")) {
|
||||
NyqControl ctrl;
|
||||
|
||||
ctrl.var = tokens[1];
|
||||
ctrl.name = tokens[2];
|
||||
ctrl.name = UnQuote( tokens[2] );
|
||||
// 3 is type, below
|
||||
ctrl.label = tokens[4];
|
||||
|
||||
// valStr may or may not be a quoted string
|
||||
ctrl.valStr = tokens[5];
|
||||
ctrl.val = GetCtrlValue(ctrl.valStr);
|
||||
if (ctrl.valStr[0] == wxT('(') || ctrl.valStr[0] == wxT('"'))
|
||||
ctrl.valStr = UnQuote( ctrl.valStr );
|
||||
|
||||
// 6 is minimum, below
|
||||
// 7 is maximum, below
|
||||
|
||||
if (tokens[3] == wxT("string")) {
|
||||
ctrl.type = NYQ_CTRL_STRING;
|
||||
ctrl.label = UnQuote( ctrl.label );
|
||||
}
|
||||
else if (tokens[3] == wxT("choice")) {
|
||||
ctrl.type = NYQ_CTRL_CHOICE;
|
||||
ctrl.choices = ParseChoice(ctrl.label);
|
||||
ctrl.label = wxT("");
|
||||
}
|
||||
else {
|
||||
ctrl.label = UnQuote( ctrl.label );
|
||||
|
||||
if (len < 8) {
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
if ((tokens[3] == wxT("float")) ||
|
||||
@ -1796,7 +1873,7 @@ void NyquistEffect::Parse(const wxString &line)
|
||||
// Note that the AudacityApp's mLogger has not yet been created,
|
||||
// so this brings up an alert box, but after the Audacity frame is up.
|
||||
wxLogWarning(str);
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
ctrl.lowStr = tokens[6];
|
||||
@ -1851,6 +1928,7 @@ void NyquistEffect::Parse(const wxString &line)
|
||||
mCategories.Add(tokens[i]);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool NyquistEffect::ParseProgram(wxInputStream & stream)
|
||||
@ -1879,27 +1957,47 @@ bool NyquistEffect::ParseProgram(wxInputStream & stream)
|
||||
mFoundType = false;
|
||||
while (!stream.Eof() && stream.IsOk())
|
||||
{
|
||||
bool dollar = false;
|
||||
wxString line = pgm.ReadLine().Trim(false);
|
||||
if (line.Length() > 1 && line[0] == wxT(';'))
|
||||
if (line.Length() > 1 &&
|
||||
// New in 2.3.0: allow magic comment lines to start with $
|
||||
// The trick is that xgettext will not consider such lines comments
|
||||
// and will extract the strings they contain
|
||||
(line[0] == wxT(';') ||
|
||||
(dollar = (line[0] == wxT('$')))))
|
||||
{
|
||||
Parse(line);
|
||||
Tokenizer tzer;
|
||||
unsigned nLines = 1;
|
||||
bool done;
|
||||
do
|
||||
// Allow run-ons only for new $ format header lines
|
||||
done = Parse(tzer, line, !dollar || stream.Eof(), nLines == 1);
|
||||
while(!done &&
|
||||
(line = pgm.ReadLine().Trim(false), ++nLines, true));
|
||||
|
||||
// Don't pass these lines to the interpreter, so it doesn't get confused
|
||||
// by $, but pass blanks,
|
||||
// so that SAL effects compile with proper line numbers
|
||||
while (nLines --)
|
||||
mCmd += wxT('\n');
|
||||
}
|
||||
else if (!mFoundType && line.Length() > 0)
|
||||
else
|
||||
{
|
||||
if (line[0] == wxT('(') ||
|
||||
(line[0] == wxT('#') && line.Length() > 1 && line[1] == wxT('|')))
|
||||
{
|
||||
mIsSal = false;
|
||||
mFoundType = true;
|
||||
}
|
||||
else if (line.Upper().Find(wxT("RETURN")) != wxNOT_FOUND)
|
||||
{
|
||||
mIsSal = true;
|
||||
mFoundType = true;
|
||||
if(!mFoundType && line.Length() > 0) {
|
||||
if (line[0] == wxT('(') ||
|
||||
(line[0] == wxT('#') && line.Length() > 1 && line[1] == wxT('|')))
|
||||
{
|
||||
mIsSal = false;
|
||||
mFoundType = true;
|
||||
}
|
||||
else if (line.Upper().Find(wxT("RETURN")) != wxNOT_FOUND)
|
||||
{
|
||||
mIsSal = true;
|
||||
mFoundType = true;
|
||||
}
|
||||
}
|
||||
mCmd += line + wxT("\n");
|
||||
}
|
||||
// preserve comments so that SAL effects compile with proper line numbers
|
||||
mCmd += line + wxT("\n");
|
||||
}
|
||||
if (!mFoundType && mIsPrompt)
|
||||
{
|
||||
@ -2120,7 +2218,7 @@ bool NyquistEffect::TransferDataToEffectWindow()
|
||||
|
||||
if (ctrl.type == NYQ_CTRL_CHOICE)
|
||||
{
|
||||
wxArrayString choices = ParseChoice(ctrl);
|
||||
const wxArrayString &choices = ctrl.choices;
|
||||
|
||||
int val = (int)ctrl.val;
|
||||
if (val < 0 || val >= (int)choices.GetCount())
|
||||
@ -2284,7 +2382,7 @@ void NyquistEffect::BuildEffectWindow(ShuttleGui & S)
|
||||
{
|
||||
S.AddSpace(10, 10);
|
||||
|
||||
wxArrayString choices = wxStringTokenize(ctrl.label, wxT(","));
|
||||
const wxArrayString &choices = ctrl.choices;
|
||||
S.Id(ID_Choice + i).AddChoice( {}, wxT(""), &choices);
|
||||
}
|
||||
else
|
||||
@ -2532,3 +2630,39 @@ void NyquistOutputDialog::OnOk(wxCommandEvent & /* event */)
|
||||
EndModal(wxID_OK);
|
||||
}
|
||||
|
||||
// Registration of extra functions in XLisp.
|
||||
#include "../../../lib-src/libnyquist/nyquist/xlisp/xlisp.h"
|
||||
|
||||
static LVAL gettext()
|
||||
{
|
||||
auto string = UTF8CTOWX(getstring(xlgastring()));
|
||||
xllastarg();
|
||||
return cvstring(GetCustomTranslation(string).mb_str(wxConvUTF8));
|
||||
}
|
||||
|
||||
static LVAL ngettext()
|
||||
{
|
||||
auto string1 = UTF8CTOWX(getstring(xlgastring()));
|
||||
auto string2 = UTF8CTOWX(getstring(xlgastring()));
|
||||
auto number = getfixnum(xlgafixnum());
|
||||
xllastarg();
|
||||
return cvstring(
|
||||
wxGetTranslation(string1, string2, number).mb_str(wxConvUTF8));
|
||||
}
|
||||
|
||||
static void RegisterFunctions()
|
||||
{
|
||||
// Add functions to XLisp. Do this only once,
|
||||
// before the first call to nyx_init.
|
||||
static bool firstTime = true;
|
||||
if (firstTime) {
|
||||
firstTime = false;
|
||||
|
||||
static const FUNDEF functions[] = {
|
||||
{ "_", SUBR, gettext },
|
||||
{ "ngettext", SUBR, ngettext },
|
||||
};
|
||||
|
||||
xlbindfunctions( functions, sizeof(functions)/sizeof(*functions) );
|
||||
}
|
||||
}
|
||||
|
@ -56,6 +56,7 @@ public:
|
||||
wxString var;
|
||||
wxString name;
|
||||
wxString label;
|
||||
wxArrayString choices;
|
||||
wxString valStr;
|
||||
wxString lowStr;
|
||||
wxString highStr;
|
||||
@ -141,7 +142,7 @@ private:
|
||||
|
||||
static wxString NyquistToWxString(const char *nyqString);
|
||||
wxString EscapeString(const wxString & inStr);
|
||||
wxArrayString ParseChoice(const NyqControl & ctrl);
|
||||
static wxArrayString ParseChoice(const wxString & text);
|
||||
|
||||
static int StaticGetCallback(float *buffer, int channel,
|
||||
long start, long len, long totlen,
|
||||
@ -162,9 +163,21 @@ private:
|
||||
void ParseFile();
|
||||
bool ParseCommand(const wxString & cmd);
|
||||
bool ParseProgram(wxInputStream & stream);
|
||||
void Parse(const wxString &line);
|
||||
struct Tokenizer {
|
||||
bool sl { false };
|
||||
bool q { false };
|
||||
int paren{ 0 };
|
||||
wxString tok;
|
||||
wxArrayString tokens;
|
||||
|
||||
wxString UnQuote(const wxString &s);
|
||||
bool Tokenize(
|
||||
const wxString &line, bool eof,
|
||||
size_t trimStart, size_t trimEnd);
|
||||
};
|
||||
bool Parse(Tokenizer &tokenizer, const wxString &line, bool eof, bool first);
|
||||
|
||||
static wxString UnQuote(const wxString &s,
|
||||
bool allowParens = true, bool translate = true);
|
||||
double GetCtrlValue(const wxString &s);
|
||||
|
||||
void OnLoad(wxCommandEvent & evt);
|
||||
|
Loading…
x
Reference in New Issue
Block a user