diff options
author | Timothy Pearson <[email protected]> | 2011-12-03 11:05:10 -0600 |
---|---|---|
committer | Timothy Pearson <[email protected]> | 2011-12-03 11:05:10 -0600 |
commit | f7e7a923aca8be643f9ae6f7252f9fb27b3d2c3b (patch) | |
tree | 1f78ef53b206c6b4e4efc88c4849aa9f686a094d /tde-i18n-de/docs/tdemultimedia | |
parent | 85ca18776aa487b06b9d5ab7459b8f837ba637f3 (diff) | |
download | tde-i18n-f7e7a923aca8be643f9ae6f7252f9fb27b3d2c3b.tar.gz tde-i18n-f7e7a923aca8be643f9ae6f7252f9fb27b3d2c3b.zip |
Second part of prior commit
Diffstat (limited to 'tde-i18n-de/docs/tdemultimedia')
75 files changed, 24259 insertions, 0 deletions
diff --git a/tde-i18n-de/docs/tdemultimedia/Makefile.am b/tde-i18n-de/docs/tdemultimedia/Makefile.am new file mode 100644 index 00000000000..df6332b8050 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/Makefile.am @@ -0,0 +1,4 @@ +KDE_LANG = de +SUBDIRS = $(AUTODIRS) +KDE_DOCS = AUTO +KDE_MANS = AUTO diff --git a/tde-i18n-de/docs/tdemultimedia/Makefile.in b/tde-i18n-de/docs/tdemultimedia/Makefile.in new file mode 100644 index 00000000000..b3e7ca8d036 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/Makefile.in @@ -0,0 +1,587 @@ +# Makefile.in generated by automake 1.10.1 from Makefile.am. +# KDE tags expanded automatically by am_edit - $Revision: 483858 $ +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = docs/tdemultimedia +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +#>- RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ +#>- html-recursive info-recursive install-data-recursive \ +#>- install-dvi-recursive install-exec-recursive \ +#>- install-html-recursive install-info-recursive \ +#>- install-pdf-recursive install-ps-recursive install-recursive \ +#>- installcheck-recursive installdirs-recursive pdf-recursive \ +#>- ps-recursive uninstall-recursive +#>+ 7 +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive nmcheck-recursive bcheck-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +#>- DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +#>+ 1 +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) $(KDE_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +ARTSCCONFIG = @ARTSCCONFIG@ +AUTOCONF = @AUTOCONF@ +AUTODIRS = @AUTODIRS@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CONF_FILES = @CONF_FILES@ +CYGPATH_W = @CYGPATH_W@ +DCOPIDL = @DCOPIDL@ +DCOPIDL2CPP = @DCOPIDL2CPP@ +DCOPIDLNG = @DCOPIDLNG@ +DCOP_DEPENDENCIES = @DCOP_DEPENDENCIES@ +DEFS = @DEFS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +GMSGFMT = @GMSGFMT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KCFG_DEPENDENCIES = @KCFG_DEPENDENCIES@ +KCONFIG_COMPILER = @KCONFIG_COMPILER@ +KDECONFIG = @KDECONFIG@ +KDE_EXTRA_RPATH = @KDE_EXTRA_RPATH@ +KDE_RPATH = @KDE_RPATH@ +KDE_XSL_STYLESHEET = @KDE_XSL_STYLESHEET@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MAKEKDEWIDGETS = @MAKEKDEWIDGETS@ +MCOPIDL = @MCOPIDL@ +MEINPROC = @MEINPROC@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TOPSUBDIRS = @TOPSUBDIRS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XMLLINT = @XMLLINT@ +X_RPATH = @X_RPATH@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +am__leading_dot = @am__leading_dot@ +am__tar = @am__tar@ +am__untar = @am__untar@ +#>- bindir = @bindir@ +#>+ 2 +DEPDIR = .deps +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +kde_appsdir = @kde_appsdir@ +kde_bindir = @kde_bindir@ +kde_confdir = @kde_confdir@ +kde_datadir = @kde_datadir@ +kde_htmldir = @kde_htmldir@ +kde_icondir = @kde_icondir@ +kde_kcfgdir = @kde_kcfgdir@ +kde_libs_htmldir = @kde_libs_htmldir@ +kde_libs_prefix = @kde_libs_prefix@ +kde_locale = @kde_locale@ +kde_mimedir = @kde_mimedir@ +kde_moduledir = @kde_moduledir@ +kde_servicesdir = @kde_servicesdir@ +kde_servicetypesdir = @kde_servicetypesdir@ +kde_sounddir = @kde_sounddir@ +kde_styledir = @kde_styledir@ +kde_templatesdir = @kde_templatesdir@ +kde_wallpaperdir = @kde_wallpaperdir@ +kde_widgetdir = @kde_widgetdir@ +tdeinitdir = @tdeinitdir@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +xdg_appsdir = @xdg_appsdir@ +xdg_directorydir = @xdg_directorydir@ +xdg_menudir = @xdg_menudir@ +KDE_LANG = de +#>- SUBDIRS = $(AUTODIRS) +#>+ 1 +SUBDIRS =. juk kioslave artsbuilder noatun kaboodle kmid krec kmix kscd +KDE_DOCS = AUTO +KDE_MANS = AUTO +#>- all: all-recursive +#>+ 1 +all: docs-am all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) +#>- @for dep in $?; do \ +#>- case '$(am__configure_deps)' in \ +#>- *$$dep*) \ +#>- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ +#>- && exit 0; \ +#>- exit 1;; \ +#>- esac; \ +#>- done; \ +#>- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdemultimedia/Makefile'; \ +#>- cd $(top_srcdir) && \ +#>- $(AUTOMAKE) --gnu docs/tdemultimedia/Makefile +#>+ 12 + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdemultimedia/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/tdemultimedia/Makefile + cd $(top_srcdir) && perl ../scripts/admin/am_edit -p../scripts/admin docs/tdemultimedia/Makefile.in +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +#>- clean: clean-recursive +#>+ 1 +clean: kde-rpo-clean clean-recursive + +#>- clean-am: clean-generic mostlyclean-am +#>+ 1 +clean-am: clean-bcheck clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic ctags \ + ctags-recursive distclean distclean-generic distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ + tags-recursive uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: + +#>+ 2 +KDE_DIST=Makefile.in Makefile.am + +#>+ 2 +docs-am: + +#>+ 15 +force-reedit: + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdemultimedia/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/tdemultimedia/Makefile + cd $(top_srcdir) && perl ../scripts/admin/am_edit -p../scripts/admin docs/tdemultimedia/Makefile.in + + +#>+ 21 +clean-bcheck: + rm -f *.bchecktest.cc *.bchecktest.cc.class a.out + +bcheck: bcheck-recursive + +bcheck-am: + @for i in ; do \ + if test $(srcdir)/$$i -nt $$i.bchecktest.cc; then \ + echo "int main() {return 0;}" > $$i.bchecktest.cc ; \ + echo "#include \"$$i\"" >> $$i.bchecktest.cc ; \ + echo "$$i"; \ + if ! $(CXX) $(DEFS) -I. -I$(srcdir) -I$(top_builddir) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(KDE_CXXFLAGS) --dump-class-hierarchy -c $$i.bchecktest.cc; then \ + rm -f $$i.bchecktest.cc; exit 1; \ + fi ; \ + echo "" >> $$i.bchecktest.cc.class; \ + perl $(top_srcdir)/admin/bcheck.pl $$i.bchecktest.cc.class || { rm -f $$i.bchecktest.cc; exit 1; }; \ + rm -f a.out; \ + fi ; \ + done + + +#>+ 3 +final: + $(MAKE) all-am + +#>+ 3 +final-install: + $(MAKE) install-am + +#>+ 3 +no-final: + $(MAKE) all-am + +#>+ 3 +no-final-install: + $(MAKE) install-am + +#>+ 3 +kde-rpo-clean: + -rm -f *.rpo + +#>+ 3 +nmcheck: +nmcheck-am: nmcheck diff --git a/tde-i18n-de/docs/tdemultimedia/artsbuilder/Makefile.am b/tde-i18n-de/docs/tdemultimedia/artsbuilder/Makefile.am new file mode 100644 index 00000000000..df6332b8050 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/artsbuilder/Makefile.am @@ -0,0 +1,4 @@ +KDE_LANG = de +SUBDIRS = $(AUTODIRS) +KDE_DOCS = AUTO +KDE_MANS = AUTO diff --git a/tde-i18n-de/docs/tdemultimedia/artsbuilder/Makefile.in b/tde-i18n-de/docs/tdemultimedia/artsbuilder/Makefile.in new file mode 100644 index 00000000000..5425492fe7a --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/artsbuilder/Makefile.in @@ -0,0 +1,635 @@ +# Makefile.in generated by automake 1.10.1 from Makefile.am. +# KDE tags expanded automatically by am_edit - $Revision: 483858 $ +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = docs/tdemultimedia/artsbuilder +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +#>- RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ +#>- html-recursive info-recursive install-data-recursive \ +#>- install-dvi-recursive install-exec-recursive \ +#>- install-html-recursive install-info-recursive \ +#>- install-pdf-recursive install-ps-recursive install-recursive \ +#>- installcheck-recursive installdirs-recursive pdf-recursive \ +#>- ps-recursive uninstall-recursive +#>+ 7 +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive nmcheck-recursive bcheck-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +#>- DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +#>+ 1 +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) $(KDE_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +ARTSCCONFIG = @ARTSCCONFIG@ +AUTOCONF = @AUTOCONF@ +AUTODIRS = @AUTODIRS@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CONF_FILES = @CONF_FILES@ +CYGPATH_W = @CYGPATH_W@ +DCOPIDL = @DCOPIDL@ +DCOPIDL2CPP = @DCOPIDL2CPP@ +DCOPIDLNG = @DCOPIDLNG@ +DCOP_DEPENDENCIES = @DCOP_DEPENDENCIES@ +DEFS = @DEFS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +GMSGFMT = @GMSGFMT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KCFG_DEPENDENCIES = @KCFG_DEPENDENCIES@ +KCONFIG_COMPILER = @KCONFIG_COMPILER@ +KDECONFIG = @KDECONFIG@ +KDE_EXTRA_RPATH = @KDE_EXTRA_RPATH@ +KDE_RPATH = @KDE_RPATH@ +KDE_XSL_STYLESHEET = @KDE_XSL_STYLESHEET@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MAKEKDEWIDGETS = @MAKEKDEWIDGETS@ +MCOPIDL = @MCOPIDL@ +MEINPROC = @MEINPROC@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TOPSUBDIRS = @TOPSUBDIRS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XMLLINT = @XMLLINT@ +X_RPATH = @X_RPATH@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +am__leading_dot = @am__leading_dot@ +am__tar = @am__tar@ +am__untar = @am__untar@ +#>- bindir = @bindir@ +#>+ 2 +DEPDIR = .deps +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +kde_appsdir = @kde_appsdir@ +kde_bindir = @kde_bindir@ +kde_confdir = @kde_confdir@ +kde_datadir = @kde_datadir@ +kde_htmldir = @kde_htmldir@ +kde_icondir = @kde_icondir@ +kde_kcfgdir = @kde_kcfgdir@ +kde_libs_htmldir = @kde_libs_htmldir@ +kde_libs_prefix = @kde_libs_prefix@ +kde_locale = @kde_locale@ +kde_mimedir = @kde_mimedir@ +kde_moduledir = @kde_moduledir@ +kde_servicesdir = @kde_servicesdir@ +kde_servicetypesdir = @kde_servicetypesdir@ +kde_sounddir = @kde_sounddir@ +kde_styledir = @kde_styledir@ +kde_templatesdir = @kde_templatesdir@ +kde_wallpaperdir = @kde_wallpaperdir@ +kde_widgetdir = @kde_widgetdir@ +tdeinitdir = @tdeinitdir@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +xdg_appsdir = @xdg_appsdir@ +xdg_directorydir = @xdg_directorydir@ +xdg_menudir = @xdg_menudir@ +KDE_LANG = de +#>- SUBDIRS = $(AUTODIRS) +#>+ 1 +SUBDIRS =. +KDE_DOCS = AUTO +KDE_MANS = AUTO +#>- all: all-recursive +#>+ 1 +all: docs-am all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) +#>- @for dep in $?; do \ +#>- case '$(am__configure_deps)' in \ +#>- *$$dep*) \ +#>- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ +#>- && exit 0; \ +#>- exit 1;; \ +#>- esac; \ +#>- done; \ +#>- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdemultimedia/artsbuilder/Makefile'; \ +#>- cd $(top_srcdir) && \ +#>- $(AUTOMAKE) --gnu docs/tdemultimedia/artsbuilder/Makefile +#>+ 12 + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdemultimedia/artsbuilder/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/tdemultimedia/artsbuilder/Makefile + cd $(top_srcdir) && perl ../scripts/admin/am_edit -p../scripts/admin docs/tdemultimedia/artsbuilder/Makefile.in +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +#>- distdir: $(DISTFILES) +#>+ 1 +distdir: distdir-nls $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +#>- uninstall: uninstall-recursive +#>+ 1 +uninstall: uninstall-docs uninstall-nls uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +#>- clean: clean-recursive +#>+ 1 +clean: kde-rpo-clean clean-recursive + +#>- clean-am: clean-generic mostlyclean-am +#>+ 1 +clean-am: clean-docs clean-bcheck clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +#>- install-data-am: +#>+ 1 +install-data-am: install-docs install-nls + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic ctags \ + ctags-recursive distclean distclean-generic distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ + tags-recursive uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: + +#>+ 2 +KDE_DIST=future.docbook index.docbook porting.docbook glossary.docbook helping.docbook artsbuilder.docbook detail.docbook midiintro.docbook modules.docbook mcop.docbook gui.docbook faq.docbook index.cache.bz2 midi.docbook tools.docbook Makefile.in digitalaudio.docbook references.docbook apis.docbook Makefile.am + +#>+ 24 +index.cache.bz2: $(srcdir)/index.docbook $(KDE_XSL_STYLESHEET) glossary.docbook porting.docbook apis.docbook gui.docbook references.docbook mcop.docbook index.docbook detail.docbook future.docbook artsbuilder.docbook digitalaudio.docbook faq.docbook modules.docbook tools.docbook midi.docbook helping.docbook midiintro.docbook + @if test -n "$(MEINPROC)"; then echo $(MEINPROC) --check --cache index.cache.bz2 $(srcdir)/index.docbook; $(MEINPROC) --check --cache index.cache.bz2 $(srcdir)/index.docbook; fi + +docs-am: index.cache.bz2 + +install-docs: docs-am install-nls + $(mkinstalldirs) $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/artsbuilder + @if test -f index.cache.bz2; then \ + echo $(INSTALL_DATA) index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/artsbuilder/; \ + $(INSTALL_DATA) index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/artsbuilder/; \ + elif test -f $(srcdir)/index.cache.bz2; then \ + echo $(INSTALL_DATA) $(srcdir)/index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/artsbuilder/; \ + $(INSTALL_DATA) $(srcdir)/index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/artsbuilder/; \ + fi + -rm -f $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/artsbuilder/common + $(LN_S) $(kde_libs_htmldir)/$(KDE_LANG)/common $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/artsbuilder/common + +uninstall-docs: + -rm -rf $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/artsbuilder + +clean-docs: + -rm -f index.cache.bz2 + + +#>+ 13 +install-nls: + $(mkinstalldirs) $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/artsbuilder + @for base in glossary.docbook porting.docbook apis.docbook gui.docbook references.docbook mcop.docbook index.docbook detail.docbook future.docbook artsbuilder.docbook digitalaudio.docbook faq.docbook modules.docbook tools.docbook midi.docbook helping.docbook midiintro.docbook ; do \ + echo $(INSTALL_DATA) $$base $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/artsbuilder/$$base ;\ + $(INSTALL_DATA) $(srcdir)/$$base $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/artsbuilder/$$base ;\ + done + +uninstall-nls: + for base in glossary.docbook porting.docbook apis.docbook gui.docbook references.docbook mcop.docbook index.docbook detail.docbook future.docbook artsbuilder.docbook digitalaudio.docbook faq.docbook modules.docbook tools.docbook midi.docbook helping.docbook midiintro.docbook ; do \ + rm -f $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/artsbuilder/$$base ;\ + done + + +#>+ 5 +distdir-nls: + for file in glossary.docbook porting.docbook apis.docbook gui.docbook references.docbook mcop.docbook index.docbook detail.docbook future.docbook artsbuilder.docbook digitalaudio.docbook faq.docbook modules.docbook tools.docbook midi.docbook helping.docbook midiintro.docbook ; do \ + cp $(srcdir)/$$file $(distdir); \ + done + +#>+ 15 +force-reedit: + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdemultimedia/artsbuilder/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/tdemultimedia/artsbuilder/Makefile + cd $(top_srcdir) && perl ../scripts/admin/am_edit -p../scripts/admin docs/tdemultimedia/artsbuilder/Makefile.in + + +#>+ 21 +clean-bcheck: + rm -f *.bchecktest.cc *.bchecktest.cc.class a.out + +bcheck: bcheck-recursive + +bcheck-am: + @for i in ; do \ + if test $(srcdir)/$$i -nt $$i.bchecktest.cc; then \ + echo "int main() {return 0;}" > $$i.bchecktest.cc ; \ + echo "#include \"$$i\"" >> $$i.bchecktest.cc ; \ + echo "$$i"; \ + if ! $(CXX) $(DEFS) -I. -I$(srcdir) -I$(top_builddir) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(KDE_CXXFLAGS) --dump-class-hierarchy -c $$i.bchecktest.cc; then \ + rm -f $$i.bchecktest.cc; exit 1; \ + fi ; \ + echo "" >> $$i.bchecktest.cc.class; \ + perl $(top_srcdir)/admin/bcheck.pl $$i.bchecktest.cc.class || { rm -f $$i.bchecktest.cc; exit 1; }; \ + rm -f a.out; \ + fi ; \ + done + + +#>+ 3 +final: + $(MAKE) all-am + +#>+ 3 +final-install: + $(MAKE) install-am + +#>+ 3 +no-final: + $(MAKE) all-am + +#>+ 3 +no-final-install: + $(MAKE) install-am + +#>+ 3 +kde-rpo-clean: + -rm -f *.rpo + +#>+ 3 +nmcheck: +nmcheck-am: nmcheck diff --git a/tde-i18n-de/docs/tdemultimedia/artsbuilder/apis.docbook b/tde-i18n-de/docs/tdemultimedia/artsbuilder/apis.docbook new file mode 100644 index 00000000000..331fa1482d6 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/artsbuilder/apis.docbook @@ -0,0 +1,434 @@ +<!-- <?xml version="1.0" ?> +<!DOCTYPE chapter PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd"> +To validate or process this file as a standalone document, uncomment +this prolog. Be sure to comment it out again when you are done --> + +<chapter id="arts-apis"> +<title +>&arts; Application Programming Interfaces</title> + +<sect1 id="api-overview"> +<title +>Überblick</title> +<para +>aRts is not only a piece of software, it also provides a variety of APIs for a variety of purposes. In this section, I will try to describe the "big picture", a brief glance what those APIs are supposed to do, and how they interact. </para> + +<para +>There is one important distinction to make: most of the APIs are <emphasis +> language and location independent</emphasis +> because they are specified as <emphasis +>mcopidl</emphasis +>. That is, you can basically use the services they offer from any language, implement them in any language, and you will not have to care whether you are talking to local or remote objects. Here is a list of these first: </para> + + +<variablelist> +<varlistentry> +<term +>core.idl</term> + <listitem +><para +>Basic definitions that form the core of the MCOP functionality, such as the protocol itself, definitions of the object, the trader, the flow system and so on. </para +></listitem> + +</varlistentry> + +<varlistentry> +<term +>artsflow.idl</term> + + <listitem +><para +>These contain the flow system you will use for connecting audio streams, the definition of <emphasis +>Arts::SynthModule</emphasis +> which is the base for any interface that has streams, and finally a few useful audio objects </para +></listitem> + +</varlistentry> + +<varlistentry> +<term +>kmedia2.idl</term> + + + <listitem +><para +>Here, an object that can play a media, <emphasis +>Arts::PlayObject</emphasis +> gets defined. Media players such as the KDE media player noatun will be able to play any media for which a PlayObject can be found. So it makes sense to implement PlayObjects for various formats (such as mp3, mpg video, midi, wav, ...) on that base, and there are a lot already. </para +></listitem> + +</varlistentry> + +<varlistentry> +<term +>soundserver.idl</term> + + <listitem +><para +>Here, an interface for the system wide sound server artsd is defined. The interface is called <emphasis +>Arts::SoundServer</emphasis +>, which implements functionality like accepting streams from the network, playing samples, creating custom other aRts objects and so on. Network transparency is implied due to the use of MCOP (as for everything else here). </para +></listitem> + +</varlistentry> + +<varlistentry> +<term +>artsbuilder.idl</term> + <listitem +><para +>This module defines basic flow graph functionality, that is, combining simpler objects to more complex ones, by defining a graph of them. It defines the basic interface <emphasis +>Arts::StructureDesc</emphasis +>, <emphasis +>Arts::ModuleDesc</emphasis +> and <emphasis +>Arts::PortDesc</emphasis +> which contain a description of a structure, module, and port. There is also a way to get a "living network of objects" out of these connection and value descriptions, using a factory. </para +></listitem> + +</varlistentry> + +<varlistentry> +<term +>artsmidi.idl</term> + + <listitem +><para +>This module defines basic midi functionality, like objects that produce midi events, what is a midi event, an <emphasis +>Arts::MidiManager</emphasis +> to connect the producers and consumers of midi events, and so on. As always network transparency implied. </para +></listitem> + +</varlistentry> + +<varlistentry> +<term +>artsmodules.idl</term> + <listitem +><para +>Here are various additional filters, oscillators, effects, delays and so on, everything required for real useful signal processing, and to build complex instruments and effects out of these basic building blocks. </para +></listitem> + +</varlistentry> + +<varlistentry> +<term +>artsgui.idl</term> + + <listitem +><para +>This cares about visual objects. It defines the basic type <emphasis +> Arts::Widget</emphasis +> from which all GUI modules derive. This will produce toolkit independency, and ... visual GUI editing, and serializable GUIs. Also, as the GUI elements have normal attributes, their values can be straight forward connected to some signal processing modules. (I.e. the value of a slider to the cutoff of a filter). As always: network transparent. </para +></listitem> + +</varlistentry> + +</variablelist> +<para +>Where possible, aRts itself is implemented using IDL. On the other hand, there are some <emphasis +>language specific</emphasis +> APIs, using either plain C++ or plain C. It is usually wise to use IDL interfaces where possible, and the other APIs where necessary. Here is a list of language specific APIs: </para> + +<variablelist> + +<varlistentry> +<term +>KNotify, KAudioPlayer (included in libtdecore)</term> + + <listitem +><para +>These are convenience KDE APIs for the simple and common common case, where you just want to play a sample. The APIs are plain C++, Qt/KDE optimized, and as easy as it can get. </para +></listitem> + +</varlistentry> + +<varlistentry> +<term +>libartsc</term> + <listitem +><para +>Plain C interface for the sound server. Very useful for porting legacy applications. </para +></listitem> + +</varlistentry> + +<varlistentry> +<term +>libmcop</term> + + <listitem +><para +>Here all magic for MCOP happens. The library contains the basic things you need to know for writing a simple MCOP application, the dispatcher, timers, iomanagement, but also the internals to make the MCOP protocol itself work. </para +></listitem> + +</varlistentry> + +<varlistentry> +<term +>libartsflow</term> + <listitem +><para +>Besides the implementation of artsflow.idl, some useful utilities like sampling rate conversion. </para +></listitem> + +</varlistentry> + +<varlistentry> +<term +>libqiomanager</term> + + <listitem +><para +>Integration of MCOP into the Qt event loop, when you write Qt applications using MCOP. </para +></listitem> + +</varlistentry> + +</variablelist> + + + +</sect1> +<sect1 id="knotify"> +<title +>knotify</title> +<para +>Noch nicht geschrieben. </para> +</sect1> + +<sect1 id="kaudioplayer"> +<title +>kaudioplayer</title> +<para +>Noch nicht geschrieben. </para> +</sect1> + +<sect1 id="libkmid"> +<title +>libkmid</title> +<para +>Noch nicht geschrieben. </para> +</sect1> + +<sect1 id="kmedia2"> +<title +>kmedia2</title> +<para +>Noch nicht geschrieben. </para> +</sect1> + +<sect1 id="soundserver"> +<title +>sound server</title> +<para +>Noch nicht geschrieben. </para> +</sect1> + +<sect1 id="artsflow"> +<title +>artsflow</title> +<para +>Noch nicht geschrieben. </para> +</sect1> + +<sect1 id="capi"> +<title +>C <acronym +>API</acronym +></title> + +<sect2 id="capiintro"> +<title +>Einleitung</title> + +<para +>The &arts; C <acronym +>API</acronym +> was designed to make it easy to writing and port plain C applications to the &arts; sound server. It provides streaming functionality (sending sample streams to <application +>artsd</application +>), either blocking or non-blocking. For most applications you simply remove the few system calls that deal with your audio device and replace them with the appropriate &arts; calls.</para> + +<para +>I did two ports as a proof of concept: <application +>mpg123</application +> and <application +>quake</application +>. You can get the patches from <ulink url="http://space.twc.de/~stefan/kde/download/artsc-patches.tar.gz" +>here</ulink +>. Feel free to submit your own patches to the maintainer of &arts; or of multimedia software packages so that they can integrate &arts; support into their code.</para> + +</sect2> + +<sect2 id="capiwalkthru"> +<title +>Quick Walkthrough</title> + +<para +>Sending audio to the sound server with the <acronym +>API</acronym +> is very simple:</para> +<procedure> +<step +><para +>include the header file using <userinput +>#include <artsc.h></userinput +></para +></step> +<step +><para +>initialize the <acronym +>API</acronym +> with <function +>arts_init()</function +></para +></step> +<step +><para +>create a stream with <function +>arts_play_stream()</function +></para +></step> +<step +><para +>configure specific parameters with <function +>arts_stream_set()</function +></para +></step> +<step +><para +>write sampling data to the stream with <function +>arts_write()</function +></para +></step> +<step +><para +>close the stream with <function +>arts_close_stream()</function +></para +></step> +<step +><para +>free the <acronym +>API</acronym +> with <function +>arts_free()</function +></para +></step> +</procedure> + +<para +>Here is a small example program that illustrates this:</para> + +<programlisting +>#include <stdio.h> +#include <artsc.h> +int main() +{ + arts_stream_t stream; + char buffer[8192]; + int bytes; + int errorcode; + + errorcode = arts_init(); + if (errorcode < 0) + { + fprintf(stderr, "arts_init error: %s\n", arts_error_text(errorcode)); + return 1; + } + + stream = arts_play_stream(44100, 16, 2, "artsctest"); + + while((bytes = fread(buffer, 1, 8192, stdin)) > 0) + { + errorcode = arts_write(stream, buffer, bytes); + if(errorcode < 0) + { + fprintf(stderr, "arts_write error: %s\n", arts_error_text(errorcode)); + return 1; + } + } + + arts_close_stream(stream); + arts_free(); + + return 0; +} +</programlisting> +</sect2> + +<sect2 id="capiartscconfig"> +<title +>Compiling and Linking: <application +>artsc-config</application +></title> + +<para +>To easily compile and link programs using the &arts; C <acronym +>API</acronym +>, the <application +>artsc-config</application +> utility is provided which knows which libraries you need to link and where the includes are. It is called using</para> + +<screen +><userinput +><command +>artsc-config</command +> <option +>--libs</option +></userinput +> +</screen> + +<para +>to find out the libraries and </para> + +<screen +><userinput +><command +>artsc-config</command +> <option +>--cflags</option +></userinput +> +</screen> + +<para +>to find out additional C compiler flags. The example above could have been compiled using the command line:</para> + +<screen +><userinput +><command +>cc</command +> <option +>-o artsctest artsctest.c `artsc-config --cflags` `artsc-config --libs`</option +></userinput> + +<userinput +><command +>cc</command +> <option +>-o artsctest</option +> <option +>artsctest.c</option +> <option +>`artsc-config --cflags`</option +> <option +>`artsc-config --libs`</option +></userinput +> +</screen> + +</sect2> + +<sect2 id="c-api-reference"> +<title +>Library Reference</title> + +<para +>[TODO: generate the documentation for artsc.h using kdoc] </para> + +</sect2> + +</sect1> +</chapter> diff --git a/tde-i18n-de/docs/tdemultimedia/artsbuilder/artsbuilder.docbook b/tde-i18n-de/docs/tdemultimedia/artsbuilder/artsbuilder.docbook new file mode 100644 index 00000000000..7b189cffc4f --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/artsbuilder/artsbuilder.docbook @@ -0,0 +1,917 @@ +<chapter id="artsbuilder"> +<title +>&arts-builder;</title> + +<sect1 id="overview"> +<title +>Überblick</title> + +<para +>Wenn Sie &arts-builder; verwenden wollen, sollten Sie zuerste den Klangserver (&artsd;) starten. Normalerweise ist er bereits gestartet, wenn Sie &kde; 2.1 oder höher verwenden. Ansonsten können Sie ihn in &kcontrol; unter <menuchoice +><guilabel +>Sound & Multimedia</guilabel +><guilabel +>Sound-System</guilabel +></menuchoice +> zum automatischen Start einrichten. </para> + +<para +>Wenn Sie &arts; verwenden, startet es kleine Module. &arts-builder; ist ein Werkzeug zur Erstellung neuer Strukturen von kleinen verbundenen Modulen. Sie können die Module einfach innerhalb des Gitters anordnen. Wählen Sie dazu aus dem Menü <guimenu +>Module</guimenu +> aus und klicken Sie dann irgendwo im grün-grauen Bereich. </para> + +<para +>Module habe üblicherweise Kanäle (durch die Audiosignale hinein und hinaus gelangen). Um zwei Kanäle zu verbinden, klicken Sie auf den Ersten (dadurch wird er orange) und dann auf den Zweiten. Sie können einen Eingabekanal (auf der oberen Modulseite) nur mit einem Ausgabekanal (auf der unteren Modulseite) verbinden. Wenn Sie einem Kanal einen festen Werte geben wollen (oder einen Kanal trennen wollen) so doppelklicken Sie auf diesen. </para> + +</sect1> + +<sect1 id="artsbuilder-tutorial"> +<title +>Einführung</title> + +<sect2 id="step-1"> +<title +>Schritt 1</title> + +<para +>Starten Sie &arts-builder;. </para> + +<para +>Um die Ausgabe zu hören, benötigen Sie ein Synth_AMAN_PLAY-Modul. Sie erstellen ein solches Modul, indem Sie <menuchoice +> <guimenu +>Module</guimenu +> <guisubmenu +>Synthese</guisubmenu +> <guisubmenu +>SoundIO</guisubmenu +> <guisubmenu +>Synth_AMAN_PLAY</guisubmenu +> </menuchoice +> auswählen und auf einen freien Platz im Modulbereich klicken. Platzieren Sie das Modul unterhalb der fünften Linie, da wir noch einige Module oberhalb einfügen werden. </para> + +<para +>Das Modul hat die Parameter <parameter +>title</parameter +> und <parameter +>autoRestoreID</parameter +> (in der Nähe des linken Kanals) zur Identifikation. Um diese auszufüllen, doppelklicken Sie auf diese Kanäle, wählen Sie konstanter Wert und tippen Sie <userinput +>tutorial</userinput +> in das Eingabefeld. Klicken Sie auf <guibutton +>OK</guibutton +> zur Bestätigung. </para> + +<para +>Klicken Sie auf <menuchoice +><guimenu +>Datei</guimenu +><guimenuitem +>Struktur ausführen</guimenuitem +> </menuchoice +>. Sie hören bisher nichts. Das Abspielmodul benötigt irgendetwas als Eingabe. Wenn Sie der Stille eine Weile gelauscht haben, klicken Sie auf <guibutton +>OK</guibutton +> und gehen Sie zu Schritt 2 </para> +</sect2> + +<sect2 id="step-2"> +<title +>Schritt 2</title> + +<para +>Erstellen Sie ein Synth_WAVE_SIN-Modul (im Menü unter <menuchoice +> <guimenu +>Module</guimenu +> <guimenuitem +>Synthese</guimenuitem +> <guimenuitem +>Wellenformen</guimenuitem +> </menuchoice +>) und fügen Sie dieses Modul oberhalb von Synth_AMAN_PLAY ein (lassen Sie eine Zeile Platz dazwischen). </para> + +<para +>Wie Sie sehen, produziert dieses Modul eine Ausgabe, erfordert aber eine Position <guilabel +>pos</guilabel +> als Eingabe. Verbinden Sie zuerst die Ausgabe mit den Lautsprechern. Klicken Sie auf den Kanal <guilabel +>out</guilabel +> des Synth_WAVE_SIN-Modules und dann auf den Kanal <guilabel +>left</guilabel +> des Synth_AMAN_PLAY-Modules. Damit sind diese zwei Module verbunden. </para> + +<para +>Keiner der Oszillatoren in &arts; benötigt eine Frequenz als Eingabe, sondern nur eine Position innerhalb der Welle. Die Position muss zwischen 0 und 1 liegen. Das wird für ein Standard-Synth_WAVE_SIN-Modul auf den Bereich 0 bis 2*Pi umgerechnet. Um eine bestimmte Frequenz zu erzeugen, benötigen Sie ein Synth_FREQUENCY-Modul. </para> + +<para +>Erstellen Sie ein Synth_FREQUENCY-Modul (unter <menuchoice +> <guimenu +>Module</guimenu +> <guimenu +>Synthese</guimenu +> <guimenu +>Oszillation & Modulation</guimenu +> </menuchoice +>) und verbinden Sie den <quote +>pos</quote +>-Ausgang mit dem <quote +>pos</quote +>-Eingang des Synth_WAVE_SIN-Modules. Legen Sie den Frequenzeingang des Frequenzgenerators auf den konstanten Wert 440. </para> + + +<para +>Wählen Sie <menuchoice +><guimenu +>Datei</guimenu +><guimenuitem +>Struktur ausführen</guimenuitem +></menuchoice +>. Sie sollten einen Sinuston von 440 Hz in einem von Ihren Lautsprechern hören. Wenn Sie genug zugehört haben, klicken Sie auf <guibutton +>OK</guibutton +> und gehen Sie zu Schritt 3. </para> + +</sect2> + +<sect2 id="step-3"> +<title +>Schritt 3</title> + +<para +>Es würde sich besser anhören, wenn der Sinuston aus beiden Lautsprechern zu hören wäre. Verbinden Sie den rechten Eingang von Synth_PLAY auch mit dem Ausgang von Synth_WAVE_SIN. </para> + +<para +>Erstellen Sie ein Synth_SEQUENCE-Objekt (durch <menuchoice +> <guimenu +>Module</guimenu +> <guisubmenu +>Synthese</guisubmenu +> <guisubmenu +>Midi & Sequencing</guisubmenu +> </menuchoice +>). Es sollte am oberen Rand platziert werden. Wenn Sie mehr Platz benötigen, können Sie die anderen Module verschieben, indem Sie sie auswählen (um mehrere auszuwählen, verwenden Sie &Shift;) und mit der Maus bewegen. </para> + +<para +>Nun verbinden Sie den Frequenzausgaben von Synth_SEQUENCE mit dem Frequenzeingang des Synth_FREQUENCY-Moduls. Stellen Sie die Geschwindigkeit der Sequenz auf den konstanten Wert 0.13 (der Geschwindigkeitseingang ist der linke). </para> + +<para +>Geben Sie nun für den rechten Eingang (Sequenz) von Synth_SEQUENCE als konstanten Wert <userinput +>A-3;C-4;E-4;C-4</userinput +> ein. Das legt eine Sequenz fest. Mehr dazu finden Sie im Abschnitt Modulreferenz. </para> + +<note> +<para +>Synth_SEQUENCE benötigt <emphasis +>unbedingt</emphasis +> eine Sequenz und eine Geschwindigkeit. Ohne diese Angaben wird das Programm vermutlich abstürzen. </para> +</note> + +<para +>Wählen Sie <menuchoice +><guimenu +>Datei</guimenu +><guimenuitem +>Struktur ausführen</guimenuitem +> </menuchoice +>. Sie sollten nun eine nette Sequenz hören. Klicken Sie auf <guibutton +>OK</guibutton +> und gehen Sie zu Schritt 4. </para> +</sect2> + +<sect2 id="step-4"> +<title +>Schritt 4</title> + +<para +>Erstellen Sie ein Synth_PSCALE-Modul (durch <menuchoice +> <guimenu +>Module</guimenu +> <guisubmenu +>Synthese</guisubmenu +> <guisubmenu +>Hüllkurven</guisubmenu +> </menuchoice +>). Trennen Sie den Ausgang der SIN-Welle durch doppelklicken und auswählen von <guilabel +>nicht verbunden</guilabel +>. Verbinden Sie </para> + +<orderedlist +><listitem> +<para +>den SIN-Ausgang mit dem Eingang (inval) von PSCALE</para> +</listitem> +<listitem> +<para +>Den Ausgang von PSCALE mit dem linken Eingang von AMAN_PLAY</para> +</listitem> +<listitem> +<para +>den Ausgang von PSCALE mit dem rechten Eingang von AMAN_PLAY</para> +</listitem> +<listitem> +<para +>den SEQUENCE-Ausgang (pos) mit dem PSCAL-Eingang (pos).</para> +</listitem> +</orderedlist> + +<para +>Setzen Sie schließlich den Eingang top von PSCALE auf einen konstanten Wert, z.B. 0.1. </para> + +<para +>Das funktioniert folgendermaßen: Das Modul Synth_SEQUENCE gibt zusätzliche Informationen über die Position der gerade erklingenden Note, wobei 0 gerade gestartet und 1 beendet bedeutet. Das Modul Synth_PSCALE skaliert die Lautstärke des Audiostroms von 0 (Ruhe) über 1 (Originallautstärke) zurück zu 0 (Ruhe) abhängig von der Position. Die Position, an der die Maximallautstärke erklingen soll, kann als Positionswert (pos) angegeben werden. 0.1 bedeutet, das nach 10% der Note die Lautstärke ihren Maximalwert erreicht und danach der Ausklingvorgang startet. </para> + + +<para +>Wählen Sie <menuchoice +><guimenu +>Datei</guimenu +><guimenuitem +>Struktur ausführen</guimenuitem +> </menuchoice +>. Sie sollten nun eine nette Sequenz hören. Klicken Sie auf <guibutton +>OK</guibutton +> und gehen Sie zu Schritt 4. </para> + +</sect2> + +<sect2 id="step-5-starting-to-beam-data-around"> +<title +>Schritt 5: Daten sollen übertragen werden ;-)</title> + +<para +>Starten Sie &arts-builder; ein zweites Mal</para> + +<para +>Erstellen Sie ein Synth_AMAN_PLAY-Modul und benennen Sie es sinnvoll. Erstellen Sie ein Synth_BUS_DOWNLINK-Modul und:</para> + +<orderedlist> +<listitem> +<para +>benennen Sie den Synth_BUS_DOWNLINK-Bus mit dem Namen Audio (das ist nur ein Name, man könnte auch jeden anderen Name verwenden) </para> +</listitem> +<listitem> +<para +>Verbinden Sie den linken Ausgang von Synth_BUS_DOWNLINKmit dem linken Eingang von Synth_AMAN_PLAY </para> +</listitem> +<listitem> +<para +>Verbinden Sie den rechten Ausgang von Synth_BUS_DOWNLINK mit dem rechten Eingang von Synth_AMAN_PLAY </para> +</listitem> +</orderedlist> + +<para +>Wenn Sie die Struktur jetzt ausführen, hören Sie noch nichts. </para> + +<para +>Gehen Sie zurück zur ersten Struktur in der ersten Instanz von &arts-builder; mit dem Synth_WAVE_SIN-Modul und ersetzen Sie das Modul Synth_AMAN_PLAY durch ein Synth_BUS_UPLINK,-Modul und benennen Sie es Audio (oder den Namen, den Sie für die entsprechende Komponente in der zweiten Instanz von &arts-builder; verwendet haben). Um ein Modul zu löschen, wählen Sie es aus und wählen Sie <menuchoice +><guimenu +>Bearbeiten</guimenu +><guimenuitem +>Löschen</guimenuitem +></menuchoice +> aus dem Menü ( oder drücken Sie die <keycap +>Entfernen</keycap +>-Taste). </para> + +<para +>Wählen Sie <menuchoice +><guimenu +>Datei</guimenu +> <guilabel +>Struktur ausführen</guilabel +></menuchoice +>. Sie hören die Notensequenz wiedergegeben über die Bus-Verbindung. </para> + +<para +>Wenn Sie herausfinden wollen, wozu eine solche Funktion nützlich ist, klicken Sie auf <guibutton +>OK</guibutton +> ( in der Instanz, die das Synth_SEQUENCE-Modul enthält, die andere Struktur wird nicht verändert) und gehen Sie zu Schritt 6. </para> +</sect2> + +<sect2 id="step-6-beaming-for-advanced-users"> +<title +>Schritt 6 Übertragung für Fortgeschrittene</title> + +<para +>Wählen Sie <menuchoice +><guimenu +>Datei</guimenu +><guimenuitem +>Struktur umbenennen</guimenuitem +></menuchoice +> in der Instanz, die das Synth_SEQUENCE-Modul enthält und benennen Sie die Struktur Anleitung. Bestätigen Sie mit <guibutton +>OK</guibutton +>. </para> + +<para +>Wählen Sie <menuchoice +><guimenu +>Datei</guimenu +><guimenuitem +>Speichern</guimenuitem +> </menuchoice +> </para> + +<para +>Starten Sie eine weitere Instanz von &arts-builder; und wählen Sie <menuchoice +><guimenu +>Datei</guimenu +><guimenuitem +>Öffnen</guimenuitem +></menuchoice +> und laden Sie die Struktur Anleitung. </para> + +<para +>Nun wählen Sie im Menü <menuchoice +><guimenu +>Datei</guimenu +><guimenuitem +>Struktur ausführen</guimenuitem +></menuchoice +> in beiden Instanzen. Sie hören nun die gleiche Struktur zweimal. Abhängig von der Zeitverschiebung wird es mehr oder weniger glücklich klingen. </para> + +<para +>An dieser Stelle können Sie noch folgendes tun: Starten Sie &noatun; und spielen Sie einige <literal role="extension" +>mp3</literal +>-Dateien ab. Starten Sie &artscontrol; und wählen Sie <menuchoice +><guimenu +>Ansicht</guimenu +><guimenuitem +>Audiomanager anzeigen</guimenuitem +></menuchoice +>. Es wird &noatun; und ihre Struktur <quote +>Anleitung</quote +> angezeigt. Klicken Sie doppelt auf &noatun;. Daraufhin wird eine Liste der Ausgabegeräte angezeigt. Auch die Struktur wird mit aufgeführt. Sie können die Ausgabe von &noatun; über den Audio-Bus durch ihre Wiedergabestruktur leiten. </para> +</sect2> + +<sect2 id="step-7-midi-synthesis"> +<title +>Schritt 7: Midi-Synthese</title> + +<para +>Jetzt wollen wir den Sinusgenerator in ein wirkliches Musikinstrument verwandeln. Dazu benötigen Sie ein Gerät, das &MIDI;-Ereignisse an &arts; senden kann. Sie können ein externes Keyboard (wie im folgenden beschrieben wird) aber auch einen Sequenzer, der den Midi-bus unterstützt, wie &brahms; verwenden. </para> + +<para +>Beenden Sie zuerst alle überflüssigen Instanzen von &arts-builder;. Sie benötigen lediglich die Instanz mit dem Sinusgenerator. Wählen Sie dreimal <menuchoice +><guimenu +>Kanäle</guimenu +> <guisubmenu +>Audio-Eingangssignal erstellen</guisubmenu +></menuchoice +> und dreimal <menuchoice +><guimenu +>Kanäle</guimenu +> <guisubmenu +>Audio-Ausgangssignal erstellen</guisubmenu +></menuchoice +> und platzieren Sie die Module geeignet. </para> + +<para +>Wählen Sie <menuchoice +><guimenu +>Kanäle</guimenu +> <guilabel +>Positionen/Namen ändern</guilabel +></menuchoice +> und benennen Sie die Kanäle um in frequency(Frequenz), velocity(Lautstärke), pressed(gedrückt), left(links), right(rechts) und done(stopp) um. </para> + +<para +>Sie können nun das Modul Synth_SEQUENCE löschen und stattdessen den Frequenzeingangskanal mit dem Modul Synth_FREQUENCY-Eingang verbinden. Was soll nun mit dem pos-Eingang passieren?</para +> <para +>Dieser Eingang bleibt unbesetzt, da es keinen Algorithmus der Welt gibt, der vorausberechnen kann, wann ein Spieler die Taste des Keyboards, die er gerade gedrückt hat, wieder loslassen wird. Daher haben wir nur einen Parameter gedrückt stattdessen, der anzeigt, ob der Spieler die Taste noch gedrückt hält (gedrückt=1: Taste immer noch heruntergehalten; gedrückt=0: Taste losgelassen) </para> + +<para +>Das Synth_PSCALE-Objekt muss nun auch ersetzt werden. Ersetzen Sie es durch ein Synth_ENVELOPE_ADSR-Modul (durch <menuchoice +><guimenu +>Module</guimenu +><guisubmenu +>Synthese</guisubmenu +> <guisubmenu +>Hüllkurven</guisubmenu +></menuchoice +>). Verbinden Sie: </para> + +<orderedlist> +<listitem> +<para +>den Struktureingang mit dem Ausgang active von ADSR</para> +</listitem> +<listitem> +<para +>den SIN-Ausgang mit dem Eingang (inval) von ADSR</para> +</listitem> +<listitem> +<para +>den Ausgang (outvalue) von ADSR mit dem linken Strukturausgang</para> +</listitem +><listitem> +<para +>den ADSR-Ausgang (outvalue) mit dem rechten Strukturausgang</para> +</listitem> +</orderedlist> + +<para +>Setzen Sie die Parameter attack auf 0.1, decay auf 0.2, sustain auf 0.7 und release auf 0.1. </para> + +<para +>Weiterhin müssen wir daran denken, das die Instrumentenstruktur wissen muss, wenn der Spieler mit spielen fertig ist, da sonst der letzte Klang nicht beendet wird, auch wenn die letzte Taste losgelassen worden ist. Glücklicherweise weiß die ADSR-Hüllkurve (envelope), wann nichs mehr zu hören ist, da das Signal nach dem Loslassen der letzten Taste irgendwann auf Null reduziert wird. </para> + +<para +>Das wird erreicht, indem der Ausgang done auf 1 gesetzt wird. Verbinden Sie diesen Ausgang mit dem Ausgangskanal stopp. Damit wird die Struktur beendet, sobald dieser Ausgang auf 1 wechselt. </para> + +<para +>Benennen Sie die Struktur in Instrument_Anleitung um (durch <menuchoice +><guimenu +> Datei</guimenu +> <guimenuitem +>Struktur umbenennen</guimenuitem +></menuchoice +>). Speichern Sie die Struktur nun (der vorgegebene Name sollte jetzt Instrument_Anleitung sein).</para +><para +>Starten Sie nun artscontrol, wählen Sie <menuchoice +><guimenu +>Ansicht</guimenu +><guimenuitem +>Midi-Manager</guimenuitem +></menuchoice +> und wählen Sie<menuchoice +><guimenu +>Hinzufügen</guimenu +><guimenuitem +>aRts-Synthese Midi-Ausgabe</guimenuitem +></menuchoice +>. Hier sollten Sie in der Lage sein, ihr Instrument (Anleitung) auszuwählen. </para> + +<para +>Wenn Sie jetzt ein Terminal öffnen und <userinput +><command +>midisend</command +></userinput +> eintippen, sollte <command +>midisend</command +> und das Instrument im &arts; &MIDI;-Manager angezeigt werden. Wählen Sie beides aus und klicken Sie auf <guibutton +>Verbinden</guibutton +>. Damit sind die Vorbereitungen abgeschlossen. Nehmen Sie nun ihr Keyboard und beginnen Sie zu spielen (selbstverständlich nachdem Sie es mit dem Computer verbunden haben). </para> +</sect2> + +<sect2 id="suggestions"> +<title +>Hinweise</title> + +<para +>Sie sind nun in der Lage, &arts; zu verwenden. Hier sind noch einige Tipps, die den Umgang mit Strukturen verbessern können: </para> + +<itemizedlist> +<listitem> +<para +>Versuchen Sie andere Module anstelle von SIN. Wenn Sie eine TRI-Wellenform verwenden, werden Sie vermutlich feststellen, das diese Wellenform nicht besonders hübsch klingt. Hängen Sie einen SHELVE_CUTOFF-Filter an das TRI-Modul, um alle Frequenzen oberhalb einer bestimmten Grenzfrequenz (versuchen Sie etwa 1000 Hz oder besser noch die doppelte Eingabefrequenz +200 Hz oder einen ähnlichen Wert). </para> +</listitem> +<listitem> +<para +>Verwenden Sie mehrere Oszillatoren zusammen. Synth_XFADE kann zum kreuzweisen mixen (cross fade) von zwei Signalen verwendet werden, Synth_ADD zum Addieren von zwei Signalen. </para> +</listitem> +<listitem> +<para +>Verstimmen Sie die Oszillatoren geringfügig gegeneinander. Das erzeugt nette Schwebungen. </para> +</listitem> +<listitem> +<para +>Experimentieren Sie mit mehreren Hüllkurven (envelopes) gleichzeitig. </para> +</listitem> +<listitem> +<para +>Stellen Sie Instrumente zusammen, die verschiedene Signale auf den linken und rechten Ausgang legen. </para> +</listitem> +<listitem> +<para +>Verarbeiten Sie das Signal, das aus dem Downlink-Bus kommt, weiter. Sie können für einen Echo-Effekt das ursprüngliche Signal etwas verzögert dazumischen. </para> +</listitem> +<listitem> +<para +>Verwenden Sie die Lautstärkeeinstellung (die Stärke, mit der die Taste gedrückt worden ist). Ein besonderer Effekt entsteht, wenn der Lautstärkewert nicht nur die Ausgabelautstärke sondern auch den Klang des Instrumentes verändert (zum Beispiel die Grenzfrequenz). </para> +</listitem> +<listitem> +<para +>...</para> +</listitem> +</itemizedlist> + +<para +>Wenn Sie eine besondere Struktur konstruiert haben, schicken Sie sie an die &arts;-Internetseite. Sie kann dann der nächsten Version beigelegt werden. </para> +</sect2> + +</sect1> + +<sect1 id="artsbuilder-examples"> +<title +>Beispiele</title> + +<para +>Die Beispiele, mit denen &arts-builder; verteilt wird, können Sie unter <menuchoice +><guimenu +>Datei</guimenu +><guimenuitem +>Beispiel öffnen ...</guimenuitem +> </menuchoice +> finden. Einige befinden sich im angezeigten Verzeichnis, einige (die in der aktuellen Version aus irgendwelchen Gründen nicht funktionieren) befinden sich im todo-Verzeichnis. </para> +<para +>Die Beispiele können in mehrere Kategorien eingeteilt werden: </para> + +<itemizedlist> +<listitem> +<para +>Modulbeispiele demonstrieren jeweils eines der in arts enthaltenen Modules (<filename +>example_*.arts</filename +> benannt). Sie senden üblicherweise irgendwelche Ausgaben an die Soundkarte. </para> +</listitem> + +<listitem> +<para +>Instrumente (mit Namen <filename +>instrument_*.arts</filename +>) sind aus den grundlegenden arts-Modulen zusammengesetzt. Sie haben standardisierte Ein- und Ausgabekanäle, so dass sie mit dem &MIDI;-Manager aus &artscontrol; verwendet werden können. </para> +</listitem> + +<listitem> +<para +>Vorlagen ( mit Namen <filename +>template_*.arts</filename +>) zur Erstellung neuer Module. </para> +</listitem> + +<listitem> +<para +>Effekte (mit Namen <filename +>effect_*.arts</filename +>) können als Bausteine verwendet werden [momentan alle im todo-Verzeichnis] </para> +</listitem> + +<listitem> +<para +>Mixer-Elemente (mit Namen <filename +>mixer_element_*.arts</filename +>) können zur Erstellung von Mixern mit graphischen Kontrollelementen verwendet werden [momentan alle im todo-Verzeichnis ] </para> +</listitem> + +<listitem> +<para +>Verschiedene Module, die in keine der angegebenen Kategorien passen. </para> +</listitem> +</itemizedlist> + +<variablelist> +<title +>Detailierte Beschreibung der einzelnen Module:</title> +<varlistentry> +<term +><filename +>example_stereo_beep.arts</filename +></term> +<listitem> +<para +>Sendet einen 440Hz-Sinuston an den linken und einen 880Hz-Sinuston an den rechten Kanal der Soundkarte. Dieses Modul wird in der &arts;-Dokumentation erwähnt. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><filename +>example_sine.arts</filename +></term> +<listitem> +<para +>Erzeugt einen 440Hz-Sinuston. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><filename +>example_pulse.arts</filename +></term> +<listitem> +<para +>Erzeugt einen 440Hz-Impulston mit 20%-Arbeitswiederholung (duty cycle). </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><filename +>example_softsaw.arts</filename +></term> +<listitem> +<para +>Erzeugt eine 440Hz-Sägezahnschwingung. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><filename +>example_square.arts</filename +></term> +<listitem> +<para +>Erzeugt eine 440Hz-Rechteckschwingung. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><filename +>example_tri.arts</filename +></term> +<listitem> +<para +>Erzeugt eine 440Hz-Dreieckschwingung. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><filename +>example_noise.arts</filename +></term> +<listitem> +<para +>Erzeugt weißen Lärm. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><filename +>example_dtmf1.arts</filename +></term> +<listitem> +<para +>Erzeugt einen Doppelton aus einer 697Hz- und 1209Hz-Sinusschwingung, die mit 0.5 skaliert und addiert werden. Es entsteht der DTMF-Ton für die Ziffer "1" einer Telefontastatur. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><filename +>example_atan_saturate.arts</filename +></term> +<listitem> +<para +>Eine Dreieckschwingung wird mit einem atan-Sättigungsfilter verändert. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><filename +>example_autopanner.arts</filename +></term> +<listitem> +<para +>Verwendet ein Autopan-Modul, um einen 400Hz-Sinuston mit einer Frequenz von 2 Hz zwischen dem linken und rechten Lautsprecher hin- und herzubewegen. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><filename +>example_brickwall.arts</filename +></term> +<listitem> +<para +>Skaliert eine Sinusschwingung mit dem Faktor 5 und verändert sie mit einem brickwall-Begrenzer. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><filename +>example_bus.arts</filename +></term> +<listitem> +<para +>Vom Bus mit dem Namen <quote +>Bus</quote +> wird zum Bus <quote +>out_soundcard</quote +> eine Verbindung mit vertauschten Kanälen hergestellt. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><filename +>example_cdelay.arts</filename +></term> +<listitem> +<para +>Verbindet von einem Bus namens <quote +>Delay</quote +> zum rechten Ausgangskanal mit einer Verzögerung von 0.5 Sekunden (cdelay), während der linke Kanal unverändert bleibt. Mit &artscontrol; können Sie diesen Effekt mit einem Abspieler verbinden. Das Resultat ist hörenswert. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><filename +>example_delay.arts</filename +></term> +<listitem> +<para +>Das gleiche Beispiel wie <filename +>example_cdelay.arts</filename +>, mit dem Unterschied, dass der delay-Effekt anstelle von cdelay verwendet wird. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><filename +>example_capture_wav.arts</filename +></term> +<listitem> +<para +>Mit dem Modul Synth_CAPTURE_WAV wird ein 400Hz-Sinuston als wav-Datei gespeichert. Lassen Sie das Modul für 2 Sekunden laufen und untersuchen Sie die in <filename class="directory" +>/tmp</filename +> erzeugte Datei. Sie können Sie mit einem Spieler wie <application +>kaiman</application +> abspielen. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><filename +>example_data.arts</filename +></term> +<listitem> +<para +>Mit einem Data-Modul wird ein konstanter Strom mit dem Wert <quote +>3</quote +> erzeugt und für die periodische Anzeige an ein Debug-Modul gesendet. Das Beispiel enthält weiterhin ein Nil-Modul, das demonstriert, wie man eine Struktur erzeugt, die gar nichts tut. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><filename +>example_adsr.arts</filename +></term> +<listitem> +<para +>Demonstriert, wie man mit dem Envelope-Adsr-Modul einen einfachen Instrumentenklang erzeugt, der durch eine Rechteckschwingung geschaltet wird. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><filename +>example_fm.arts</filename +></term> +<listitem> +<para +>Ein FM-Quellmodul erzeugt einen 440Hz-Sinuston, der dann mit 5 Hz frequenzmoduliert wird. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><filename +>example_freeverb.arts</filename +></term> +<listitem> +<para +>Verbindet den Freeverb-Effekt von einem Bus downlink zu einem Bus outlink. Sie können mit artscontrol diesen Effekt mit einem Spieler verbinden und sich das Resultat anhören. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><filename +>example_flanger.arts</filename +></term> +<listitem> +<para +>Implementiert einen einfachen Flanger-Effekt (scheint bisher nicht zu funktionieren). </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><filename +>example_moog.arts</filename +></term> +<listitem> +<para +>Diese Struktur kombiniert zwei Kanäle von einem Bus, schickt das Signal durch einen Moog-VCF-Filter und das Ergebnis auf den out_soundcard-Bus. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><filename +>example_pitch_shift.arts</filename +></term> +<listitem> +<para +>Diese Struktur schickt den linken Kanal von Soundkartendaten durch einen Höhenverschiebungseffekt (pitch shift). Mit dem Speed-Parameter kann der Effekt modifiziert werden. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><filename +>example_rc.arts</filename +></term> +<listitem> +<para +>Diese Struktur sendet weißen Lärm durch einen RC-Filter und dann an die Soundkarte. Betrachten Sie das Ergebnis in der FFT-Anzeige von artscontrol, um den Unterschied zu ungefiltertem Lärm zu sehen. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><filename +>example_sequence.arts</filename +></term> +<listitem> +<para +>Demonstriert die Verwendung des Sequencer-Moduls durch das Abspielen einer Notensequenz. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><filename +>example_shelve_cutoff.arts</filename +></term> +<listitem> +<para +>Diese Struktur schickt weißen Lärm durch einen Shelve-Cutoff-Filter und dann an die Soundkarte. Das Ergebnis können Sie in der FFT-Anzeige von artscontrol betrachten. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><filename +>example_equalizer.arts</filename +></term> +<listitem> +<para +>Demonstriert das Std_Equalizer-Modul. Es hebt die Höhen und Tiefen um 6dB an. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><filename +>example_tremolo.arts</filename +></term> +<listitem> +<para +>Demonstriert den Tremolo-Effekt. Der rechte und linke Kanal werden mit einem 10Hz-Tremolo moduliert. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><filename +>example_xfade.arts</filename +></term> +<listitem> +<para +>Dieses Beispiel mixt einen 440Hz- und einen 880Hz-Sinuston mit einem "cross fader". Verändern Sie die Prozentanzeige von -1 bis 1, um die Mischung der zwei Signale zu beeinflussen. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><filename +>example_pscale.arts</filename +></term> +<listitem> +<para +>Demonstriert das Pscale-Modul (ich zweifle, dass dieses Beipiel aussagekräftig ist). </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><filename +>example_play_wav.arts</filename +></term> +<listitem> +<para +>Illustriert das Play_Wave-Modul. Sie müssen den kompletten Pfad zur <literal role="extension" +>wav</literal +>-Datei als Parameter filename angeben. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>example_multi_add.arts</term> +<listitem> +<para +>Zeigt, wie das Multi_Add-Modul eine beliebige Anzahl Eingangssignale aufsummiert. Drei Eingänge mit den Werten 1,2 und 3 erzeugen den Ausgangswert 6. </para> +</listitem> +</varlistentry> +</variablelist> + +</sect1> +</chapter> diff --git a/tde-i18n-de/docs/tdemultimedia/artsbuilder/detail.docbook b/tde-i18n-de/docs/tdemultimedia/artsbuilder/detail.docbook new file mode 100644 index 00000000000..69cd2931360 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/artsbuilder/detail.docbook @@ -0,0 +1,1340 @@ +<!-- <?xml version="1.0" ?> +<!DOCTYPE chapter PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.1//EN" "dtd/kdex.dtd"> +To validate or process this file as a standalone document, uncomment +this prolog. Be sure to comment it out again when you are done --> + +<chapter id="arts-in-detail"> +<title +>Details zu &arts;</title> + +<sect1 id="architecture"> +<title +>Architektur</title> + +<mediaobject +> <imageobject +> <imagedata fileref="arts-structure.png" format="PNG"/> </imageobject +> <textobject +><phrase +>Die Struktur von &arts;.</phrase +></textobject +> </mediaobject> +</sect1> + +<sect1 id="modules-ports"> +<title +>Module & Kanäle</title> + +<para +> &arts; beruht auf einem Synthesemodell, bei dem aus kleinen Modulen, die jedes für sich eine spezialisierte Aufgabe haben, komplexe Strukturen aufgebaut werden. Die Module haben normalerweise Eingänge, über die Signale und Parameter übergeben werden, und Ausgänge, an denen die Ergebnissignale anliegen. </para> + +<para +> Das Modul Synth_ADD zum Beispiel addiert die zwei Eingangssignal zu einem Summensignal, das als Ausgangssignal verfügbar ist. Die Stellen, mit denen die Ein-/Ausgangssignale verbunden werden heißen Kanäle (ports). </para> + +</sect1> + +<sect1 id="structures"> +<title +>Strukturen</title> + +<para +> Eine Struktur besteht aus mehreren verbundenen Modulen, bei denen einige Kanäle feste Parameter haben, andere untereinander verbunden sind während einige Kanäle vielleicht gar nicht verbunden sind. </para> + +<para +> &arts-builder; dient zur Beschreibung dieser Strukturen. Sie beschreiben, welche Module in welcher Weise verbunden werden sollen. Wenn Sie damit fertig sind, können Sie die Beschreibung speichern oder &arts; zu der Erzeugung der Struktur veranlassen (Struktur ausführen). </para> + +<para +> Als Ergebnis hören Sie wahrscheinlich einige Klänge, falls nichts schiefgegangen ist. </para> +</sect1> + +<!-- TODO + +<sect1 id="streams"> +<title +>Streams</title> +<para> +</para> +</sect1> + +--> + +<sect1 id="latency"> +<title +>Aussetzer</title> + +<sect2 id="what-islatency"> +<title +>Was bedeutet Verzögerung?</title> + +<para +> Angenommen Sie haben ein Programm mit Namen <quote +>Mausklick</quote +>, das ein <quote +>Klicken</quote +> von sich geben soll, wenn Sie eine Maustaste betätigen. Die Verzögerungszeit ist die Zeit zwischen dem Betätigen der Maustaste und dem Ertönen des Klicken. Die Einstellung der Verzögerungszeit besteht aus mehreren Verzögerungszeiten, die unterschiedliche Ursachen haben. </para> + +</sect2> + +<sect2 id="latenbcy-simple"> +<title +>Verzögerungszeit in einfachen Anwendungen</title> + +<para +> In dieser einfachen Anwendung werden an folgenden Stellen Verzögerungen verursacht: </para> + +<itemizedlist +> <listitem +> <para +> Zeit, die der Betriebssystemkern benötigt, um dem X11-Server den Mausklick mitzuteilen. </para +> </listitem +> <listitem +> <para +> Zeit, die der X11-Server benötigt, um der Anwendung den Mausklick mitzuteilen. </para +> </listitem +> <listitem +> <para +> Zeit, die die Anwendung benötigt, um aufgrund des Mausklicks einen Klick-Ton auszulösen. </para +> </listitem +> <listitem +> <para +> Zeit, die die Anwendung benötigt, um dem Soundserver den Befehl zum Klick-Ton zu geben. </para +> </listitem +> <listitem +> <para +> Zeit, die der Klick-Ton benötigt (den der Soundserver sofort in den Ausgabestrom einmischt), um den Datenpuffer zu passieren, bis er die Stelle erreicht, an der die Soundkarte gerade Daten wiedergibt. </para +> </listitem +> <listitem +> <para +> Zeit, die der Klick-Ton von den Lautsprechern bis zu Ihrem Ohr benötigt. </para +> </listitem +> </itemizedlist> + +<para +> Die ersten drei Verzögerungszeiten sind extern für &arts;. Sie sind wichtig, aber nicht Gegenstand dieser Dokumentation. Sie sollten sich dennoch dieser Verzögerungen bewusst sein, denn selbst wenn Sie alle anderen Verzögerungen sehr gering halten, erhalten Sie vielleicht dennoch nicht exakt die erwarteten Resultate. </para> + +<para +> Ein Spielbefehl an den Server besteht normalerweise aus einem &MCOP;-Funktionsaufruf. Es gibt Geschwindigkeitstests,die belegen, dass ein solcher Befehl auf einem Rechner bei der jetzigen Implementation etwa 9000 mal pro Sekunde ausgeführt werden kann. Ich denke, das meiste der Zeit wird Kernel-Overhead für die Umschaltung zwischen verschiedenen Anwendungen sein. Natürlich hängen diese Werte von den exakten Parametertypen des Aufrufs ab. Die Übergabe eines vollständigen Bildes in einem Aufruf dauert länger als die Übergabe eines einzigen Werte. Das Gleiche gilt für den Rückgabewert. Für normale Zeichenketten (wie der Dateiname der zu spielenden <literal role="extension" +>wav</literal +>-Datei) sollte das aber kein Problem darstellen. </para> + +<para +> Das bedeutet, diese Zeit kann mit 1/9000 Sekunde abgeschätzt werden. Das ist weniger als 0,15 ms. Sie werden sehen, das diese Zeitspanne unwichtig ist. </para> + +<para +> Die nächste Verzögerungszeit ist die Zeit vom Starten des Soundservers und der Ankunft dieses Beginns auf der Soundkarte. Der Server muss einen Puffer verwenden, damit man keine Aussetzer hört, wenn eine andere Anwendung wie der X11-Server oder das <quote +>Mausklick</quote +>-Programm aktiv sind. Das wird unter &Linux; verwirklicht, indem eine Anzahl Bruchstücke einer bestimmte Größe erzeugt werden. Der Server füllt die Bruchstücke und die Soundkarte spielt die Bruchstücke ab. </para> + +<para +> Angenommen es gibt drei Bruchstücke. Der Server füllt das Erste, die Soundkarte beginnt mit dem Abspielen. Der Server füllt das Zweite. Der Server füllt das Dritte. Der Server ist fertig, andere Anwendungen können nun aktiviert werden. </para> + +<para +> Nach dem ersten Bruchstück spielt die Soundkarte das Zweite ab und der Server füllt das erste Bruchstück wieder. Das geht immer so weiter. </para> + +<para +> Damit ergibt sich eine maximale Verzögerungszeit von (Anzahl der Bruchstücke)*(Größe eines Bruchstückes)/(Samplingrate * (Größe eines Samples)). Bei 44kHz Stereo und 7 Bruchstücken von je 1024 Byte Größe (die aktuellen Standardwerte von aRts) entspricht das einer Verzögerungszeit von 40 ms. </para> + +<para +> Diese Werte können Sie Ihren Anforderungen anpassen. Allerdings steigt die <acronym +>CPU</acronym +>-Belastung mit kleineren Verzögerungszeiten, da der Soundserver die Puffer häufiger und in kleineren Bruchstücken füllen muss. Es ist außerdem meistens unmöglich, bessere Werte zu erreichen, ohne das Aussetzer zu hören sind, es sei denn, sie versehen den Soundserver mit Echtzeit-Priorität. </para> + +<para +> Dennoch ist eine Einstellung von 3 Bruchstücken mit je 256 Bytes, die einer Verzögerung von 4,4 ms entsprechen, realistisch. Mit 4,4 ms Verzögerungszeit belastet &arts; die <acronym +>CPU</acronym +> im Ruhezustand mit 7,5%. Mit einer Verzögerung von 40 ms beträgt die Belastung etwa 3% (bei einem PII-350, diese Werte können abhängig von der Soundkarte, Kernel-Version und anderen Faktoren variieren). </para> + +<para +> Jetzt zu der Zeit, die der Klick-Ton von den Lautsprechern bis zum Ohr benötigt. Bei einer angenommenen Distanz von 2 Metern ergibt sich bei einer Schallgeschwindigkeit von 330 Meter pro Sekunde eine Verzögerung von etwa 6 ms. </para> + +</sect2> + +<sect2 id="latency-streaming"> +<title +>Verzögerungszeit in Streaming-Anwendungen</title> + +<para +> Streaming-Anwendungen produzieren ihre Klänge selbst. Angenommen, ein Spiel, das einen konstanten Strom von Samples erzeugt, soll nun für die Wiedergabe durch &arts; verwendet werden. Als Beispiel: Wenn ich eine Taste drücke, hüpft die Spielfigur und es ertönt ein Boing-Klang. </para> + +<para +> Als Erstes muss man wissen, wie &arts; Streaming realisiert. Der Ablauf ist ähnlich wie bei der Ausgabe auf einer Soundkarte. Das Spiel sendet einige Pakete mit Samples zum Soundserver. Angenommen, es sinc drei Pakete. Sobald der Soundserver das erste Paket wiedergegeben hat, schickt er eine Bestätigung zurück zum Spiel. </para> + +<para +> Das Spiel erzeugt ein neues Paket und schickt es zum Server. Währenddessen verarbeitet der Server das zweite Paket und so weiter. Die Verzögerungszeiten hier sind ähnlich wie bei dem einfachen Beispiel: </para> + +<itemizedlist +> <listitem +> <para +> Zeit, bis der Betriebssystemkern dem X11-Server den Tastendruck mitgeteilt hat. </para +> </listitem +> <listitem +> <para +> Zeit, bis der X11-Server dem Spiel den Tastendruck mitgeteilt hat. </para +> </listitem +> <listitem +> <para +> Zeit, bis das Spiel entschieden hat, das aufgrund des Tastendrucks ein Boing-Ton auszugeben ist. </para +> </listitem +> <listitem +> <para +> Zeit, bis das Paket mit dem Anfang des Boing-Tons den Soundserver erreicht hat. </para +> </listitem +> <listitem +> <para +> Zeit, bis der Boing-Ton (den der Soundserver sofort in die Ausgabe einmischt) den Datenpuffer passiert hat bis zu der Stelle, an der die Soundkarte gerade wiedergibt. </para +> </listitem +> <listitem +> <para +> Zeit, die der Boing-Ton von den Lautsprechern bis zum Ohr benötigt. </para +> </listitem +> </itemizedlist> + +<para +> Die externen Verzögerungen sind gehen wiederum über den Inhalt dieses Dokumentes hinaus. </para> + +<para +> Offensichtlich hängt die Streaming-Verzögerung von der Zeit ab, die alle Pakete benötigen, einmal wiedergegeben zu werden. Also ist diese Zeit (Anzahl der Pakete)*(Größe eines Paketes)/(Samplingrate * (Größe eines Samples)) </para> + +<para +> Wie man sieht, ist das die gleiche Formel, wie sie bei den Bruchstücken verwandt wird. Für Spiele sind solch geringer Verzögerungszeiten wie oben überflüssig. Eine realistische Festlegung für Spiekle wären 2046 Bytes pro Paket bei drei Paketen. Die resultierende Verzögerung ist dann etwa 35 ms. </para> + +<para +> Diese Berechnung basiert auf folgenden Annahmen: das Spiel rendert 25 Bilder pro Sekunde (für die Anzeige). Einen Verschiebung zwischen Ton und Film von einem Bild nimmt man nicht wahr. Daher ist eine Verzögerung von 1/25 Sekunde für Streaming akzeptabel, was wiederum bedeutet, das 40ms in Ordnung sind. </para> + +<para +> Außerdem werden die meisten Leute ihre Spiele nicht mit Echtzeit-Priorität spielen und daher ist die Gefahr von Aussetzern nicht zu vernachlässigen. Bei 3 Paketen je 256 Bytes ist Streaming möglich (nach eigenen Tests) - es verbraucht aber eine Menge <acronym +>CPU</acronym +>-Zeit. </para> + +<para +> Für die Serververzögerungszeiten können Sie genau wie oben rechnen. </para> + +</sect2> + +<sect2 id="cpu-usage"> +<title +>Einige Überlegungen zu <acronym +>CPU</acronym +>-Zeit</title> + +<para +> Es gibt eine Menge Faktoren, die in komplexen Situationen mit einigen Streaming-Anwendungen und einigen Anderen sowie einigen Plugins auf dem Server einen Einfluß auf die <acronym +>CPU</acronym +>-Zeit haben. Um einige zu nennen: </para> + +<itemizedlist +> <listitem +> <para +> <acronym +>CPU</acronym +>-Zeit für die notwendigen Berechnungen. </para +> </listitem +> <listitem +> <para +> &arts; interner Scheduler-Aufwand - wie &arts; entscheidet, wann welches Modul was berechnen soll. </para +> </listitem +> <listitem +> <para +> Aufwand zur Konvertierung von Ganzzahlen in Kommazahlen. </para +> </listitem +> <listitem +> <para +> &MCOP;-Protokoll-Aufwand. </para +> </listitem +> <listitem +> <para +> Kernel: Prozeß-/Kontextumschaltung. </para +> </listitem +> <listitem +> <para +> Kernel: Kommunikationsaufwand. </para +> </listitem +> </itemizedlist> + +<para +> Für die <acronym +>CPU</acronym +>-Berechnungszeit bei zwei gleichzeitig abgespielten Datenströmen muss man Additionen durchführen. Falls man einen Filter verwendet, sind einige weitere Berechnungen notwendig. Ein einfaches Beispiel mit zwei Strömen mit vier <acronym +>CPU</acronym +>-Zyklen pro Addition führen auf einem 350MHz-Prozessor zu 44100*2*4/350000000 = 0,1% <acronym +>CPU</acronym +>-Auslastung. </para> + +<para +> &arts; internes Scheduling: &arts; muss bestimmen, welches Plugin wann was berechnet. Das benötigt Zeit. Wenn man Genaueres wissen will, sollte man einen Profiler zu Rate ziehen. Generell lässt sich Folgendes sagen: je weniger Wert man auf Echtzeit legt (also je größer die zu berechnenden Blöcke sind) um so wenig Scheduling Zeit wird benötigt. Bei mehr als 128 Samples in einem Stück (also einer Bruchstückgröße von 512 Bytes) ist der Scheduling-Aufwand wahrscheinlich nicht einmal nennenswert. </para> + +<para +> Aufwand zur Konvertierung von Ganzzahlen in Kommazahlen: &arts; verwendet intern Kommazahlen als Datenformat. Sie sind einfach zu verarbeiten und auf zeitgemäßen Prozessoren kaum langsamer als Ganzzahlen. Wenn aber Programme ihre Daten nicht in Kommazahlen abspielen (wie ein Spiel, das seine Känge über &arts; ausgibt), müssen diese Daten konvertiert werden. Das Gleiche gilt für die Ausgabe auf einer Soundkarte. Soundkarten benötigen Ganzzahlen, also muss eine Konvertierung durchgeführt werden. </para> + +<para +> Die folgenden Zahlen gehören zu einem Celeron, ungefähre ticks pro Sample, mit -O2 +egcs 2.91.66 (berechnet von Eugene Smith <email +>[email protected]</email +>). Diese Zahlen sind naturgemäß sehr prozessorabhängig. </para> + +<programlisting> +convert_mono_8_float: 14 +convert_stereo_i8_2float: 28 +convert_mono_16le_float: 40 +interpolate_mono_16le_float: 200 +convert_stereo_i16le_2float: 80 +convert_mono_float_16le: 80 +</programlisting> + +<para +> Das bedeutet 1% <acronym +>CPU</acronym +>-Zeit für die Konvertierung und 5% für die Interpolation auf diesem 350 MHz-Prozessor. </para> + +<para +> &MCOP; Protokoll-Aufwand: &MCOP; verträgt ungefähr 9000 Aufrufe pro Sekunde. Das hat wenige mit &MCOP; als mit den zwei Kernelgründen zu tun, die weiter unten beschrieben werden. Dennoch gibt das einen Anhaltspunkt für die Berechnung der Kosten von Streaming. </para> + +<para +> Jedes übertragene Datenpaket erfordert einen &MCOP;-Aufruf. Natürlich ist das nur ein Richtwert, da große Pakete langsamer als 9000 Pakete/s sind. </para> + +<para +> Angenommen man verwendet als Paketgröße 1024 Bytes. Für einen Stream mit 44kHz Stereo muss man also 44100*4/1024 = 172 Pakete pro Sekunde übertragen. Weiter angenommen, 9000 Pakete pro Sekunde entspricht einer <acronym +>CPU</acronym +>-Auslastung von 100%, dann erhält man (172*100)/9000 = 2% <acronym +>CPU</acronym +>-Auslastung bei einem Streaming mit 1024 Bytes pro Paket. </para> + +<para +> Das sind nur Näherungen. Sie zeigen aber deutlich, dass man viel besser dran ist (wenn man die Verzögerungszeit tolerieren kann) mit einer Paketgröße von 4096 Bytes. Wir können eine kompakte Rechnung durchführen, wenn wir die Paketgröße für 100% <acronym +>CPU</acronym +>-Auslastung berechnen mit 44100*4/9000 = 19,6 Samples; daraus erhalten wir folgende Formel: </para> + +<para +> Streaming <acronym +>CPU</acronym +>-Auslastung in Prozent = 1960/(Paketgröße) </para> + +<para +> das ergibt 0,5% <acronym +>CPU</acronym +>-Auslastung bei Streaming mit einer Paketgröße von 4096 Bytes. </para> + +<para +> Kernel Prozeß-/Kontextumschaltung: dieser Aufwand ist ein Teil des &MCOP;-Protokolls. Die Umschaltung zwischen zwei Prozessen benötigt Zeit. Es wird der Speicher neu aufgeteilt, der Cache wird ungültig, und vieles mehr (falls ein Kernel-Experte dieses liest - teilen Sie mir bitte die genauen Gründe mit). Das bedeutet: es benötigt Zeit. </para> + +<para +> Ich weiß nicht wie viele Kontextwechsel Linux verträgt, aber sicher nur eine endliche Zahl. Daher nehme ich an, das ein erheblicher Teil des &MCOP; Protokollaufwandes durch Kontextumschaltung zu Stande kommt. Ich führte einige Tests mit &MCOP;-Kommunikation innerhalb eines Prozesses durch. Sie war wesentlich schneller (etwa viermal so schnell). </para> + +<para +> Kernel: Kommunikationsaufwand: Das ist ebenfalls ein Bestandteil des &MCOP; Protokollaufwandes. Die Datenübertragung zwischen Prozessen wird momentan mittels Sockets durchgeführt. Das ist praktisch, da die üblichen select()-Methoden verwendet werden können, um die Ankunft einer Nachricht zu überprüfen. Das kann leicht mit anderen Ein-/Ausgabequellen wie Audio Ein-/Ausgabe, X11-Server-Kommunikation und einigem Anderen kombiniert werden. </para> + +<para +> Diese Lese- und Schreibaufrufe kosten mit Sicherheit Prozessorzeit. Kleine Aufrufe (um ein Midi-Ereignis zu übertragen) sind vermutlich nicht so schlimm, große Aufrufe (z.B. um ein Videobild mit einigen Megabytes zu übertragen) stellen sicherlich ein Problem dar. </para> + +<para +> In &MCOP; sollte daher möglichst gemeinsam genutzter Speicher verwendet werden. Das sollte aber keine Änderungen für die Anwendungsprogrammierer mit sich bringen. </para> + +<para +> Durch einen Profiler kann man herausbekommen, in welchem Maße genau heutiges Audio Streaming unter der Nichtverwendung von gemeinsam genutztem Speicher leidet. Da Audio Streaming mit &artsd; und <application +>artscat</application +> mit 6% <acronym +>CPU</acronym +>-Auslastung (Wiedergabe von mp3) durchgeführt werden kann (und 5% für den mp3-Dekoder), kann es nicht so schlimm sein. Das enthält alles einschließlich der notwendigen Berechnungen und dem Socket-Aufwand, daher vermute ich, durch gemeinsam genutzten Speicher könnten vielleicht 1% <acronym +>CPU</acronym +>-Auslastung gespart werden. </para> + +</sect2> + +<sect2 id="hard-numbers"> +<title +>Einige genaue Zahlen</title> + +<para +> Diese Zahlen wurden mit der aktuellen CVS-Version ermittelt. Außerdem wollte ich Grenzfälle testen, also sind das Fälle, die in normalen Anwendungen nicht auftreten sollten. </para> + +<para +> Ich habe ein Programm namens streamsound geschrieben, das Streaming Daten an &arts; sendet. Die Anwendung läuft hier mit Echtzeit-Priorität (ohne Probleme) und einem kleinen Plugin (für Lauststärkeskalierung und Clipping) auf seiten des Servers: </para> + +<programlisting> + 4974 stefan 20 0 2360 2360 1784 S 0 17.7 1.8 0:21 artsd + 5016 stefan 20 0 2208 2208 1684 S 0 7.2 1.7 0:02 streamsound + 5002 stefan 20 0 2208 2208 1684 S 0 6.8 1.7 0:07 streamsound + 4997 stefan 20 0 2208 2208 1684 S 0 6.6 1.7 0:07 streamsound +</programlisting> + +<para +> Das Streaming wird jeweils mit 3 Bruchstücken je 1024 Bytes (18 ms) durchgeführt. Drei Programme laufen gleichzeitig. Das scheint ein bisschen zu viel zu sein; mit einem Profiler kann man versuchen, den Aufwand zu verbessern. </para> + +<para +> Das ist ein nicht realistisches Testbeispiel. Als weiteren Test wurde versucht, die minimal mögliche Verzögerungszeit herauszufinden. Resultat: man kann Streaming ohne Unterbrechungen mit einem Anwendungsprogramm bei zwei Bruchstücken je 128 Bytes zwischen &arts; und der Soundkarte sowie zwischen der Anwendung und &arts; durchführen. Das entspricht einer maximalen Verzögerung von 128*4/44100*4 = 3 ms, wobei 1,5 ms von der Soundkarte und 1,5 ms durch die Kommunikation mit &arts; entstehen. Beide Anwendungen benötigen Echtzeit-Priorität. </para> + +<para +> Das benötigt allerdings einen erheblichen Anteil der <acronym +>CPU</acronym +>. Das Beispiel liegt bei etwa 45% auf meinem P-II/350. Es wird ein Klicken hörbar, wenn man Fenster in X11 bewegt oder Festplattenaktivität verursacht. Das hängt mit dem Kernel zusammen. Das Problem ist, das zwei Echtzeitanwendungen einen erheblichen Aufwand verursachen, mehr noch, wenn Sie auch noch miteinander kommunizieren. </para> + +<para +> Schließlich ein realistischeres Beispiel. Es besteht aus &arts; mit artsd und einem artscat (ein Streaming Programm) bei 16 Bruchstücken mit je 4096 Bytes: </para> + +<programlisting> + 5548 stefan 12 0 2364 2364 1752 R 0 4.9 1.8 0:03 artsd + 5554 stefan 3 0 752 752 572 R 0 0.7 0.5 0:00 top + 5550 stefan 2 0 2280 2280 1696 S 0 0.5 1.7 0:00 artscat +</programlisting> + +</sect2> +</sect1> + +<!-- TODO + +<sect1 id="dynamic-instantiation"> +<title +>Dynamic Instantiation</title> +<para> +</para> +</sect1> + +--> + +<sect1 id="busses"> +<title +>Busse</title> + +<para +> Busse sind dynamisch erzeugte Verbindungen zum Transport von Audiosignalen. Grundlegend werden alle Signale von Uplinks addiert und an die Downlinks weitergeleitet. </para> + +<para +> Busse existieren momentan nur in Stereo. Wenn Sie Mono-Daten transportieren wollen, senden Sie sie über einen Kanal und setzen Sie den anderen auf Null. Zur Verwendung erstellen Sie einen oder mehrere Synth_BUS_UPLINK-Module und benennen Sie sie mit dem Busnamen, auf dem Sie senden sollen (z.B. <quote +>audio</quote +> oder <quote +>drums</quote +>). Dann senden Sie die Daten an diese Uplinks. </para> + +<para +> Auf der anderen Seite benötigen Sie einen oder mehrere Synth_BUS_DOWNLINK-Module, denen Sie die gleichen Busnamen geben (also <quote +>audio</quote +> oder <quote +>drums</quote +> ... gleiche Busnamen werden verbunden). Über diese Busenden erscheinen die gesendeten Signale wieder in einer Struktur. </para> + +<para +> Die Uplinks und Downlinks können zu unterschiedlichen Strukturen gehören. Sie können sogar zwei Instanzen von &arts-builder; verwenden und in einer davon einen Uplink und in der Anderen den passenden Downlink haben. </para> + +<para +> Eine besondere Eigenschaft ist die Dynamik dieser Verbindungen. Teile können sich jederzeit ein- oder ausklinken; das sollte kein Klicken oder andere Geräusche verursachen. </para> + +<para +> Natürlich sollte kein Teil ausgeklinkt werden, während sein Signalpegel höher als Null ist, da sonst natürlich ein Klicken zu hören sein wird. </para> +</sect1> + +<!-- TODO +<sect1 id="network-ransparency"> +<title +>Network Transparency</title> +<para> +</para> +</sect1> + +<sect1 id="security"> +<title +>Security</title> +<para> +</para> +</sect1> + + +<sect1 id="effects"> +<title +>Effects and Effect Stacks</title> +<para> +</para> +</sect1> + +--> +<sect1 id="trader"> +<title +>Trader</title> + +<para +> &arts;/&MCOP; basiert sehr auf der Aufteilung von Aufgaben in kleine Komponenten. Das System wird dadurch sehr flexibel, da man das System auf einfache Weise durch das Hinzufügen neuer Komponenten, die neue Effekte, Dateiformate, Oszillatoren, GUI-Elemente, ... bereitstellen, erweitert werden kann. Da beinahe alles als Komponente programmiert ist, kann beinahe alles einfach erweitert werden, ohne die existierenden Quellen zu verändern. Neue Komponenten, die das System erweitern, werden einfach dynamisch geladen. </para> + +<para +> Für einen reibungslosen Ablauf sind zwei Dinge erforderlich: </para> + +<itemizedlist +> <listitem +> <para +> Komponenten müssen sich bekannt machen - sie müssen ihre Funktionen beschreiben, damit andere Programme sie verwenden können. </para +> </listitem +> <listitem +> <para +> Anwendungen müssen aktiv nach verwendbaren Komponenten suchen, anstatt immer die gleichen DInge für eine Aufgabe zu verwenden. </para +> </listitem +> </itemizedlist> + +<para +> Die Kombination davon: Komponenten, die sagen: <quote +>Hier bin ich, verwende mich</quote +>, und Anwendungen (oder, wenn man so will, andere Komponenten), die nach verwendbaren Komponenten suchen, um eine Aufgabe zu erledigen, nennt man Handel. </para> + +<para +> In &arts; beschreiben Komponenten sich selbst, indem sie Werte festlegen, die sie als Eigenschaften <quote +>unterstützen</quote +>. Eine typische Eigenschaft einer Komponente zum Laden einer Datei könnte die Dateinamenerweiterung sein, die sie verarbeiten kann. Typische Werte könnten <literal role="extension" +>wav</literal +>, <literal role="extension" +>aiff</literal +> oder <literal role="extension" +>mp3</literal +> sein. </para> + +<para +> Jede Komponente kann viele verschiedene Werte für eine Eigenschaft anbieten. Eine einzige Komponente kann somit sowohl das Einlesen von <literal role="extension" +>wav</literal +> als auch <literal role="extension" +>aiff</literal +>-Dateien anbieten, indem sie diese Werte für die Eigenschaft <quote +>Extension</quote +> angibt. </para> + +<para +> Um das durchzuführen, muss die Komponente eine <literal role="extension" +>.mcopclass</literal +>-Datei an geeigneter Stelle platzieren, in der sie die unterstützten Eigenschaften festlegt. Eine solche Datei könnte folgendermaßen aussehen (und würde in <filename +><replaceable +>componentdir</replaceable +>/Arts/WavPlayObject.mcopclass</filename +> installiert): </para> + +<programlisting> +Interface=Arts::WavPlayObject,Arts::PlayObject,Arts::SynthModule,Arts::Object +Author="Stefan Westerfeld <[email protected]>" +URL="http://www.arts-project.org" +Extension=wav,aiff +MimeType=audio/x-wav,audio/x-aiff +</programlisting> + +<para +> It is important that the filename of the <literal role="extension" +>.mcopclass</literal +>-file also says what the interface of the component is called like. The trader doesn't look at the contents at all, if the file (like here) is called <filename +>Arts/WavPlayObject.mcopclass</filename +>, the component interface is called <interfacename +>Arts::WavPlayObject</interfacename +> (modules map to directories). </para> + +<para +> To look for components, there are two interfaces (which are defined in <filename +>core.idl</filename +>, so you have them in every application), called <interfacename +>Arts::TraderQuery</interfacename +> and <interfacename +>Arts::TraderOffer</interfacename +>. You to go on a <quote +>shopping tour</quote +> for components like this: </para> + +<orderedlist +> <listitem +> <para +> Create a query object: </para +> <programlisting> + Arts::TraderQuery query; +</programlisting +> </listitem +> <listitem +> <para +> Specify what you want. As you saw above, components describe themselves using properties, for which they offer certain values. So specifying what you want is done by selecting components that support a certain value for a property. This is done using the supports method of a TraderQuery: </para +> <programlisting> + query.supports("Interface","Arts::PlayObject"); + query.supports("Extension","wav"); +</programlisting +> </listitem +> <listitem +> <para +> Finally, perform the query using the query method. Then, you'll (hopefully) get some offers: </para +> <programlisting> + vector<Arts::TraderOffer> *offers = query.query(); +</programlisting +> </listitem +> <listitem +> <para +> Now you can examine what you found. Important is the interfaceName method of TraderOffer, which will tell you the name of the component, that matched the query. You can also find out further properties by getProperty. The following code will simply iterate through all components, print their interface names (which could be used for creation), and delete the results of the query again: </para +> <programlisting> + vector<Arts::TraderOffer>::iterator i; + for(i = offers->begin(); i != offers->end(); i++) + cout << i->interfaceName() << endl; + delete offers; +</programlisting +> </listitem +> </orderedlist> + +<para +> For this kind of trading service to be useful, it is important to somehow agree on what kinds of properties components should usually define. It is essential that more or less all components in a certain area use the same set of properties to describe themselves (and the same set of values where applicable), so that applications (or other components) will be able to find them. </para> + +<para +> Author (type string, optional): This can be used to ultimately let the world know that you wrote something. You can write anything you like in here, e-mail adress is of course helpful. </para> + +<para +> Buildable (type boolean, recommended): This indicates whether the component is usable with <acronym +>RAD</acronym +> tools (such as &arts-builder;) which use components by assigning properties and connecting ports. It is recommended to set this value to true for almost any signal processing component (such as filters, effects, oscillators, ...), and for all other things which can be used in <acronym +>RAD</acronym +> like fashion, but not for internal stuff like for instance <interfacename +>Arts::InterfaceRepo</interfacename +>. </para> + +<para +> Extension (type string, used where relevant): Everything dealing with files should consider using this. You should put the lowercase version of the file extension without the <quote +>.</quote +> here, so something like <userinput +>wav</userinput +> should be fine. </para> + +<para +> Interface (type string, required): This should include the full list of (useful) interfaces your components supports, probably including <interfacename +>Arts::Object</interfacename +> and if applicable <interfacename +>Arts::SynthModule</interfacename +>. </para> + +<para +> Language (type string, recommended): If you want your component to be dynamically loaded, you need to specify the language here. Currently, the only allowed value is <userinput +>C++</userinput +>, which means the component was written using the normal C++ <acronym +>API</acronym +>. If you do so, you'll also need to set the <quote +>Library</quote +> property below. </para> + +<para +> Library (type string, used where relevant): Components written in C++ can be dynamically loaded. To do so, you have to compile them into a dynamically loadable libtool (<literal role="extension" +>.la</literal +>) module. Here, you can specify the name of the <literal role="extension" +>.la</literal +>-File that contains your component. Remember to use REGISTER_IMPLEMENTATION (as always). </para> + +<para +> MimeType (type string, used where relevant): Everything dealing with files should consider using this. You should put the lowercase version of the standard mimetype here, for instance <userinput +>audio/x-wav</userinput +>. </para> + +<para +> &URL; (type string, optional): If you like to let people know where they can find a new version of the component (or a homepage or anything), you can do it here. This should be standard &HTTP; or &FTP; &URL;. </para> + +</sect1> + +<!-- TODO +<sect1 id="midi-synthesis"> +<title +><acronym +>MIDI</acronym +> Synthesis</title> +<para> +</para> +</sect1> + +<sect1 id="instruments"> +<title +>Instruments</title> +<para> +</para> +</sect1> + +<sect1 id="session-management"> +<title +>Session Management</title> +<para> +</para> +</sect1> + +<sect1 id="full-duplex"> +<title +>Full duplex Audio</title> +<para> +</para> +</sect1> +--> + +<sect1 id="namespaces"> +<title +>Namespaces in &arts;</title> + +<sect2 id="namespaces-intro"> +<title +>Einleitung</title> + +<para +> Each namespace declaration corresponds to a <quote +>module</quote +> declaration in the &MCOP; &IDL;. </para> + +<programlisting> +// mcop idl + +module M { + interface A + { + } +}; + +interface B; +</programlisting> + +<para +> In this case, the generated C++ code for the &IDL; snippet would look like this: </para> + +<programlisting> +// C++ header + +namespace M { + /* declaration of A_base/A_skel/A_stub and similar */ + class A { // Smartwrapped reference class + /* [...] */ + }; +} + +/* declaration of B_base/B_skel/B_stub and similar */ +class B { + /* [...] */ +}; +</programlisting> + +<para +> So when referring the classes from the above example in your C++ code, you would have to write <classname +>M::A</classname +>, but only B. However, you can of course use <quote +>using M</quote +> somewhere - like with any namespace in C++. </para> + +</sect2> + +<sect2 id="namespaces-how"> +<title +>How &arts; uses namespaces</title> + +<para +> There is one global namespace called <quote +>Arts</quote +>, which all programs and libraries that belong to &arts; itself use to put their declarations in. This means, that when writing C++ code that depends on &arts;, you normally have to prefix every class you use with <classname +>Arts::</classname +>, like this: </para> + +<programlisting> +int main(int argc, char **argv) +{ + Arts::Dispatcher dispatcher; + Arts::SimpleSoundServer server(Arts::Reference("global:Arts_SimpleSoundServer")); + + server.play("/var/foo/somefile.wav"); +</programlisting> + +<para +> The other alternative is to write a using once, like this: </para> + +<programlisting> +using namespace Arts; + +int main(int argc, char **argv) +{ + Dispatcher dispatcher; + SimpleSoundServer server(Reference("global:Arts_SimpleSoundServer")); + + server.play("/var/foo/somefile.wav"); + [...] +</programlisting> + +<para +> In &IDL; files, you don't exactly have a choice. If you are writing code that belongs to &arts; itself, you'll have to put it into module &arts;. </para> + +<programlisting> +// IDL File for aRts code: +#include <artsflow.idl> +module Arts { // put it into the Arts namespace + interface Synth_TWEAK : SynthModule + { + in audio stream invalue; + out audio stream outvalue; + attribute float tweakFactor; + }; +}; +</programlisting> + +<para +> If you write code that doesn't belong to &arts; itself, you should not put it into the <quote +>Arts</quote +> namespace. However, you can make an own namespace if you like. In any case, you'll have to prefix classes you use from &arts;. </para> + +<programlisting> +// IDL File for code which doesn't belong to aRts: +#include <artsflow.idl> + +// either write without module declaration, then the generated classes will +// not use a namespace: +interface Synth_TWEAK2 : Arts::SynthModule +{ + in audio stream invalue; + out audio stream outvalue; + attribute float tweakFactor; +}; + +// however, you can also choose your own namespace, if you like, so if you +// write an application "PowerRadio", you could for instance do it like this: +module PowerRadio { + struct Station { + string name; + float frequency; + }; + + interface Tuner : Arts::SynthModule { + attribute Station station; // no need to prefix Station, same module + out audio stream left, right; + }; +}; +</programlisting> + +</sect2> + +<sect2 id="namespaces-implementation"> +<title +>Internals: How the Implementation Works</title> + +<para +> Often, in interfaces, casts, method signatures and similar, &MCOP; needs to refer to names of types or interfaces. These are represented as string in the common &MCOP; datastructures, while the namespace is always fully represented in the C++ style. This means the strings would contain <quote +>M::A</quote +> and <quote +>B</quote +>, following the example above. </para> + +<para +> Note this even applies if inside the &IDL; text the namespace qualifiers were not given, since the context made clear which namespace the interface <interfacename +>A</interfacename +> was meant to be used in. </para> + +</sect2> +</sect1> + +<sect1 id="threads"> +<title +>Threads in &arts;</title> + +<sect2 id="threads-basics"> +<title +>Basics</title> + +<para +> Using threads isn't possible on all platforms. This is why &arts; was originally written without using threading at all. For almost all problems, for each threaded solution to the problem, there is a non-threaded solution that does the same. </para> + +<para +> For instance, instead of putting audio output in a seperate thread, and make it blocking, &arts; uses non-blocking audio output, and figures out when to write the next chunk of data using <function +>select()</function +>. </para> + +<para +> However, &arts; (in very recent versions) at least provides support for people who do want to implement their objects using threads. For instance, if you already have code for an <literal role="extension" +>mp3</literal +> player, and the code expects the <literal role="extension" +>mp3</literal +> decoder to run in a seperate thread, it's usally the easiest thing to do to keep this design. </para> + +<para +> The &arts;/&MCOP; implementation is built along sharing state between seperate objects in obvious and non-obvious ways. A small list of shared state includes: </para> + +<itemizedlist +> <listitem +><para +> The Dispatcher object which does &MCOP; communication. </para +> </listitem +> <listitem +> <para +> The Reference counting (Smartwrappers). </para +> </listitem +> <listitem +> <para +> The IOManager which does timer and fd watches. </para +> </listitem +> <listitem +> <para +> The ObjectManager which creates objects and dynamically loads plugins. </para +> </listitem +> <listitem +> <para +> The FlowSystem which calls calculateBlock in the appropriate situations. </para +> </listitem +> </itemizedlist> + +<para +> All of the above objects don't expect to be used concurrently (&dh; called from seperate threads at the same time). Generally there are two ways of solving this: </para> + +<itemizedlist +> <listitem +> <para +> Require the caller of any functions on this objects to acquire a lock before using them. </para +> </listitem +> <listitem +> <para +> Making these objects really threadsafe and/or create per-thread instances of them. </para +> </listitem +> </itemizedlist> + +<para +> &arts; follows the first approach: you will need a lock whenever you talk to any of these objects. The second approach is harder to do. A hack which tries to achieve this is available at <ulink url="http://space.twc.de/~stefan/kde/download/arts-mt.tar.gz" +> http://space.twc.de/~stefan/kde/download/arts-mt.tar.gz</ulink +>, but for the current point in time, a minimalistic approach will probably work better, and cause less problems with existing applications. </para> + +</sect2> +<sect2 id="threads-locking"> +<title +>When/how to acquire the lock?</title> + +<para +> You can get/release the lock with the two functions: </para> + +<itemizedlist +> <listitem +> <para +> <ulink url="http://space.twc.de/~stefan/kde/arts-mcop-doc/arts-reference/headers/Arts__Dispatcher.html#lock" +><function +>Arts::Dispatcher::lock()</function +></ulink +> </para +> </listitem +> <listitem +> <para +> <ulink url="http://space.twc.de/~stefan/kde/arts-mcop-doc/arts-reference/headers/Arts__Dispatcher.html#unlock" +><function +>Arts::Dispatcher::unlock()</function +></ulink +> </para +> </listitem +> </itemizedlist> + +<para +> Generally, you don't need to acquire the lock (and you shouldn't try to do so), if it is already held. A list of conditions when this is the case is: </para> + +<itemizedlist +> <listitem +> <para +> You receive a callback from the IOManager (timer or fd). </para +> </listitem +> <listitem +> <para +> You get call due to some &MCOP; request. </para +> </listitem +> <listitem +> <para +> You are called from the NotificationManager. </para +> </listitem +> <listitem +> <para +> You are called from the FlowSystem (calculateBlock) </para +> </listitem +> </itemizedlist> + +<para +> There are also some exceptions of functions. which you can only call in the main thread, and for that reason you will never need a lock to call them: </para> + +<itemizedlist +> <listitem +> <para +> Constructor/destructor of Dispatcher/IOManager. </para +> </listitem +> <listitem +> <para +> <methodname +>Dispatcher::run()</methodname +> / <methodname +>IOManager::run()</methodname +> </para +> </listitem +> <listitem +> <para +><methodname +>IOManager::processOneEvent()</methodname +></para +> </listitem +> </itemizedlist> + +<para +> But that is it. For everything else that is somehow related to &arts;, you will need to get the lock, and release it again when done. Always. Here is a simple example: </para> + +<programlisting> +class SuspendTimeThread : Arts::Thread { +public: + void run() { + /* + * you need this lock because: + * - constructing a reference needs a lock (as global: will go to + * the object manager, which might in turn need the GlobalComm + * object to look up where to connect to) + * - assigning a smartwrapper needs a lock + * - constructing an object from reference needs a lock (because it + * might need to connect a server) + */ + Arts::Dispatcher::lock(); + Arts::SoundServer server = Arts::Reference("global:Arts_SoundServer"); + Arts::Dispatcher::unlock(); + + for(;;) { /* + * you need a lock here, because + * - dereferencing a smartwrapper needs a lock (because it might + * do lazy creation) + * - doing an MCOP invocation needs a lock + */ + Arts::Dispatcher::lock(); + long seconds = server.secondsUntilSuspend(); + Arts::Dispatcher::unlock(); + + printf("seconds until suspend = %d",seconds); + sleep(1); + } + } +} +</programlisting> + + +</sect2> + +<sect2 id="threads-classes"> +<title +>Threading related classes</title> + +<para +> The following threading related classes are currently available: </para> + +<itemizedlist +> <listitem +> <para +> <ulink url="http://www.arts-project.org/doc/headers/Arts__Thread.html" +><classname +> Arts::Thread</classname +></ulink +> - which encapsulates a thread. </para +> </listitem +> <listitem +> <para +> <ulink url="http://www.arts-project.org/doc/headers/Arts__Mutex.html" +> <classname +>Arts::Mutex</classname +></ulink +> - which encapsulates a mutex. </para +> </listitem +> <listitem +> <para +> <ulink url="http://www.arts-project.org/doc/headers/Arts__ThreadCondition.html" +> <classname +>Arts::ThreadCondition</classname +></ulink +> - which provides support to wake up threads which are waiting for a certain condition to become true. </para +> </listitem +> <listitem +> <para +> <ulink url="http://www.arts-project.org/doc/headers/Arts__SystemThreads.html" +><classname +>Arts::SystemThreads</classname +></ulink +> - which encapsulates the operating system threading layer (which offers a few helpful functions to application programmers). </para +> </listitem +> </itemizedlist> + +<para +> See the links for documentation. </para> + +</sect2> +</sect1> + +<sect1 id="references-errors"> +<title +>References and Error Handling</title> + +<para +> &MCOP; references are one of the most central concepts in &MCOP; programming. This section will try to describe how exactly references are used, and will especially also try to cover cases of failure (server crashes). </para> + +<sect2 id="references-properties"> +<title +>Basic properties of references</title> + +<itemizedlist +> <listitem +> <para +> An &MCOP; reference is not an object, but a reference to an object: Even though the following declaration <programlisting> + Arts::Synth_PLAY p; +</programlisting +> looks like a definition of an object, it only declares a reference to an object. As C++ programmer, you might also think of it as Synth_PLAY *, a kind of pointer to a Synth_PLAY object. This especially means, that p can be the same thing as a NULL pointer. </para +> </listitem +> <listitem +> <para +> You can create a NULL reference by assigning it explicitly </para +> <programlisting> + Arts::Synth_PLAY p = Arts::Synth_PLAY::null(); +</programlisting +> </listitem +> <listitem +> <para +> Invoking things on a NULL reference leads to a core dump </para +> <programlisting> + Arts::Synth_PLAY p = Arts::Synth_PLAY::null(); + string s = p.toString(); +</programlisting +> <para +> will lead to a core dump. Comparing this to a pointer, it is essentially the same as <programlisting> + QWindow* w = 0; + w->show(); +</programlisting +> which every C++ programmer would know to avoid. </para +> </listitem +> <listitem +> <para +> Uninitialized objects try to lazy-create themselves upon first use </para +> <programlisting> + Arts::Synth_PLAY p; + string s = p.toString(); +</programlisting +> <para +> is something different than dereferencing a NULL pointer. You didn't tell the object at all what it is, and now you try to use it. The guess here is that you want to have a new local instance of a Arts::Synth_PLAY object. Of course you might have wanted something else (like creating the object somewhere else, or using an existing remote object). However, it is a convenient short cut to creating objects. Lazy creation will not work once you assigned something else (like a null reference). </para +> <para +> The equivalent C++ terms would be <programlisting> + QWidget* w; + w->show(); +</programlisting +> which obviously in C++ just plain segfaults. So this is different here. This lazy creation is tricky especially as not necessarily an implementation exists for your interface. </para +> <para +> For instance, consider an abstract thing like a Arts::PlayObject. There are certainly concrete PlayObjects like those for playing mp3s or wavs, but <programlisting> + Arts::PlayObject po; + po.play(); +</programlisting +> will certainly fail. The problem is that although lazy creation kicks in, and tries to create a PlayObject, it fails, because there are only things like Arts::WavPlayObject and similar. Thus, use lazy creation only when you are sure that an implementation exists. </para +> </listitem +> <listitem +> <para +> References may point to the same object </para +> <programlisting> + Arts::SimpleSoundServer s = Arts::Reference("global:Arts_SimpleSoundServer"); + Arts::SimpleSoundServer s2 = s; +</programlisting +> <para +> creates two references referring to the same object. It doesn't copy any value, and doesn't create two objects. </para +> </listitem +> <listitem +> <para +> All objects are reference counted So once an object isn't referred any longer by any references, it gets deleted. There is no way to explicitely delete an object, however, you can use something like this <programlisting> + Arts::Synth_PLAY p; + p.start(); + [...] + p = Arts::Synth_PLAY::null(); +</programlisting +> to make the Synth_PLAY object go away in the end. Especially, it should never be necessary to use new and delete in conjunction with references. </para +> </listitem +> </itemizedlist> + +</sect2> + +<sect2 id="references-failure"> +<title +>The case of failure</title> + +<para +> As references can point to remote objects, the servers containing these objects can crash. What happens then? </para> + +<itemizedlist +> <listitem +> <para +> A crash doesn't change whether a reference is a null reference. This means that if <function +>foo.isNull()</function +> was <returnvalue +>true</returnvalue +> before a server crash then it is also <returnvalue +>true</returnvalue +> after a server crash (which is clear). It also means that if <function +>foo.isNull()</function +> was <returnvalue +>false</returnvalue +> before a server crash (foo referred to an object) then it is also <returnvalue +>false</returnvalue +> after the server crash. </para +> </listitem +> <listitem +> <para +> Invoking methods on a valid reference stays safe Suppose the server containing the object calc crashed. Still calling things like <programlisting> + int k = calc.subtract(i,j) +</programlisting +> are safe. Obviously subtract has to return something here, which it can't because the remote object no longer exists. In this case (k == 0) would be true. Generally, operations try to return something <quote +>neutral</quote +> as result, such as 0.0, a null reference for objects or empty strings, when the object no longer exists. </para +> </listitem +> <listitem +> <para +> Checking <function +>error()</function +> reveals whether something worked. </para +> <para +> In the above case, <programlisting> + int k = calc.subtract(i,j) + if(k.error()) { + printf("k is not i-j!\n"); + } +</programlisting +> would print out <computeroutput +>k is not i-j</computeroutput +> whenever the remote invocation didn't work. Otherwise <varname +>k</varname +> is really the result of the subtract operation as performed by the remote object (no server crash). However, for methods doing things like deleting a file, you can't know for sure whether it really happened. Of course it happened if <function +>.error()</function +> is <returnvalue +>false</returnvalue +>. However, if <function +>.error()</function +> is <returnvalue +>true</returnvalue +>, there are two possibilities: </para +> <itemizedlist +> <listitem +> <para +> The file got deleted, and the server crashed just after deleting it, but before transferring the result. </para +> </listitem +> <listitem +> <para +> The server crashed before beeing able to delete the file. </para +> </listitem +> </itemizedlist +> </listitem +> <listitem +> <para +> Using nested invocations is dangerous in crash resistent programs </para +> <para +> Using something like <programlisting> + window.titlebar().setTitle("foo"); +</programlisting +> is not a good idea. Suppose you know that window contains a valid Window reference. Suppose you know that <function +>window.titlebar()</function +> will return a Titlebar reference because the Window object is implemented properly. However, still the above statement isn't safe. </para +> <para +> What could happen is that the server containing the Window object has crashed. Then, regardless of how good the Window implementation is, you will get a null reference as result of the window.titlebar() operation. And then of course invoking setTitle on that null reference will lead to a crash as well. </para +> <para +> So a safe variant of this would be <programlisting> + Titlebar titlebar = window.titlebar(); + if(!window.error()) + titlebar.setTitle("foo"); +</programlisting +> add the appropriate error handling if you like. If you don't trust the Window implementation, you might as well use <programlisting> + Titlebar titlebar = window.titlebar(); + if(!titlebar.isNull()) + titlebar.setTitle("foo"); +</programlisting +> which are both safe. </para +> </listitem +> </itemizedlist> + +<para +> There are other conditions of failure, such as network disconnection (suppose you remove the cable between your server and client while your application runs). However their effect is the same like a server crash. </para> + +<para +> Overall, it is of course a consideration of policy how strictly you try to trap communcation errors throughout your application. You might follow the <quote +>if the server crashes, we need to debug the server until it never crashes again</quote +> method, which would mean you need not bother about all these problems. </para> + +</sect2> + +<sect2 id="references-internals"> +<title +>Internals: Distributed Reference Counting</title> + +<para +> An object, to exist, must be owned by someone. If it isn't, it will cease to exist (more or less) immediately. Internally, ownership is indicated by calling <function +>_copy()</function +>, which increments an reference count, and given back by calling <function +>_release()</function +>. As soon as the reference count drops to zero, a delete will be done. </para> + +<para +> As a variation of the theme, remote usage is indicated by <function +>_useRemote()</function +>, and dissolved by <function +>_releaseRemote()</function +>. These functions lead a list which server has invoked them (and thus owns the object). This is used in case this server disconnects (&dh; crash, network failure), to remove the references that are still on the objects. This is done in <function +>_disconnectRemote()</function +>. </para> + +<para +> Now there is one problem. Consider a return value. Usually, the return value object will not be owned by the calling function any longer. It will however also not be owned by the caller, until the message holding the object is received. So there is a time of <quote +>ownershipless</quote +> objects. </para> + +<para +> Now, when sending an object, one can be reasonable sure that as soon as it is received, it will be owned by somebody again, unless, again, the receiver dies. However this means that special care needs to be taken about object at least while sending, probably also while receiving, so that it doesn't die at once. </para> + +<para +> The way &MCOP; does this is by <quote +>tagging</quote +> objects that are in process of being copied across the wire. Before such a copy is started, <function +>_copyRemote</function +> is called. This prevents the object from being freed for a while (5 seconds). Once the receiver calls <function +>_useRemote()</function +>, the tag is removed again. So all objects that are send over wire are tagged before transfer. </para> + +<para +> If the receiver receives an object which is on his server, of course he will not <function +>_useRemote()</function +> it. For this special case, <function +>_cancelCopyRemote()</function +> exists to remove the tag manually. Other than that, there is also timer based tag removal, if tagging was done, but the receiver didn't really get the object (due to crash, network failure). This is done by the <classname +>ReferenceClean</classname +> class. </para> + +</sect2> + +</sect1> + +<sect1 id="detail-gui-elements"> +<title +>&GUI;-Elemente</title> + +<para +> &GUI;-Elemente sind augenblicklich in einem experimentellen Stadium. Dieser Abschnitt beschreibt also, wie &arts; später einmal mit &GUI;-Elementen umgehen soll. Außerdem ist ein gewisser Teil an Programmzeilen bereits vorhanden. </para> + +<para +> &GUI;-Elemente dienen der Interaktion eines Benutzers mit synthetisierten Strukturen. Im einfachsten Fall soll der Benutzer in der Lage sein, einige Parameter der Struktur direkt zu verändern (z.B. einen Verstärkungsfaktor, der vor dem Abspielmodul verwendet wird). </para> + +<para +> In einem komplexeren Fall wäre vorstellbar, das ein Benutzer Parameter einer ganzen Gruppe von Strukturen oder noch nicht ausgeführten Strukturen ändert, wie z.B. die <acronym +>ADSR</acronym +>-Hüllkurve (envelope) des aktiven &MIDI;-Instrumentes. Eine andere denkbare Einstellung wäre der Dateiname eines Instrumentes, das auf einem Sample basiert. </para +> + +<para +> Auf der anderen Seite könnte der Benutzer überwachen wollen, was innerhalb des Synthesizers passiert. Dazu könnte es Oszilloskope, Spektrumanalysatoren, Lautstärkeanzeigen und <quote +>Experimente</quote +> geben, um z.B. in der Lage zu sein, den Frequenzgang eines bestimmten Filtermodules zu analysieren. </para> + +<para +> Schließlich sollte es möglich sein, mit &GUI;-Elementen die gesamte Struktur zu kontrollieren, die in &arts; ausgeführt wird. Der Benutzer sollte in der Lage sein, Instrumente &MIDI;-Kanälen zuzuordnen, neue Effekte zu starten und zu seinem Hauptmischpult (das ebenfalls aus &arts;-Strukturen besteht) einen weiteren Kanal hinzuzufügen und eine neue Strategie für seine Equalizer einzustellen. </para> + +<para +> Die &GUI;-Elemente bieten dem Benutzer damit Zugriff auf alle Möglichkeiten, die das virtuelle Studio &arts; bietet. Natürlich sollen die &GUI;-Elemente auch mit &MIDI;-Eingaben interagieren können (ein Schieberegler soll sich selbstständig in eine neue Position bewegen, wenn ein Midi-Ereignis gerade diesen Parameter geändert hat), weiterhin sollen die Elemente selbst Ereignisse generieren können, um die Aufnahme der Benutzereingaben zu ermöglichen. </para> + +<para +> Technisch gesprochen benötigt man eine &IDL;-Basisklasse für alle Kontrollelemente (<classname +>Arts::Widget</classname +>) und kann von dieser eine Anzahl häufig verwendeter Kontrollelemente (wie <classname +>Arts::Poti</classname +>, <classname +>Arts::Panel</classname +>, <classname +>Arts::Window</classname +>, ...) ableiten. </para> + +<para +> Diese Kontrollelemente sollten mit einer Bibliothek wie &Qt; oder Gtk implementiert werden. Schließlich sollten die &GUI;s der Effekte aus diesen Elementen gebildet werden. Ein Freeverb-Effekt könnte z.B. aus fünf <classname +>Arts::Poti</classname +>- und einem <classname +>Arts::Window</classname +>-Element gebildet werden. Wenn es also eine &Qt;-Implementation dieser grundlegenden Elemente gibt, kann der Effekt sich mit Hilfe von &Qt; darstellen. Wenn es eine Gtk-Implementation gibt, funktioniert das für Gtk ebenfalls (die Funktionsweise sollte mehr oder weniger gleichwertig sein). </para> + +<para +> Da wir &IDL; benutzen, sollte &arts-builder; (oder andere Programme) in der Lage sein, &GUI;s optisch zusammenzuführen oder mit einigen Parametern basierend auf den Schnittstellen selbst zusammenzustellen. Es sollte relativ einfach sein, eine <quote +>GUI nach Beschreibung erstellen</quote +>-Klasse zu programmieren, die eine &GUI;-Beschreibung (in der Form Parameter und Kontrollelement) in ein &GUI;-Objekt umsetzt. </para> + +<para +> Basierend auf &IDL; und dem &arts;/&MCOP;-Komponentenmodell sollte es genau so leicht sein, ein neues &GUI;-Objekt zu erstellen, wie es ist, ein neues Plugin für &arts; zu schreiben, das einen weiteren Filter bereitstellt. </para> + +</sect1> + +</chapter> + + + diff --git a/tde-i18n-de/docs/tdemultimedia/artsbuilder/digitalaudio.docbook b/tde-i18n-de/docs/tdemultimedia/artsbuilder/digitalaudio.docbook new file mode 100644 index 00000000000..46b868f0821 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/artsbuilder/digitalaudio.docbook @@ -0,0 +1,16 @@ +<!-- <?xml version="1.0" ?> +<!DOCTYPE appendix PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd"> +To validate or process this file as a standalone document, uncomment +this prolog. Be sure to comment it out again when you are done --> + +<appendix id="intro-digital-audio"> +<title +>Einführung in digitale Audiobearbeitung</title> + +<para +>digitales Sampling, Filter, Effekte, &etc;</para> + +</appendix> + + + diff --git a/tde-i18n-de/docs/tdemultimedia/artsbuilder/faq.docbook b/tde-i18n-de/docs/tdemultimedia/artsbuilder/faq.docbook new file mode 100644 index 00000000000..ff9e1d5df97 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/artsbuilder/faq.docbook @@ -0,0 +1,1312 @@ +<!-- <?xml version="1.0" ?> +<!DOCTYPE chapter PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd"> +To validate or process this file as a standalone document, uncomment +this prolog. Be sure to comment it out again when you are done --> +<chapter id="faq"> +<title +>Fragen und Antworten</title> + +<para +>In diesem Abschnitt finden Sie die Antworten auf einige häufig gestellte Fragen zu &arts;. </para> + +<qandaset id="faq-general"> +<title +>Allgemeine Fragen</title> + +<qandaentry> +<question> +<para +>Unterstützt &kde; die Ausgabe von Audio über meine Soundkarte? </para> +</question> + +<answer> +<para +>&kde; verwendet &arts; für das Abspielen von Klängen und &arts; verwendet die Kernel-Treiber von &Linux;, entweder <acronym +>OSS</acronym +> oder die <acronym +>OSS</acronym +>-Emulation von <acronym +>ALSA</acronym +>. Wenn Ihre Soundkarte entweder von <acronym +>ALSA</acronym +> oder <acronym +>OSS</acronym +> unterstützt und richtig eingerichtet wurde (&dh; irgendeine andere &Linux;-Anwendung kann Klänge ausgeben), funktionieren auch Klänge unter KDE. In speziellen Fällen können allerdings Probleme auftreten. Bei Problemen mit artsd kann man den <link linkend="faq-hardware-specific" +>Abschnitt über Hardware-Probleme</link +> lesen. </para> +<para +>Inzwischen werden verschiedene andere Computersysteme unterstützt. Es folgt eine komplette Liste der Soundausgabe mit der aktuellen Version von &arts;. Falls das eigene Computersystem nicht aufgeführt ist, sollte man in Erwägung ziehen, &arts; selbst zu portieren. </para> + +<informaltable> +<tgroup cols="2"> +<thead> +<row> +<entry +>&arts; Audio Ein-/Ausgabe-Methode</entry> +<entry +>Kommentar</entry> +</row> +</thead> + +<tbody> +<row> +<entry +>paud</entry> +<entry +>Unterstützung des "Personal Audio Device" unter AIX</entry> +</row> + +<row> +<entry +>alsa</entry> +<entry +>Linux ALSA-0.5- und ALSA-0.9-Treiber</entry> +</row> + +<row> +<entry +>libaudioio</entry> +<entry +>Unterstützung der unter Solaris funktionierenden generischen Bibliothek "LibAudioIO"</entry> +</row> + +<row> +<entry +>nas</entry> +<entry +>NAS-Soundserver, nützlich für X-Terminals mit NAS-Unterstützung</entry> +</row> + +<row> +<entry +>null</entry> +<entry +>Null-Audiogerät, verwirft Soundausgaben</entry> +</row> + +<row> +<entry +>oss</entry> +<entry +>OSS-Unterstützung (Open Sound System) (funktioniert unter Linux, verschiedenen BSD-Varianten und anderen Plattformen mit installierten OSS-Treibern)</entry> +</row> + +<row> +<entry +>toss</entry> +<entry +>OSS-Unterstützung mit Threads, funktioniert manchmal in Installaionen besser, unter denen die Standardunterstützung für OSS versagt</entry> +</row> + +<row> +<entry +>sgi</entry> +<entry +>SGI "Direct Media"-Unterstützung unter IRIX</entry> +</row> + +<row> +<entry +>sun</entry> +<entry +>Solaris-Unterstützung</entry> +</row> + +</tbody> +</tgroup> +</informaltable> +</answer> +</qandaentry> + +<qandaentry> +<question> +<para +>Ich kann keine <literal role="extension" +>wav</literal +>-Dateien mit &artsd; abspielen! </para> +</question> + +<answer> +<para +>Überprüfen Sie, das &artsd; mit<filename +>libaudiofile</filename +> gelinkt ist (<userinput +><command +>ldd</command +> <parameter +>artsd</parameter +></userinput +>). Falls das nicht der Fall ist, laden Sie das Paket tdesupport herunter und übersetzen Sie alles neu. </para> +</answer> +</qandaentry> + +<qandaentry> +<question> +<para +>Ich kann Klänge hören, wenn ich mich als <systemitem class="username" +>root</systemitem +> anmelde, aber kein anderer Benutzer kann Klänge hören! </para> +</question> + +<answer> +<para +>Die Berechtigungen für die Datei <filename class="devicefile" +>/dev/dsp</filename +> entscheiden, welche Benutzer Klänge erhalten. Um jedem die erforderlichen Berechtigungen zu geben, müssen Sie Folgendes machen: </para> + +<procedure> +<step> +<para +>Melden Sie sich als <systemitem class="username" +>root</systemitem +> an. </para> +</step> + +<step> +<para +>Öffnen Sie ein &konqueror;-Fenster. </para> +</step> + +<step> +<para +>Gehen Sie in den Ordner <filename class="directory" +>/dev</filename +>. </para> +</step> + +<step> +<para +>Klicken Sie mit der <mousebutton +>rechten</mousebutton +> Maustaste auf <filename +>dsp</filename +> und wählen Sie Eigenschaften. </para> +</step> + +<step> +<para +>Klicken Sie auf die Karteikarte <guilabel +>Berechtigungen</guilabel +>. </para> +</step> + +<step> +<para +>Markieren Sie <guilabel +>Lesen</guilabel +> und <guilabel +>Schreiben</guilabel +> in allen Bereichen. </para> +</step> + +<step> +<para +>Klicken Sie auf <guibutton +>OK</guibutton +>. </para> +</step> +</procedure> + +<para +>Sie können das gleiche erreichen, indem Sie in einem Terminal-Fenster <userinput +><command +>chmod</command +> <option +>666</option +> <parameter +>/dev/dsp</parameter +></userinput +> eingeben. </para> + +<para +>Um den Zugriff auf Klänge auf bestimmte Benutzer einzuschränken, können Sie Gruppenrechte verwenden. Bei einige &Linux;-Distributionen, z.B. Debian/Potato, gehört <filename class="devicefile" +>/dev/dsp</filename +> bereits zur Gruppe <systemitem class="groupname" +>audio</systemitem +>. Sie müssen die gewünschten Benutzer lediglich zu dieser Gruppe hinzufügen. </para> +</answer> +</qandaentry> + +<qandaentry> +<question> +<para +>Das hilft für &artsd;, aber wie sieht es mit &kmix;, &kmid;, &kscd;,&etc; aus? </para> +</question> +<answer> + +<para +>Es gibt verschiedene andere Geräte, auf die Multimedia-Anwendungen zugreifen. Sie können sie alle genau so behanden; Sie können sie entweder für alle Benutzer freigeben oder Gruppenrechte zur Zugriffskontrolle verwenden. Hier ist eine Liste der beteiligten Geräte, die aber unvollständig sein kann (falls es mehrere Geräte einer Art gibt, sind sie in der Form <filename class="devicefile" +>midi0</filename +>, <filename class="devicefile" +>midi1</filename +>, ... benannt, nur das erste dieser Geräte ist in der folgenden Liste aufgeführt): </para> + +<itemizedlist> +<listitem> +<para> +<filename class="devicefile" +>/dev/admmidi0</filename> +</para> +</listitem> +<listitem> +<para> +<filename class="devicefile" +>/dev/adsp0</filename> +</para> +</listitem> +<listitem> +<para> +<filename class="devicefile" +>/dev/amidi0</filename> +</para> +</listitem> +<listitem> +<para> +<filename class="devicefile" +>/dev/amixer0</filename> +</para> +</listitem> +<listitem> +<para> +<filename class="devicefile" +>/dev/audio</filename> +</para> +</listitem> +<listitem> +<para> +<filename class="devicefile" +>/dev/audio0</filename> +</para> +</listitem> +<listitem> +<para> +<filename class="devicefile" +>/dev/cdrom</filename> +</para> +</listitem> +<listitem> +<para> +<filename class="devicefile" +>/dev/dmfm0</filename> +</para> +</listitem> +<listitem> +<para> +<filename class="devicefile" +>/dev/dmmidi0</filename> +</para> +</listitem> +<listitem> +<para> +<filename class="devicefile" +>/dev/dsp</filename> +</para> +</listitem> +<listitem> +<para> +<filename class="devicefile" +>/dev/dsp0</filename> +</para> +</listitem> +<listitem> +<para> +<filename class="devicefile" +>/dev/midi0</filename> +</para> +</listitem> +<listitem> +<para> +<filename class="devicefile" +>/dev/midi0</filename> +</para> +</listitem> +<listitem> +<para> +<filename class="devicefile" +>/dev/midi00</filename> +</para> +</listitem> +<listitem> +<para> +<filename class="devicefile" +>/dev/midi00</filename> +</para> +</listitem> +<listitem> +<para> +<filename class="devicefile" +>/dev/mixer</filename> +</para> +</listitem> +<listitem> +<para> +<filename class="devicefile" +>/dev/mixer0</filename> +</para> +</listitem> +<listitem> +<para> +<filename class="devicefile" +>/dev/mpu401data</filename> +</para> +</listitem> +<listitem> +<para> +<filename class="devicefile" +>/dev/mpu401stat</filename> +</para> +</listitem> +<listitem> +<para> +<filename class="devicefile" +>/dev/music</filename> +</para> +</listitem> +<listitem> +<para> +<filename class="devicefile" +>/dev/rmidi0</filename> +</para> +</listitem> +<listitem> +<para> +<filename class="devicefile" +>/dev/rtc</filename> +</para> +</listitem> +<listitem> +<para> +<filename class="devicefile" +>/dev/sequencer</filename> +</para> +</listitem> +<listitem> +<para> +<filename class="devicefile" +>/dev/smpte0</filename> +</para> +</listitem> +<listitem> +<para> +<filename class="devicefile" +>/dev/sndstat</filename> +</para> +</listitem> +</itemizedlist> +</answer> +</qandaentry> + +<qandaentry> +<question> +<para +>Was kann ich tun, wenn artsd nicht startet oder während der Ausführung abstürzt?</para> +</question> + +<answer> +<para +>Versuchen Sie zuerst die Standardeinstellungen in &kcontrol; (oder wenn Sie manuell gestartet haben, geben Sie keine zusätzlichen Optionen an, außer vielleicht <userinput +><option +>-F</option +><parameter +>10</parameter +> <option +>-S</option +><parameter +>4096</parameter +></userinput +>). Besonders die Einstellung <emphasis +>Volle Duplexfähigkeit aktivieren</emphasis +> funktioniert bei einigen Treibern <emphasis +>nicht</emphasis +>. </para> + +<para +>Eine gute Methode, Problemen mit artsd auf den Grund zu gehen, ist, &artsd; manuell zu starten. Öffnen Sie dazu ein &konsole;-Fenster und geben Sie folgenden Befehl: </para> + +<screen width="40" +><prompt +>%</prompt +> <userinput +><command +>artsd</command +> <option +>-F</option +><parameter +>10</parameter +> <option +>-S</option +><parameter +>4096</parameter +></userinput +></screen> + +<para +>Sie können außerdem die Option <option +>-l0</option +> hinzufügen. Sie sorgt für umfangreichere Statusmeldungen: </para> +<screen width="40" +><prompt +>%</prompt +> <userinput +><command +>artsd</command +> <option +>-l0</option +> <option +>-F</option +><parameter +>10</parameter +> <option +>-S</option +><parameter +>4096</parameter +></userinput +></screen> + +<para +>Sie erhalten bestimmt einige nützliche Informationen über die Startprobleme. Oder, wenn artsd abstürzt, während etwas Bestimmtes passiert, können Sie auch dieses ausprobieren und Informationen erhalten <quote +>wie</quote +> &artsd; abstürzt. Wenn Sie einen Fehlerbericht einsenden wollen, kann ein Backtrace mit <command +>gdb</command +> und/oder ein <command +>strace</command +> hilfreich sein. </para> +</answer> +</qandaentry> + +<qandaentry> +<question> +<para +>Kann ich &artsd; verschieben (die übersetzten Dateien in einen anderen Ordner verschieben)?</para> +</question> + +<answer> +<para +>Das funktioniert nicht perfekt. Das Problem ist, das &artswrapper; die Position von &artsd; aus Sicherheitsgründen fest einkompiliert hat. Sie können allerdings die <filename +>.mcoprc</filename +>-Datei (Einträge für Trader-Pfad/Erweiterungspfad) verwenden, damit ein verschobener &artsd; wenigstens seine Komponenten findet. Sehen Sie im <link linkend="the-mcoprc-file" +>Kapitel über die <filename +>.mcoprc</filename +>-Datei</link +> für genauere Vorgehenshinweise nach. </para> +</answer> +</qandaentry> + +<qandaentry> +<question> +<para +>Kann man &arts; mit gcc-3.0 kompilieren?</para> +</question> + +<answer> +<para +>Kurze Antwort: Nein, &arts; funktioniert nicht, wenn er mit GCC 3.0 kompiliert wird. </para> + +<para +>Lange Antwort: In der offiziellen Version von GCC 3.0 gibt es zwei Fehler, die &arts; betreffen. Der Erste, GCC-Fehler c++/2733 ist relativ harmlos (und betrifft Probleme mit Assembleranweisungen). Die Kompilation von convert.cc wird dadurch verhindert. Dieser Fehler ist im GCC-3.0-CVS bereits beseitigt und wird in einer Version GCC-3.0.1 oder höher beseitigt sein. Ein Notbehelf wurde zur CVS-Version von KDE/arts hinzugefügt. </para> +<para +>Der zweite GCC-3.0-Fehler, c++/3145 (Erzeugung falscher Anweisungen in einigen Fällen von mehrfacher virtueller Vererbung) ist kritisch. Anwendng wie &artsd; stürzen ab beim Start ab, wenn sie mit GCC-3.0 kompiliert werden. Auch wenn bereits kleine Fortschritte zur Beseitigung dieses Problems erzielt wurden, stürzt &artsd; immer noch oft und unerwartet ab. </para> +</answer> +</qandaentry> +<qandaentry> +<question> +<para +>Welche Anwendungen funktionieren unter &arts;?</para> +</question> +<answer> + +<para +>Offensichtlich sind alle &kde;-Anwendungen für &arts; vorbereitet. Das schließt Folgende ein: </para> + +<itemizedlist> +<listitem +><para +>&noatun;</para +></listitem> +<listitem +><para +>&arts-builder;</para +></listitem> +<listitem +><para +>&aktion;</para +></listitem> +<listitem +><para +>&kmid;</para +></listitem> +<listitem +><para +>&kmidi;</para +></listitem> +<listitem +><para +>&kmix;</para +></listitem> +<listitem +><para +>&kscd;</para +></listitem> +<listitem +><para +>&kde;-Spiele wie &kpoker; und &ktuberling;</para +></listitem> +</itemizedlist> + +<para +>Einige &kde;-Anwendungen, die bisher nicht Teil von &kde;-Veröffentlichungen sind (z.B. aus kdenonbeta) unterstützen &arts; auch. Das sind unter anderen: </para> + +<itemizedlist> +<listitem +><para +>&brahms;</para +></listitem> +<listitem +><para +><application +>Kaboodle</application +></para +></listitem> +<listitem +><para +><application +>Kdao</application +></para +></listitem> +</itemizedlist> + +<para +>Die folgenden Nicht-&kde;-Anwendungen funktionieren ebenfalls mit &arts;: </para> + +<itemizedlist> +<listitem +><para +><application +>xmms</application +> (mit &arts;-Plugin)</para +></listitem> +<listitem +><para +>Real Networks <application +>RealPlayer</application +> 8.0 (funktioniert mit &artsdsp;; vollständige &arts;-Unterstützung wird überlegt)</para +></listitem> +</itemizedlist> + +<para +>Die folgenden Anwendungen funktionieren <emphasis +>nicht</emphasis +> mit &arts;: </para> + +<itemizedlist> +<listitem +><para +>keine</para +></listitem> +</itemizedlist> + +<para +>Weitere Informationen finden Sie in den Antworten zu den Fragen im Abschnitt <link linkend="faq-non-arts" +>Nicht-&arts;-Anwendungen</link +>. </para> + +<para +>Dieser Abschnitt ist unvollständig -- wenn Sie Informationen zu weiteren unterstützten und nicht unterstützten Anwendungen haben, senden Sie sie an den Autor, damit sie eingefügt werden können. </para> +</answer> +</qandaentry> + +</qandaset> + +<qandaset id="faq-non-arts"> +<title +>Nicht-&arts;-Anwendungen</title> + +<qandaentry> +<question> +<para +>Sobald &kde; läuft, kann keine andere Anwendung auf die Klanggeräte zugreifen! </para> +</question> +<answer> +<para +>Während der &arts;-Soundserver von &kde; läuft, verwendet er die Klanggeräte. Wenn der Server für 60 Sekunden unbeschäftigt ist, setzt er aus und gibt die Geräte automatisch frei. </para> +</answer> +</qandaentry> + +<qandaentry> +<question> +<para +>Angeblich soll er nach 60 Sekunden aussetzen, er tut es aber nicht! </para> +</question> +<answer> +<para +>Wenn man artsd vom KDE Kontrollzentrum aus startet, beträgt die Standardeinstellung für das Aussetzen 60 Sekunden. Wenn man artsd dagegen von der Befehlszeile aus startet, muss man die Option -s verwenden, um die Zeit bis zum Aussetzen festzulegen, ansonsten wird das Aussetzen deaktiviert. </para> +<para +>Augenblicklich funktioniert das Aussetzen nicht im Zusammenhang mit Full-Duplex. Schalten Sie in &kcontrol; Full-Duplex-Fähigkeit aus und das Aussetzen wird funktionieren. Full-Duplex deaktivieren, ist immer einer gute Idee, wenn Sie &arts; nur zum Abspielen und nicht zum Aufnehmen verwenden. </para> +</answer> +</qandaentry> + +<qandaentry> +<question> +<para +>Wie kann ich alte Nicht-&arts;-Anwendungen ausführen? </para> +</question> + +<answer> +<para +>Starten Sie sie mit Hilfe von &artsdsp;. Wenn Sie z.B. normalerweise eingeben würden: </para> + +<screen +><prompt +>%</prompt +> <userinput +><command +>mpg123</command +> <option +>foo.mp3</option +></userinput +></screen> + +<para +>verwenden Sie stattdessen:</para> + +<screen +><prompt +>%</prompt +> <userinput +><command +>artsdsp</command +> <option +>mpg123 foo.mp3</option +></userinput +></screen> + +<para +>Dadurch wird die Klangausgabe an &arts; umgeleitet. Diese Methode erfordert keine Veränderung der Anwendungen. Diese Übergangslösung unterstützt allerdings bisher nicht alle Fähigkeiten der Klanggeräte, daher werden einige Anwendungen dennoch nicht funktionieren. </para> +</answer> +</qandaentry> + +<qandaentry> +<question> +<para +>Ich kann &artsdsp; mit keiner Anwendung ausführen, es stürzt immer ab! </para> +</question> +<answer> +<para +>Sie benötigen eine aktuelle Version der glibc-Bibliothek; &artsdsp; funktioniert auf einigen älteren &Linux;-Distributionen nicht zuverlässig. Z.B. funktioniert das Programm unter Debian 2.1 (mit glibc 2.0) nicht, während es unter Debian 2.2 (mit glibc 2.1.3) funktioniert. </para> +</answer> +</qandaentry> + +<qandaentry> +<question> +<para +>Gibt es prinzipielle Hindernisse, sodass einige Anwendungen grundsätzlich nicht mit &artsdsp; funktionieren können? </para> +</question> +<answer> +<para +>Nein. Das Programm &artsdsp; führt zu einer etwas höheren <acronym +>CPU</acronym +>-Belastung als die direkte Verwendung des &arts;-<acronym +>API</acronym +>s. Darüber hinaus kann jede nicht funktionierende Anwendung als Fehler in &artsdsp; betrachtet werden. Die Technik von &artsdsp; sollte bei richtiger Implementation<emphasis +>jeder</emphasis +> Anwendung eine Zusammenarbeit mit arts ermöglichen (einschließlich großer Anwendungen wie <application +>Quake</application +> 3). </para> +</answer> +</qandaentry> + +<qandaentry> +<question> +<para +>Was kann ich tun, wenn eine Anwendung nicht mit &artsdsp; funktioniert? </para> +</question> +<answer> +<para +>Sie können entweder warte, bis &artsd; automatisch aussetzt oder das Kommand <userinput +><command +>artsshell</command +> <option +>suspend</option +></userinput +> verwenden, um den Server manuelle abzuschalten. Sie können den Server nur dann abschalten, wenn keine Anwendung &arts; verwendet und während &arts; abgeschaltet ist, können Sie keine Anwendungen starten, die den Server verwenden. </para> + +<para +>Wenn der Server beschäftigt ist, gibt es einen brutalen Weg, ihn abzuschalten: </para> + + +<screen +><prompt +>%</prompt +> <userinput +><command +>killall</command +> <option +>artsd</option +> ; <command +>killall</command +> <option +>artswrapper</option +></userinput> +<lineannotation +>Now start your own application.</lineannotation> +<prompt +>%</prompt +> <userinput +><command +>kcminit</command +> <option +>arts</option +></userinput +> +</screen> + +<para +>Damit stürtzt allerdings jede &arts;-Anwendung ab, sobald Sie den Server so abschalten. </para> +</answer> +</qandaentry> +<qandaentry> +<question> +<para +>Wie sieht es mit &kde;-1.x-Anwendungen aus? </para> +</question> +<answer> +<para +>Wenn Sie &kde;-1.x-Anwendungen benutzen, die den &kde;-1-Audioserver zur Ausgabe verwenden, müssen Sie das Programm <application +>kaudioserver</application +> starten. Sie können <application +>kaudioserver</application +> wie jede andere Nicht-&arts;-Anwendung behandeln: </para> + +<screen +><prompt +>%</prompt +> <userinput +><command +>artsdsp</command +> <option +>kaudioserver</option +></userinput +> +</screen> + +<para +>Sie müssen kaudioserver installiert haben (aus der gleichen Quelle, von der Sie Ihre &kde;-1.x-Anwendungen bekommen haben) - er gehört zu &kde; 1.x, nicht &kde; 2. </para> +</answer> +</qandaentry> + +<qandaentry> +<question> +<para +>Wie sieht es mit Anwendungen aus, die den Enlightened Sound Daemon, <acronym +>ESD</acronym +>, verwenden? </para> +</question> +<answer> +<para +>Der Fall ist ähnlich zu <application +>kaudioserver</application +>. Solche Anwendungen benötigen den Server esd. Sie können <command +>esd</command +> mit Hilfe von &artsdsp; starten und jede <acronym +>ESD</acronym +>-Anwendung sollte so funktionieren: </para> +<screen +><prompt +>%</prompt +> <userinput +><command +>artsdsp</command +> <option +>esd</option +></userinput +> +</screen> +<para +>Neuere Versionen von &arts; ( +>= 1.2.0) können auch auf den "enlightened sound daemon" anstelle der Soundkarte direkt ausgeben. In der Kommandozeile muss dann die -a Option verwendet werden. Zum Beispiel: </para> +<screen +><prompt +>%</prompt +> <userinput +><command +>artsd</command +> <option +>-a esd</option +></userinput +> +</screen> +<para +>um die EsounD-Unterstützung zu aktivieren. Im &kde; reicht es, in &kcontrol; "Sound & Multimedia" / "Sound-System" die Audio-Hardware auf "Enlightened Sound Dämon" zu stellen. </para> +</answer> +</qandaentry> + +</qandaset> + +<qandaset id="faq-latency"> +<title +>Aussetzer</title> + +<qandaentry> +<question> +<para +>Manchmal höre ich kurze Aussetzer in der Musik, ist das ein Fehler? </para> +</question> +<answer> +<para +>Das ist höchstwahrscheinlich kein Fehler sondern durch die Tatsache verursacht, das der &Linux;-Kernel keine guten Echtzeit-Fähigkeiten besitzt. Es gibt Situationen, in denen &arts; nicht mit der Wiedergabe mithalten kann.Sie können allerdings Echtzeit-Priorität aktivieren (in &kcontrol;) und eine große Antwortzeit verwenden (wie <guilabel +>250ms</guilabel +> oder <guilabel +>so groß wie möglich</guilabel +>). Das sollte die Situation verbessern. </para> +</answer> +</qandaentry> + +<qandaentry> +<question> +<para +>Wie wirkt sich der Antwortzeitwert aus? </para> +</question> +<answer> +<para +>Der Hilfetext für diese Einstellung in &kcontrol; kann verwirren. Ein kleinerer Wert bedeutet, das &arts; eine kürzere Antwortzeit auf externe Ereignisse (&dh; die Zeit, die benötigt wird zwischen dem Schließen eines Fensters und dem von &artsd; abgespielten zugehörigen Klang) verwendet. Das bedeutet, das mehr <acronym +>CPU</acronym +>-Zeit benötigt wird und die Wahrscheinlichkeit von Aussetzern größer wird.</para> +</answer> +</qandaentry> + +<qandaentry> +<question> +<para +>Gibt es andere Einstellungen, die Aussetzer verhindern können? </para> +</question> +<answer> +<para +>Benutzer von <acronym +>IDE</acronym +>-Laufwerken, können das Programm <command +>hdparm</command +> verwenden, um ihr <acronym +>IDE</acronym +>-Laufwerk in den <acronym +>DMA</acronym +>-Modus umzuschalten. Eine Warnung: Dieser Modus funktioniert nicht auf jedem Computer und kann zu einem Systemgesamtabsturz und in seltenen Fällen zu Datenverlust führen. Lesen Sie die Dokumentation zu <command +>hdparm</command +> für genauere Informationen. Ich habe das folgende Kommando erfolgreich verwendet: </para> + +<screen +><prompt +>%</prompt +> <userinput +><command +>hdparm</command +> <option +>-c1</option +> <option +>-d1</option +> <option +>-k1</option +> <option +>-K1</option +> <parameter +>/dev/hda</parameter +></userinput +> +</screen> + +<para +>Sie müssen dieses Kommando nach jedem Neustart ausführen, es ist also in einem Start-Skript am besten aufgehoben (wo genau ist unterschiedlich, auf Debian &Linux; üblicherweise in <filename +>/etc/rc.boot</filename +>). </para> +</answer> +</qandaentry> + +<qandaentry> +<question> +<para +>Die Verwendungvon Echtzeit-Priorität scheint keinen Einfluss zu haben? </para> +</question> +<answer> +<para +>Überprüfen Sie, ob artswrapper als suid <systemitem class="username" +>root</systemitem +> installiert ist. Viele Distributionen (wie z.B. SuSE7.x) installieren artswrapper nicht mit den richtigen Berechtigungen. Zur Überprüfung tippen Sie: ls -l $(which artswrapper). So sollte die Ausgabe aussehen: <screen> +<prompt +>%</prompt +> <userinput +><command +>ls</command +> <option +>-l</option +> <parameter +>$(which artswrapper)</parameter +></userinput> +-rwsr-xr-x 1 root root 4556 Sep 24 18:05 /opt/kde2/bin/artswrapper +</screen +> So sollte es nicht aussehen: <screen> +<prompt +>%</prompt +> <userinput +><command +>ls</command +> <option +>-l</option +> <parameter +>$(which artswrapper)</parameter +></userinput> +-rwxr-xr-x 1 root root 4556 Sep 24 18:05 /opt/kde2/bin/artswrapper +</screen +> Wenn das s fehlt, kann man es durch folgenden Befehl hinzufügen: <screen +><prompt +>%</prompt +> <userinput +><command +>chown</command +> <option +>root</option +> <parameter +>$(which artswrapper)</parameter +></userinput> +<prompt +>%</prompt +> <userinput +><command +>chmod</command +> <option +>4755</option +> <parameter +>$(which artswrapper)</parameter +></userinput +> +</screen> +</para> + +<para +>Falls man &artswrapper; als SUID <systemitem class="username" +>root</systemitem +> ausführen lässt, wird sich durch Verringerung der Unterbrechungen die Qualität der Musikwiedergabe vermutlich erhöhen. Das erhöht allerdings auch die Wahrscheinlichkeit, dass ein Fehler im Programm oder ein böswilliger Benutzer den Rechner beschädigt. Im Mehr-Benutzerbetrieb kann die Ausgabe von hochwertigen Musikaufnahmen die Geschwindigkeit anderer Programme und Benutzer, die <quote +>produktiv</quote +> arbeiten, ernsthaft in Mitleidenschaft ziehen.</para> + +</answer> +</qandaentry> + + +<qandaentry> +<question> +<para +>Warum benötigt &artsd; so viel <acronym +>CPU</acronym +>-Zeit? </para> +</question> +<answer> +<para +>Überprüfen Sie Ihre Antwortzeit-Einstellung. Die aktuelle Version ist außerdem noch nicht optimiert. Das wird sich in Zukunft verbessern. Bis dahin ist keine richtige Vorhersage möglich, wie schnell &artsd; sein kann oder nicht sein kann. </para> +</answer> +</qandaentry> +</qandaset> + +<qandaset id="faq-network"> +<title +>Netzwerk-Transparenz</title> + +<qandaentry> +<question> +<para +>Was benötige ich für Netzwerk-Transparenz? </para> +</question> +<answer> +<para +>Sie müssen Netzwerk-Transparenz in den <guilabel +>Soundserver</guilabel +>-Einstellungen von &kcontrol; aktivieren (<guilabel +>Sicherheits- und Transparenzinfo mittels X11-Server austauschen</guilabel +> und <guilabel +>Netzwerk-Transparenz aktivieren</guilabel +>). Kopieren Sie Ihre <filename +>.mcoprc</filename +>-Datei auf alle Computer, von denen Sie diese Fähigkeit verwenden wollen. Melden Sie sich neu an. Stellen Sie sicher, das die Namensauflösung zwischen den interagierenden Computern funktioniert (&dh; sie müssen auflösbare Namen haben oder in der Datei <filename +>/etc/hosts</filename +> eingetragen sein). </para> + +<para +>Das sollte alles sein. Falls immer noch Probleme bestehen, sind hier noch weitere Informationen. Der &arts; Soundserver-Prozess, &artsd;, sollte nur auf einem Computer laufen, demjenigen mit der Soundkarte, auf dem die Ausgabe erfolgen soll. Der Prozess kann automatisch beim Anmelden von &kde; gestartet werden (wenn Sie das in &kcontrol; einstellen), oder manuell durch Eingabe von: </para> + +<screen +><prompt +>%</prompt +> <userinput +><command +>artsd</command +> <option +>-n</option +> <option +>-F</option +> <parameter +>5</parameter +> <option +>-S</option +> <parameter +>8192</parameter +></userinput +> +</screen> + +<para +>Die Option <option +>-n</option +> ist für Netzwerk-Transparenz, die anderen steuern die Antwortzeit. </para> + +<para +>Ihre <filename +>.mcoprc</filename +>-Datei sollte folgenden Eintrag haben: </para> + +<screen +><userinput +>GlobalComm=Arts::X11GlobalComm</userinput +> +</screen> + +<para +>auf allen beteiligten Computern, damit die Netzwerk-Transparenz funktioniert. Das wird aktiviert durch die Kontrollzentrumseinstellung <guilabel +>Sicherheits- und Transparenzinfo mittels X11-Server austauschen</guilabel +>. </para> + +<para +>Schließlich gibt es in jeder &kde;-Version aus der 2.0.x-Serie einen Fehler, der sich auswirkt, wenn kein Domain-Name eingetragen ist. Klienten von &artsd; suchen den Computer mit dem Soundserver durch die <systemitem class="systemname" +><replaceable +>hostname</replaceable +>. <replaceable +>domainname</replaceable +></systemitem +>-Kombination. Wenn Ihr Domain-Name leer ist, wird <systemitem class="systemname" +><replaceable +>hostname</replaceable +></systemitem +>. (beachten Sie den zusätzlichen Punkt). Fügen Sie einen solchen Eintrag in die Datei <filename +>/etc/hosts</filename +> (&dh; <userinput +>orion.</userinput +> wenn Ihr Host-Name <systemitem class="systemname" +>orion</systemitem +> lautet) ein, um das Problem zu umgehen. </para> +</answer> +</qandaentry> + + +<qandaentry> +<question> +<para +>Wie kann ich Fehler suchen, falls die Netzwerk-Transparenz nicht funktioniert? </para> +</question> +<answer> +<para +>Wenn Sie den &kde;-Quelltext haben, gehen Sie in <filename class="directory" +>tdelibs/arts/examples</filename +> und führen Sie <userinput +><command +>make</command +> <option +>check</option +></userinput +> aus, um einige Programme einschließlich <application +>referenceinfo</application +> zu übersetzen. Führen Sie dann </para> + +<screen +><prompt +>%</prompt +> <userinput +><command +>./referenceinfo</command +> <option +>global:Arts_SimpleSoundServer</option +></userinput +> +</screen> + +<para +> aus. Die Ausgabe zeigt den Hostnamen und die von &arts; verwendeten Kanäle (ports) an. Die Ausgabe <computeroutput +>tcp:orion:1698</computeroutput +> bedeutet, das jeder Klient, der Netzwerk-Transparenz verwenden will, sollte wissen, wie der Computer <systemitem class="systemname" +>orion</systemitem +> zu finden ist. </para> +</answer> +</qandaentry> + +</qandaset> + +<qandaset id="faq-hardware-specific"> +<title +>Hardware-spezifische Fragen</title> + +<qandaentry> +<question> +<para +>Welche Hardware funktioniert mit artsd nicht gut? </para> +</question> +<answer> +<para +>Es scheint, als würden einige wenige Linuxtreiber in manchen Kernelversionen nicht gut mit aRts zusammenarbeiten. Bitte lesen sie die folgende Liste, bevor Sie einen Fehler melden. Wenn Sie Unvollständigkeiten finden, zögern Sie bitte nicht, diese uns zu melden. <informaltable +> <tgroup cols="4"> +<thead> +<row> +<entry +>Linuxtreiber / Soundkarte</entry> +<entry +>Versagt unter</entry> +<entry +>Arbeitet unter</entry> +<entry +>Bemerkungen</entry> +</row> +</thead> + +<tbody> +<row> +<entry +>i810 driver (Intel 810 + AC97 Audio)</entry> +<entry +>2.4.9</entry> +<entry +>2.4.18, 2.2.20, kommerzieller OSS-Treiber, alsa-0.5.12a mit OSS-Emulation</entry> +<entry +>Der Treiber verursacht einen "cpu-overload".</entry> +</row> + +<row> +<entry +>maestro 3/4 chipset</entry> +<entry +>2.4.9</entry> +<entry +>?</entry> +<entry +>Der Treiber verursacht manchmal einen "cpu-overload".</entry> +</row> + +<row> +<entry +>aureal8820, aureal8830 Treiber von sourceforge</entry> +<entry +>2.4.17</entry> +<entry +>?</entry> +<entry +>Der Treiber verursacht eine "Assertion" / "cpu-overload".</entry> +</row> + +<row> +<entry +>OSS Commercial 3.9.4g mit Aureal Vortex</entry> +<entry +>?</entry> +<entry +>?</entry> +<entry +>Das System hängt sich auf.</entry> +</row> + +<row> +<entry +>ymfpci</entry> +<entry +>2.4.0, 2.4.12</entry> +<entry +>2.4.17</entry> +<entry +>Der Treiber verursacht eine "Assertion".</entry> +</row> + + + +</tbody> +</tgroup> +</informaltable> +</para> +</answer> +</qandaentry> + + + +<qandaentry> +<question> +<para +>Warum gibt es hardwarespezifische Probleme und wie sind diese zu lösen? </para> +</question> +<answer> +<para +>Das übliche Problem ist, dass manche Treiber aRts ungenügende oder unrichtige Informationen darüber geben, wann Sounddaten geschrieben werden sollen. Die meisten OSS-Treiber liefern korrekte Informationen, aber nicht alle. </para> +<para +>Es ist zu bemerken, dass einige andere Anwendungen (wie z.B. xmms) ohne diese Daten auskommen und daher auch auf solcher Hardware fehlerfrei arbeiten. &arts; benötigt diese Daten aber und daher könnte artsd abstürzen. Dennoch handelt es sich um einen Treiberfehler und nicht um einen &arts;-Fehler. </para> +<para +>Es gibt zwei Symptome, an denen man erkennt, dass artsd mit einem fehlerhaften Treiber arbeitet. Entweder versucht artsd ständig, neue Daten zu schreiben, was aber fehlschlägt und schließlich zu einer sehr hohen <emphasis +>CPU-Last</emphasis +> und schließlich zum Programmende führt. Beim zweiten Symptom wird artsd mit falschen Informationen darüber versorgt, wie viele Daten zu schreiben sind. In diesem Fall stoppt artsd <emphasis +>mit einer Assertion</emphasis +> wie: <screen +>artsd: audiosubsys.cc:458: void Arts::AudioSubSystem::handleIO(int): +Assertion `len == can_write' failed. +Aborted +</screen> +</para> +</answer> +</qandaentry> + +<qandaentry> +<question> +<para +>Wo liegt das Problem, wenn eine hohe CPU-Last auftritt? </para> +</question> +<answer> +<para +>Normalerweise verwendet artsd select(), um herauszufinden, wann Daten geschrieben werden können. Danach wird ein ioctl(...GETOSPACE...) verwendet, um die Menge der zu schreibenden Daten herauszufinden. Schließlich werden die Daten tatsächlich geschrieben. </para> +<para +>Ein Problem tritt auf, falls artsd ständig aktiviert wird oder falls nur minimale Datenmenge zu schreiben sind. Nach der OSS-Dokumentation aktiviert select() einen Prozess nur dann, wenn mindestens ein Fragment zu schreiben ist. Falls artsd allerdings aktiviert wird und es ist lediglich eine sehr geringe Datenmenge zu schreiben, fährt artsd fort, nur geringe Datenmenge zu schreiben. Das führt schließlich zu einer hohen CPU-Last. </para> +<para +>Um das zu verhindern, darf der Treiber artsd nur dann aktivieren, wenn mindestens ein volles Fragment zu schreiben ist. </para> +</answer> +</qandaentry> + +<qandaentry> +<question> +<para +>Wo liegt der Fehler, wenn die Assertion auftritt? </para> +</question> +<answer> +<para +>Normalerweise verwendet artsd select(), um herauszufinden, wann Daten geschrieben werden können. Danach wird ein ioctl(...GETOSPACE...) verwendet, um die Menge der zu schreibenden Daten herauszufinden. Schließlich werden die Daten tatsächlich geschrieben. </para> +<para +>Falls artsd nicht so viele Daten schreiben kann, wie ioctl anzeigt, wird eine Assertion ausgelöst. Um das zu beheben, sollte der Treiber die korrekte Größe des freien Speichers mitteilen. </para> +</answer> +</qandaentry> +</qandaset> + +<qandaset id="faq-other"> +<title +>Andere Themen</title> + +<qandaentry> +<question> +<para +>Ich kann &arts-builder; nicht verwenden. Er stürzt ab, wenn ich eine Struktur ausführen lassen will! </para> +</question> +<answer> +<para +>Der wahrscheinlichste Grund für dieses Problem ist die Verwendung von alten Strukturen oder Modulen, die von &kde;2-Version nicht mehr unterstützt werden. Unglücklicherweise bezieht sich die im Internet verfügbare Version auf &arts;-0.3.4.1, die lange überholt ist. Der am häufigsten berichtete Fehler ist der folgende: Wenn Struktur ausführen in &arts-builder; gestartet wird, erscheint die Fehlermeldung <errorname +>[artsd] Synth_PLAY: Audio-Subsystem wird schon verwendet.</errorname +> </para> + +<para +>Sie sollten Synth_AMAN_PLAY an Stelle von Synth_PLAY verwenden und das Problem verschwindet. Weitere Informationen finden Sie in der Hilfedatei zu &arts-builder; (betätigen Sie <keycap +>F1</keycap +> in &arts-builder;). </para> + +<para +>Aktuelle Versionen von &arts-builder; (&kde; 2.1 Beta 1 und später) haben eine Menge von Beispielen, die Sie verwenden können. </para> +</answer> +</qandaentry> + +</qandaset> + +</chapter> diff --git a/tde-i18n-de/docs/tdemultimedia/artsbuilder/future.docbook b/tde-i18n-de/docs/tdemultimedia/artsbuilder/future.docbook new file mode 100644 index 00000000000..50a2b7b9749 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/artsbuilder/future.docbook @@ -0,0 +1,401 @@ +<!-- <?xml version="1.0" ?> +<!DOCTYPE chapter PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant +V1.1//EN" "dtd/kdex.dtd"> +To validate or process this file as a standalone document, uncomment +this prolog. Be sure to comment it out again when you are done --> + +<chapter id="future-work"> +<title +>Künftige Arbeiten</title> + +<para +>&arts; entwickelt sich zu schnell, als das an dieser Stelle eine aktuelle Liste möglich wäre. Informationen zu Plänen finden Sie in der Datei TODO und in den <link linkend="mailing-lists" +>Mailinglisten</link +>. Sie sind eingeladen, sich bei der weiteren Planung und Implementation zu beteiligen. </para> + +<para +>Dieses in der Entwicklung befindliche Dokument versucht einen Überblick darüber zu geben, wie neue Technologien in &arts; integriert werden. Es behandelt folgende Themen: </para> + +<itemizedlist> +<listitem +><para +>Wie Schnittstellen funktionieren.</para +></listitem> +<listitem +><para +>Codecs: Dekodierung von mp3-Strömen in eine Form, so dass sie als Daten verwendet werden können.</para +></listitem> +<listitem +><para +>Video.</para +></listitem> +<listitem +><para +>Threading.</para +></listitem> +<listitem +><para +>Synchronisation.</para +></listitem> +<listitem +><para +>Dynamische Erweiterung / Maskierung.</para +></listitem> +<listitem +><para +>Dynamische Komposition.</para +></listitem> +<listitem +><para +>&GUI;</para +></listitem> +<listitem +><para +>&MIDI;</para +></listitem> +</itemizedlist> + +<para +>Dieses befindet sich in Arbeit. Es ist die Grundlage dafür, wie neue Technologien in &arts; integriert werden können. Man kann einen ungefähren Eindruck davon bekommen, wie solche Probleme gelöst werden. Sie können alles, was Sie hier sehen, korrigieren. </para> + +<para +>Programme, die &arts;-Technologie verwenden (bitte: koordinieren Sie Ihre Anstrengungen): </para> + +<itemizedlist> +<listitem> +<para +><application +>KPhone</application +> (Voice over <acronym +>IP</acronym +>) </para> +</listitem> + +<listitem> +<para +>&noatun; (Video- / Audiospieler) </para> +</listitem> + +<listitem> +<para +>&artscontrol; (Kontrollprogramm des Soundservers) </para> +</listitem> + +<listitem> +<para +><application +>Brahms</application +> (Musiksequencer) </para> +</listitem> + +<listitem> +<para +><application +>Kaiman</application +> (&kde;2-Medienspieler - kmedia2-kompatibel) </para> +</listitem> + +<listitem> +<para +><application +>mpglib</application +>/<application +>kmpg</application +> (<acronym +>mpg</acronym +> Audio- und Videowiedergabetechnologie) </para> +</listitem> + +<listitem> +<para +><application +>SDL</application +> (direkte Medienschicht für Spiele, noch nicht begonnen, aber wohl sinnvoll) </para> +</listitem> + +<listitem> +<para +><application +>electric ears</application +> (Der Autor hat mich kontaktiert - Status unbekannt) </para> +</listitem> +</itemizedlist> + +<sect1 id="interfaces-how"> +<title +>Wie Schnittstellen (interfaces) funktionieren</title> + +<!-- I think this is now obsolete and documented elsewhere ? --> + +<para +>&MCOP;-Schnittstellen sind die Grundlage des Konzeptes von &arts;. Sie sind das netzwerktransparente Äquivalent zu C++-Klassen. Sie sollten Ihre Programmentwicklung mit Schnittstellen durchführen. Die Schnittstellen bestehen aus vier Teilen: </para> + +<itemizedlist> +<listitem +><para +>Synchrone Ströme</para +></listitem> +<listitem +><para +>Asynchrone Ströme</para +></listitem> +<listitem +><para +>Methods</para +></listitem> +<listitem +><para +>Attributes</para +></listitem> +</itemizedlist> + +<para +>Diese können beliebig kombiniert werden. Neue Technologien sollten als Schnittstellen definiert werden. Lesen Sie die Abschnitte über asynchrone Ströme und synchrone Ströme, sowie den über die KMedia2-Schnittstelle. Es sind gute Beispiele für ihre Funktionsweise </para> + +<para +>Schnittstellen werden als <literal role="extension" +>.idl</literal +>-Code spezifiziert und mit dem <command +>mcopidl</command +>-Compiler übersetzt. Sie leiten die <classname +><replaceable +>Interfacename</replaceable +>_impl</classname +>-Klasse ab, um es zu implementieren und verwenden <function +>REGISTER_IMPLEMENTATION(Interfacename_impl)</function +>, um Ihre Objekt-Implementation in das &MCOP;-Objektsystem einzufügen. </para> + +</sect1> + +<sect1 id="codecs"> +<title +>Codecs - Datendekodierung</title> + +<para +>Die kmedia2-Schnittstellen erlauben Ihnen zu ignorieren, dass wav-Dateien, mp3-Dateien und viele andere Formate aus Datenströmen bestehen. Stattdessen können Sie Methoden implementieren, um sie abzuspielen. </para> + +<para +>Sie können eine Routine zum Laden von wav-Dateien schreiben, um wav-Dateien abzuspielen ( als PlayObject), aber niemand sonst kann Ihren Code verwenden. </para> + +<para +>Asynchrone Ströme sind eine Alternative. Sie definieren eine Schnittstelle, die die Übergabe von Datenblöcken ermöglichen. So sieht das in &MCOP; aus: </para> + +<programlisting +>interface Codec { + in async byte stream indata; + out async byte stream outdata; +}; +</programlisting> + + +<para +>Natürlich können Codecs Attribute verwenden, um zusätzliche Daten, wie Formatinformationen bereitzustellen. </para> + +<programlisting +>interface ByteAudioCodec { + in async byte stream indata; + out async byte stream outdata; + readonly attribute samplingRate, bits, channels; +}; +</programlisting> + +<para +>Dieser <interfacename +>ByteAudioCodec</interfacename +> kann zum Beispiel mit einem <interfacename +>ByteStreamToAudio</interfacename +>-Objekt verbunden werden, um einen Audio-Strom zu formen. </para> + +<para +>Andere Codec-Typen können stattdessen Video-Daten direkt ausgeben, wie </para> + +<programlisting +>interface VideoCodec { + in async byte stream indata; + out video stream outdata; /* note: video streams do not exist yet */ +}; +</programlisting> + +<para +>Meistens sollte ein Codec-Konzept verwendet werden anstatt einem <quote +>Sie wissen, wie man es abspielt und ich nicht</quote +>-Konzept, wie zum Beispiel <interfacename +>WavPlayObject</interfacename +> es praktiziert. Natürlich muss sich jemand hinsetzen und einige Versuche durchführen, bevor ein <acronym +>API</acronym +> festgeschrieben werden kann. </para> + +</sect1> + +<sect1 id="video"> +<title +>Video</title> + +<para +>Mein Vorschlag ist, Video als asynchronen Strom eines &MCOP;-Datentypen, der Bilder enthält, zu implementieren. Dieser Datentyp muss noch kreiert werden. Auf diese Weise könnten Plugins, die Video-Bilder verarbeiten in der gleichen Art wie Audio-Plugins verbunden werden. </para> + +<para +>Auf einige Dinge muss dabei geachtet werden: </para> + +<itemizedlist> +<listitem> +<para +>Es gibt die Farbmodelle <acronym +>RGB</acronym +> und <acronym +>YUV</acronym +>. </para> +</listitem> +<listitem> +<para +>Das Format sollte dem Strom aufgeprägt werden. </para> +</listitem> +<listitem> +<para +>Synchronisation ist wichtig. </para> +</listitem> +</itemizedlist> + +<para +>Es sollte möglich sein, die <classname +>VideoFrame</classname +>-Klasse so zu reimplementieren, das Daten im gemeinsam genutzten Speicher gespeichert werden können. Damit würde auch Video-Streaming zwischen verschiedenen Prozessen ohne große Probleme möglich. </para> + +<para +>Bisher befindet sich für Videodaten von der Dekodierung bis zum Rendern alles im gleichen Prozess. </para> + +<para +>Ich habe einen Prototyp für ein Videostreaming-Programm implementiert, man kann ihn von <ulink url="http://space.twc.de/~stefan/kde/download/video-quickdraw.tar.gz" +>hier </ulink +> herunterladen. Er muss nach einigen Experimenten in &MCOP; integriert werden. </para> + +<para +>Eine Render-Komponente, die XMITSHM (mit <acronym +>RGB</acronym +> und <acronym +>YUV</acronym +>) unterstützt, sollte programmiert werden. Martin Vogt arbeitet derzeit an so etwas. </para> + +</sect1> + +<sect1 id="threading"> +<title +>Threading</title> + +<para +>Bisher ist &MCOP; Singel-Threaded. Für Video werden wir allerdings wohl nicht um Threading herum kommen. Dabei ist auf einige Dinge zu achten. </para> + + +<itemizedlist> +<listitem +><para +>SmartWrappers - sie sind nicht threadsicher wegen nicht abgesicherter Referenzzählung und ähnlichen Dingen. </para> +</listitem> +<listitem> +<para +>Dispatcher / I/O - nicht threadsicher. </para> +</listitem> +</itemizedlist> + +<para +>Ich könnte mir allerdings vorstellen, einzelne Modules sowohl für synchrones als auch asynchrone Streaming threadsicher zu machen. Auf diese Weise - mit einem threadtauglichen Flusssystem - könnte der Signalfluss auf zwei oder mehr Prozessoren verteilt werden. Damit wäre dem Audiosystem in Bezug auf Mehrprozessorsysteme erheblich geholfen. </para> + +<para +>Wie es funktionieren könnte: </para> + + +<itemizedlist> +<listitem> +<para +>Das Flusssystem entscheidet, welche Module was berechnen sollen - das sind: </para> + <itemizedlist> + <listitem +><para +>Video-Frames (mit der process_indata-Methode)</para +></listitem> + <listitem +><para +>Synchrone Audio-Ströme (calculateBlock)</para +></listitem> + <listitem +><para +>oder asynchrone Ströme, hauptsächlich Byte-Ströme</para +></listitem> + </itemizedlist> +</listitem> +<listitem> +<para +>Module können diese Dinge in eigenen Threads berechnen. Für Audio ist es sinnvoll, Threads wiederholt zu benutzen (z.B. rendern in vier Threads auf vier Prozessoren, unabhängig davon, ob 100 Module ausgeführt werden). Für Video und Byte-Dekomprimierung könnte es sinnvoll sein, eine blockierende Implementierung in einem eigenen Thread zu haben, der mit dem Rest das &MCOP;-Systems durch das Flusssystem synchronisiert wird. </para> +</listitem> + +<listitem> +<para +>Module dürfen die Funktionen von &MCOP; (wie entfernte Aufrufe) während Thread-Operationen nicht verwenden </para> +</listitem> +</itemizedlist> + +</sect1> + +<sect1 id="synchronization"> +<title +>Synchronisation</title> + +<para +>Video und &MIDI; (und Audio) müssen möglicherweise synchronisiert werden. Das funktioniert über Zeitmarken. Zeitmarken könnten zu asynchronen Strömen hinzugefügt werden, indem jedes Paket mit einer Zeitmarke versehen wird. Zwei Video-Frames müssen also als zwei Pakete gesendet werden (sie sind sowieso recht groß), damit sie unterschiedliche Zeitmarken haben können. </para> + +<para +>Audio sollte implizit Zeitmarken haben, da Audiodaten synchron wiedergegeben werden. </para> + +</sect1> + +<sect1 id="dynamic-composition"> +<title +>Dynamische Zusammenstellung (Composition)</title> + +<para +>Es sollte folgendes möglich sein: Ein FX-Effekt ist zusammengesetzt aus mehreren einfachen Modulen. Ein FX-Effekt sollte aussehen wie ein normales &MCOP;-Modul (siehe auch Maskierung (masquerading)), obwohl er aus anderen Modulen besteht. </para> + +<para +>Das ist für &arts-builder; erforderlich. </para> + +</sect1> + +<sect1 id="gui"> +<title +>&GUI;</title> + +<para +>Alle &GUI;-Komponenten werden &MCOP;-Module sein. Sie sollten Attribute wie Größe (size), Name (label), Farbe (color), ... haben. Ein <acronym +>RAD</acronym +>-Builder (&arts-builder;) sollte in der Lage sein, sie visuell zusammenzusetzen. </para> + +<para +>Das &GUI; sollte durch Sicherung der Attribute speicherbar sein. </para> + +</sect1> + +<sect1 id="midi-stuff"> +<title +>&MIDI;</title> + +<para +>&MIDI; sollte als asynchroner Strom implementiert werden. Es sollte zwei Möglichkeiten geben, zum Einen die Verwendung von normalen &MCOP;-Strukturen für die Typen und zum Anderen die Einführung von weiteren angepassten Typen. </para> + +<para +>Normale Strukturen sollten ausreichen, also etwas wie: </para> + +<programlisting +>struct MidiEvent { + byte b1,b2,b3; + sequence<byte> sysex; +} +</programlisting> + +<para +>Asynchrone Ströme sollten angepasste Typen unterstützen. </para> + +</sect1> + +</chapter> + + diff --git a/tde-i18n-de/docs/tdemultimedia/artsbuilder/glossary.docbook b/tde-i18n-de/docs/tdemultimedia/artsbuilder/glossary.docbook new file mode 100644 index 00000000000..3d5b1882607 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/artsbuilder/glossary.docbook @@ -0,0 +1,173 @@ +<!-- <?xml version="1.0" ?> +<!DOCTYPE glossary PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd"> +To validate or process this file as a standalone document, uncomment +this prolog. Be sure to comment it out again when you are done --> + +<glossary id="glossary"> + +<glossentry id="gloss-alsa"> +<glossterm +><acronym +>ALSA</acronym +></glossterm> +<glossdef> +<para +>Advanced &Linux; Sound Architecture; ein &Linux;-Soundkartentreiben, der aktuell nicht Bestandteil des Standard-Kernel-Quelltextes ist. </para> +</glossdef> +</glossentry> + +<glossentry id="gloss-arts"> +<glossterm +>&arts;</glossterm> +<glossdef> +<para +>Analog-Real-Time Synthesizer, der Name der Multimedia-Architektur/der Multimedia-Bibliothek/des Multimedia-Werkzeuges, das vom &kde;-Projekt verwendet wird (beachten Sie die Großschreibung) </para> +</glossdef> +</glossentry> + +<glossentry id="gloss-bsd"> +<glossterm +><acronym +>BSD</acronym +></glossterm> +<glossdef> +<para +>Berkeley Software Distribution; bezieht sich auf jedes von einigen freien&UNIX;-kompatiblen Betriebssystemen, die von <acronym +>BSD</acronym +> &UNIX; abstammen. </para> +</glossdef> +</glossentry> + +<glossentry id="gloss-corba"> +<glossterm +><acronym +>CORBA</acronym +></glossterm> +<glossdef> +<para +>Common Object Request Broker Architecture;, ein Standard für objektorientierte entfernte Programmausführung. </para> +</glossdef> +</glossentry> + +<glossentry id="gloss-cvs"> +<glossterm +><acronym +>CVS</acronym +></glossterm> +<glossdef> +<para +>Concurrent Versions System;, ein Software-Managementsystem, das von vielen Softwareprojekten einschließlich &kde; und &arts; verwendet wird. </para> +</glossdef> +</glossentry> + +<glossentry id="glos-fft"> +<glossterm +><acronym +>FFT</acronym +></glossterm> +<glossdef> +<para +>Fast Fourier Transformation, ein Algorithmus, um Daten aus dem Zeitraum in den Frequenzraum zu transformieren; das wird für Signalverarbeitung häufig benötigt. </para> +</glossdef> +</glossentry> + +<glossentry id="gloss-full-duplex"> +<glossterm +>Voll-Duplex</glossterm> +<glossdef> +<para +>Die Fähigkeit einer Soundkarte gleichzeitig Daten abzuspielen und aufzunehmen. </para> +</glossdef> +</glossentry> + +<glossentry id="gloss-gpl"> +<glossterm +><acronym +>GPL</acronym +></glossterm> +<glossdef> +<para +><acronym +>GNU</acronym +> General Public Lzenz, die von der Free Software Foundation festgelegt wurde für die Veröffentlichung von freier Software. </para> +</glossdef> +</glossentry> + +<glossentry id="gloss-gui"> +<glossterm +>&GUI;</glossterm> +<glossdef> +<para +>Graphische Benutzeroberfläche </para> +</glossdef> +</glossentry> + +<glossentry id="gloss-idl"> +<glossterm +><acronym +>IDL</acronym +></glossterm> +<glossdef> +<para +>Interface Definition Language, ein programmiersprachenunabhängiges Format zur Definition von Schnittstellen (Methoden und Daten). </para> +</glossdef> +</glossentry> + +<glossentry id="gloss-kde"> +<glossterm +>&kde;</glossterm> +<glossdef> +<para +>K Desktop Environment, ein Projekt zur Entwicklung einer freien graphischen Benutzeroberfläche für &UNIX;-kompatible Systeme. </para> +</glossdef> +</glossentry> + +<glossentry id="gloss-lgpl"> +<glossterm +><acronym +>LGPL</acronym +></glossterm> +<glossdef> +<para +><acronym +>GNU</acronym +> Lesser General Public Lizenz, eine Programmlizenz, die von der Free Software Foundation aufgeschrieben wurde, um die Bedingungen für die Veröffentlichung von freier Software festzulegen. Sie ist weniger restriktiv als die <acronym +>GPL</acronym +> und wird häufig für Programmbibliotheken verwendet. </para> +</glossdef> +</glossentry> + +<glossentry id="gloss-mcop"> +<glossterm +>&MCOP;</glossterm> +<glossdef> +<para +>Multimedia COmmunication Protocol, das Protokoll, das für die Kommunikation der Teile von &arts; verwendet wird, ähnlich zu <acronym +>CORBA</acronym +>, aber einfacher und für Multimedia optimiert. </para> +</glossdef> +</glossentry> + +<glossentry id="gloss-midi"> +<glossterm +>&MIDI;</glossterm> +<glossdef> +<para +>Musical Instrument Digital Interface, ein Standardprotokoll zur Kommunikation von elektronischen Musikinstrumenten, häufig auch das Dateifomat zur Speicherung von &MIDI;-Befehlen. </para> +</glossdef> +</glossentry> + +<glossentry id="gloss-oss"> +<glossterm +><acronym +>OSS</acronym +></glossterm> +<glossdef> +<para +>Open Sound System, die Soundtreiber, die zum &Linux;-Kernel gehören (manchmal auch <acronym +>OSS</acronym +>/Free) oder eine kommerzielle Version, die von 4Front Technologies vertrieben werden. </para> +</glossdef> +</glossentry> + +</glossary> diff --git a/tde-i18n-de/docs/tdemultimedia/artsbuilder/gui.docbook b/tde-i18n-de/docs/tdemultimedia/artsbuilder/gui.docbook new file mode 100644 index 00000000000..b769c161b6b --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/artsbuilder/gui.docbook @@ -0,0 +1,29 @@ +<!-- <?xml version="1.0" ?> +<!DOCTYPE chapter PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd"> +To validate or process this file as a standalone document, uncomment +this prolog. Be sure to comment it out again when you are done --> + +<!-- +<chapter id="gui-elements"> +<title +>&GUI; Elements</title> + +<sect1 id="gui-introduction"> +<title +>Introduction</title> + +</sect1> + +<sect1 id="parents"> +<title +>Parents</title> + +</sect1> + +<sect1 id="mixers"> +<title +>Mixers</title> + +</sect1> +</chapter> +--> diff --git a/tde-i18n-de/docs/tdemultimedia/artsbuilder/helping.docbook b/tde-i18n-de/docs/tdemultimedia/artsbuilder/helping.docbook new file mode 100644 index 00000000000..bc8f518eb16 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/artsbuilder/helping.docbook @@ -0,0 +1,237 @@ +<!-- <?xml version="1.0" ?> +<!DOCTYPE chapter PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd"> +To validate or process this file as a standalone document, uncomment +this prolog. Be sure to comment it out again when you are done --> + +<chapter id="contributing"> +<title +>&arts; unterstützen</title> + +<sect1 id="how-to-help"> +<title +>Wie Sie helfen können</title> + +<para +>Das &arts;-Projekt benötigt einerseite Hilfe von Entwicklern, um existierende Multimedia-Anwendungen für &arts; anzupassen, neue Anwendungen zu schreiben und die Möglichkeiten von &arts; zu erweitern. Andererseits gibt es auch viele Aufgaben, die von Anderen übernommen werden können. Es werden Tester benötigt, die Fehlermeldungen liefern, Übersetzer, die die Anwendungstexte und die Dokumentation in andere Sprachen übersetzen, Graphiker, die Bitmaps (besonders für die <application +>artsbuilder</application +>-Module) entwerfen, Musiker, die Beispiele für &arts; erzeugen, und Autoren, die die Dokumentation schreiben und korrigieren. </para> +</sect1> + +<sect1 id="mailing-lists"> +<title +>Mailinglisten</title> + +<para +>Viele Diskussionen zur Entwicklung von &arts; finden in einer von zwei Mailinglisten statt. Hier werden neue Fähigkeiten und Umsetzungsideen diskutiert, hierhin kann man sich bei Problemen wenden. </para> + +<para +>Die &kde;-Multimedia-Mailingliste ist für allgemeine Multimediathemen sowohl &arts; als auch andere Multimediaprogramme wie &noatun; und &aktion; betreffend. Sie können sich auf der Internetseite <ulink url="http://www.kde.org/mailinglists.html" +>http://www.kde.org/mailingslists.html</ulink +> oder durch eine E-Mail mit dem Betreff (subject) <userinput +>subscribe <replaceable +>Ihre-E-Mail-Adresse</replaceable +></userinput +> an <email +>[email protected]</email +> anmelden. Die Liste wird unter <ulink url="http://lists.kde.org" +>http://lists.kde.org</ulink +> archiviert. </para> + +<para +>In der &arts;-Mailingliste geht es um &arts;-spezifische Themen einschließlich der Nutzung von &arts; außerhalb von &kde;. Zur Anmeldung senden Sie eine E-Mail mit dem Inhalt <userinput +>subscribe <replaceable +>Ihre-E-Mail-Adresse</replaceable +></userinput +> an <email +>[email protected]</email +>. Die Liste wird unter <ulink url="http://space.twc.de/~stefan/arts-archive" +> http://space.twc.de/~stefan/arts-archive</ulink +> archiviert. </para> + +</sect1> + +<sect1 id="coding-standards"> +<title +>Programmierstandards (in Englisch)</title> + +<para +>For getting a consistent reading through all the sources, it is important to keep the coding style the same, all over the &arts; source. Please, even if you just write a module, try to write/format your source accordingly, as it will make it easier for different people to maintain the source tree, and easier to copy pieces of from one source to another. </para> + +<variablelist> +<varlistentry> +<term +>Naming of member functions</term> +<listitem> +<para +>&Qt;/&Java; style, that means capitalization on word breaks, and first letter always without capitalization; no underscores. </para> +<para +>This means for instance:</para> + +<programlisting +>createStructureDesc() + updateWidget(); + start(); </programlisting> + +</listitem> +</varlistentry> + +<varlistentry> +<term +>Class members</term> +<listitem> +<para +>Class members are not capitalized, such as menubar or button. </para> + +<para +>When there are accessing functions, the standard should be the &MCOP; way, that is, when having an long member <function +>foo</function +>, which shouldn't be visible directly, you create: </para> + +<programlisting +>foo(long new_value); + long foo(); </programlisting> + +<para +>functions to get and set the value. In that case, the real value of <function +>foo</function +> should be stored in <returnvalue +>_foo</returnvalue +>. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>Class names</term> +<listitem> +<para +>All classes should be wordwise capitalized, that means <classname +>ModuleView</classname +>, <classname +>SynthModule</classname +>. All classes that belong to the libraries should use the &arts; namespace, like <classname +>Arts::Soundserver</classname +>. </para> +<para +>The implementations of &MCOP; classes should get called <classname +>Class_impl</classname +>, such as <classname +>SoundServer_impl</classname +>. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>Parameters</term> +<listitem> +<para +>Parameters are always uncapitalized. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>Local variables</term> +<listitem> +<para +>Local variables are always uncapitalized, and may have names like <varname +>i</varname +>, <varname +>p</varname +>, <varname +>x</varname +>, &etc; where appropriate. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>Tab width (Shift width)</term> +<listitem> +<para +>One tab is as long as 4 spaces. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>Leerzeichen in Ausdrücken</term> +<listitem> +<para +>Normalerweise müssen in Ausdrücken keine Leerzeichen verwendet werden. Man kann sie allerdings zwischen Operatoren und ihren Operanden setzen. Falls man allerdings ein Leerzeichen direkt vor einen Operator (wie z.B. +) setzt, muss man auch nach dem Operator ein Leerzeichen setzen. Die einzige Ausnahme von dieser Regel bilden listenartige Ausdrücke (mit ,), bei denen man nur hinter dem "," ein Leerzeichen setzen darf. Man kann es aber auch weglassen. </para> +<para +>Die folgenden Beispiele demonstrieren die sinnvolle Verwendung von Leerzeichen: </para> +<programlisting +>{ + int a,b; + int c, d, e; + int f = 4; + + a=b=c=d+e+f; + a = b = c = d + e + f; + + if(a == 4) { + a = b = c = (d+e)/2; + } + + while(b<3) + c--; + + arts_debug("%d\n", c); +} +</programlisting> +<para +>Die folgenden Beispiele demonstrieren, wie Leerzeichen <emphasis +>nicht</emphasis +> verwendet werden dürfen. Bei Funktionsaufrufen, nach "if", "for", "switch" und so weiter dürfen keine Leerzeichen stehen. </para> +<programlisting +>{ + // FALSCH: In einer Liste dürfen Leerzeichen nur nach dem "," stehen + int a , b , c , d , e , f; + + // FALSCH: unsymmetrische Leerzeichen beim =-Operator + a= 5; + + // FALSCH: "if" ist eine Funktion, daher dürfen keine Leerzeichen folgen + if (a == 5) { + } + + // FALSCH: nach "while" darf kein Leerzeichen folgen + while (a--) + b++; + + // FALSCH: Auf Funktionsnamen dürfen keine Leerzeichen folgen + arts_debug ("%d\n", c); + + // FALSCH: keines von beiden ist ein member-Name + Arts::Object o = Arts::Object::null (); +} +</programlisting> +</listitem> +</varlistentry> + + +<varlistentry> +<term +>Naming of source files</term> +<listitem> +<para +>Source files should have no capitalization in the name. They should have the name of the class when they implement a single class. Their extension is <literal role="extension" +>.cc</literal +> if they refer to &Qt;/&GUI; independent code, and <literal role="extension" +>.cpp</literal +> if they refer to &Qt;/&GUI; dependant code. Implementation files for interfaces should be called <filename +><replaceable +>foo</replaceable +>_impl</filename +>, if Foo was the name of the interface. </para> + +<para +>&IDL; files should be called in a descriptive way for the collection of interfaces they contain, also all lower case. Especially it is not good to call an &IDL; file like the class itself, as the .mcopclass trader and type info entries will collide, then. </para> +</listitem> +</varlistentry> +</variablelist> +</sect1> + +</chapter> diff --git a/tde-i18n-de/docs/tdemultimedia/artsbuilder/index.cache.bz2 b/tde-i18n-de/docs/tdemultimedia/artsbuilder/index.cache.bz2 Binary files differnew file mode 100644 index 00000000000..fb40e844f40 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/artsbuilder/index.cache.bz2 diff --git a/tde-i18n-de/docs/tdemultimedia/artsbuilder/index.docbook b/tde-i18n-de/docs/tdemultimedia/artsbuilder/index.docbook new file mode 100644 index 00000000000..66193b3a38a --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/artsbuilder/index.docbook @@ -0,0 +1,417 @@ +<?xml version="1.0" ?> +<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [ + <!ENTITY kappname "&arts;"> + <!ENTITY tools SYSTEM "tools.docbook"> + <!ENTITY artsbuilder-doc SYSTEM "artsbuilder.docbook" +> + <!ENTITY detail SYSTEM "detail.docbook"> + <!ENTITY arts-midi SYSTEM "midi.docbook"> + <!ENTITY gui SYSTEM "gui.docbook"> + <!ENTITY mcop-ref SYSTEM "mcop.docbook"> + <!ENTITY arts-mcop SYSTEM "mcop.docbook"> + <!ENTITY apis SYSTEM "apis.docbook"> + <!ENTITY modules SYSTEM "modules.docbook"> + <!ENTITY porting SYSTEM "porting.docbook"> + <!ENTITY helping SYSTEM "helping.docbook"> + <!ENTITY future SYSTEM "future.docbook"> + <!ENTITY references SYSTEM "references.docbook"> + <!ENTITY arts-faq SYSTEM "faq.docbook"> + <!ENTITY arts-glossary SYSTEM "glossary.docbook"> + <!ENTITY digitalaudio SYSTEM "digitalaudio.docbook"> + <!ENTITY midiintro SYSTEM "midiintro.docbook"> + <!ENTITY MCOP "<acronym +>MCOP</acronym +>"> + <!ENTITY DCOP "<acronym +>DCOP</acronym +>"> + <!ENTITY MIDI "<acronym +>MIDI</acronym +>"> + <!ENTITY mcopidl "<application +>mcopidl</application +>"> + <!ENTITY IDL "<acronym +>IDL</acronym +>"> + <!ENTITY % German "INCLUDE" +> <!-- change language only here --> + <!ENTITY % addindex "IGNORE"> +]> + +<book lang="&language;"> +<bookinfo> +<title +>Das Handbuch zu &arts;</title> +<authorgroup> + +<author +><firstname +>Stefan</firstname +> <surname +>Westerfeld</surname +> <affiliation +> <address +><email +>[email protected]</email +></address> +</affiliation> +</author> + +<author +><firstname +>Jeff</firstname +> <surname +>Tranter</surname +> <affiliation +> <address +><email +>[email protected]</email +></address> +</affiliation> +</author> + +<othercredit role="translator" +><firstname +>Frank</firstname +><surname +>Schütte</surname +><affiliation +><address +><email +>[email protected]</email +></address +></affiliation +><contrib +>Übersetzung</contrib +></othercredit +> +</authorgroup> + +<copyright> +<year +>1999-2001</year> +<holder +>Stefan Westerfeld & Jeff Tranter</holder> +</copyright> +<legalnotice +>&FDLNotice;</legalnotice> + +<date +>2001-06-10</date> +<releaseinfo +>1.00.09</releaseinfo> + +<abstract +><para +>Dieses Handbuch beschreibt &arts;, den analogen Echtzeit-Synthesizer.</para> + +</abstract> + +<keywordset> +<keyword +>aRts</keyword> +<keyword +>artsbuilder</keyword> +<keyword +>Synthesizer</keyword> +<keyword +>Multimedia</keyword> +<keyword +>Struktur</keyword> +<keyword +>Musik</keyword> +<keyword +>Klänge</keyword> +<keyword +>KDE</keyword> +</keywordset> +</bookinfo> + +<chapter id="introduction"> +<title +>Einleitung</title> + +<sect1 id="what-is-arts"> +<title +>Was ist &arts;?</title> + +<para +>Der analoge Echtzeit-Synthesizer (&arts;) ist ein modulares System zur Synthetisierung von Klängen und Musik auf einem Computer. Mit Hilfe von kleinen Bausteinen namens Modulen kann der Benutzer leicht komplexe Audio-Werkzeuge zusammenstellen. Module stellen typische Funktionen wie Hüllkurvengeneratoren, Filter, Audioeffekte, Mixer und Wiedergabe digitaler Klänge in verschiedenen Dateiformaten zur Verfügung.</para> + +<para +>Der &artsd; Soundserver mixt Klänge aus unterschiedlichen Quellen in Echtzeit. Damit können sich verschiedene Anwendungen transparent die zur Verfügung stehende Hardware teilen.</para> + +<para +>Durch Verwendung von &MCOP;, dem Multimedia-Kommunikationsprotokoll, können Multimediaprogramme netzwerktransparent (aus Sicherheitsgründen mit Authentifizierung) und plattformübergreifend durch die Verwendung von Schnittstellen programmiert werden, die sprachunabhängig mit Hilfe von &IDL; festgelegt werden können. Es gibt auch eine Unterstützung für sonstige und älter Anwendungen, die nicht &arts; verwenden. &arts; stellt einen Kernbestandteil der &kde; 2-Umgebung dar und ist die Basis der &kde;-Multimedia-Architektur. &arts; wird zukünftig noch weitere Medien unterstützen, unter anderem Video. Wie auch &kde;, kann &arts; auf einigen Betriebssystemen, einschließlich &Linux; und BSD-Varianten eingesetzt werden. &arts; kann auch unabhängig von &kde; verwendet werden.</para> + +</sect1> + +<sect1 id="using-this-manual"> +<title +>Verwendung dieses Dokuments</title> + +<para +>Dieses Dokument ist eine umfassende Dokumentation für Benutzer unterschiedlicher Vorkenntnisse für &arts;. Falls Sie ein gelegentlicher Nutzer von Multimediaprogrammen sind, sollten Sie einen anderen Weg durch dieses Dokument wählen als ein Entwickler von &arts;-Anwendungen.</para> + +<para +>Sie sollten zuerst den Abschnitt <link linkend="installation" +>Herunterladen und Kompilieren von &arts;</link +> lesen, falls Sie &arts; installieren möchten. Sollten Sie bereits ein funktionierendes System haben (häufig als Teil ihrer Distribution) können Sie diesen Abschnitt überspringen.</para> + +<para +>Als nächstes sollten Sie die Abschnitte unter <link linkend="arts-tools" +>&arts;-Werkzeuge</link +>, besonders &artsd;, &artscontrol;, &artsshell; und &artsdsp; lesen. Diese Abschnitte helfen Ihnen bei der optimalen Nutzung von &arts;.</para> + +<para +>Wenn Sie weitergehende Arbeiten mit &arts; planen, lesen Sie das Kapitel über <link linkend="artsbuilder" +>&arts-builder;</link +> und überfliegen Sie die Schritt-für-Schritt-Einführung. Das sollte Ihnen einen Eindruck der großen Möglichkeiten von &arts; und den ohne Programmierung nutzbaren Modulen geben.</para> + +<para +>Wenn Sie mehr über die internen Details von &arts; wissen möchten, weil Sie Multimedia-Anwendungen programmieren oder &arts; erweitern wollen, lesen Sie einiges oder alles aus dem Kapitel <link linkend="arts-in-detail" +>&arts; Details</link +>. Das sollte Ihnen ein Verständnis der Konzepte von &arts; ermöglichen, die für eine erfolgreiche Programmentwicklung notwendig sind.</para> + +<para +>Wenn Sie besonders an den <acronym +>MIDI</acronym +>-Fähigkeiten von &arts; interessiert sind, sollten Sie das Kapitel <link linkend="midi" +>&MIDI;</link +> lesen.</para> + +<!-- TODO +<para +>To learn more about the &arts; graphical elements, either as an advanced +user of artsbuilder or to create new elements, read the section on <link +linkend="gui-elements" +><acronym +>GUI</acronym +> Elements</link +>.</para> +--> + +<para +>Falls Sie planen &arts;-kompatible Multimedia-Anwendungen zu programmieren, lesen Sie das Kapitel <link linkend="arts-apis" +>&arts; Anwendungsprogramm-Schnittstellen</link +>, das die verschiedenen <acronym +>APIs</acronym +>detailiert beschreibt.</para> + +<para +>Wenn Sie &arts; durch neue Module erweitern wollen, lesen Sie das Kapitel <link linkend="arts-modules" +>&arts;-Module</link +>.</para> + +<para +>Falls Sie eine Anwendung ändern wollen, sodass Sie mit &arts; zusammenarbeitet, lesen Sie das Kapiteln <link linkend="porting" +>Anwendungen für &arts; portieren</link +>.</para> + +<para +>Wie Sie Beiträge zu &arts; leisten können, erfahren Sie im Kapitel <link linkend="contributing" +>Zu &arts; beitragen</link +>. Die zukünftige Planung für &arts; erfahren Sie im Kapitel <link linkend="future-work" +>Zukünftige Arbeiten</link +>. Dort finden Sie auch Verknüpfungen zu weiteren <link linkend="references" +>Informationen</link +>.</para> + +<para +>Wir haben das Hanbuch mit einigem Zusatzmaterial abgerundet: Das sind im Einzelnen <link linkend="faq" +>Antworten auf häufig gestellte Fragen</link +>, eine <link linkend="contributors" +>Liste der Mitarbeiter</link +>, detailierte Informationen zu <link linkend="copyright-and-licenses" +>Copyright und Lizenz</link +> von &arts; und einige Hintergrundinformationen zu <link linkend="intro-digital-audio" +>digitalem Audio</link +> und <link linkend="midi-introduction" +>&MIDI;</link +>. Weiterhin ist ein <link linkend="glossary" +>Glossar</link +> der verwendeten Begriffe enthalten.</para> + +<note> +<para +>Dieses Handbuch ist noch keineswegs vollständig. Falls Sie Teile hinzufügen möchten, sind Sie sehr willkommen. Kontaktieren Sie in diesem Fall zuerstt Jeff Tranter <email +>[email protected]</email +> oder Stefan Westerfeld <email +>[email protected]</email +>, um Dopplungen zu vermeiden. </para> +</note> + +</sect1> + +<sect1 id="history"> +<title +>Entwicklungsgeschichte</title> + +<para +>Spät im Jahre 1997 begann Stefan Westerfeld mit der Arbeit an einem modularen Echtzeit-System zur Klang-Synthese. Das Programm war ursprünglich für einen Power-PC unter &AIX; bestimmt. Die erste Version war einfach, unterstützte aber ein vollständiges Flusssystem, das solche Aufgaben wie die Wiedergabe einer MP3-Datei oder das Durchleiten eines Audio-Datenstroms durch Effektmodule durchführen konnte. </para> + + +<para +>Der nächste Schritt war die Implementation eines &GUI;, so dass die Modules grafisch bearbeitet werden konnten. Stefan hatte einige Erfahrung mit &kde; und diese Umgebung wurde daher als &GUI;-System (in dem Bewußtsein, das eine GNOME/Gtk+-Version ebenfalls erforderlich sein könnte) benutzt. Später führte das dazu, das &Linux; die Hauptentwicklungsplattform wurde. Vom ursprünglichen Namen <application +>ksynth</application +> wurde das Projekt in &arts; umbenannt und die Entwicklungsgeschwindigkeit nahm zu. Das Projekt war zu dieser Zeit mit einem <acronym +>CORBA</acronym +>-basierten Protokoll, dutzenden von Modulen, einem grafischen Moduleditor, C- und C++-<acronym +>API</acronym +>-Dokumentation, Hilfsprogrammen und einer Mailingsliste und Internetseite mit einer kleinen Entwicklergruppe bereits recht vollständig. Diese ganze Entwicklung fand in der sehr kurzen Zeit von nur einem Jahr statt.</para> + +<para +>Bei der Planung von &kde; 2.0 wurde es dem &kde;-Team klar, das &kde; eine bessere Klanginfrastruktur und Unterstützung für Klänge und andere Stream-Medien benötigte. Man entschied sich, &arts; für diese Zwecke anzupassen, da bereits eine fundierte Architektur vorhanden war. Es wurde große Mühe in eine neue Version von &arts; investiert, die umfangreichtse Entwicklung war die Ersetzung des <acronym +>CORBA</acronym +>-Protokolls durch ein völlig neues Subsystem mit dem Namen &MCOP;, das für Multimedia optimiert ist. Die Version 0.4 von &arts; wurde Bestandteil der Version 2.0 von &kde;.</para> + +<para +>Die Arbeit an &arts; geht weiter. Die Arbeitsgeschwindigkeit wird verbessert und neue Funktionen werden hinzugefügt. Obwohl &arts; ein Kernbestandteil von &kde; ist, kann es auch ohne &kde; verwendet werden. Es findet auch Verwendung in Anwendungen, die über das traditionelle Multimedia hinausgehen. Das Projekt hat auch beim GNOME-Team einiges Interesse hervorgerufen, so dass die Möglichkeit besteht, das es eines Tages die Standard-Multimedia-Architektur für &UNIX;-Arbeitsplatzrechner wird.</para> + +</sect1> + +</chapter> + +&tools; +&artsbuilder-doc; +&detail; +&arts-midi; +&gui; +&mcop-ref; +&apis; +&modules; +&porting; +&helping; +&future; +&references; +&arts-faq; + +<chapter id="copyright-and-licenses"> + +<title +>&arts; Copyright und Lizensierung</title> + +<para +>&arts; Programm-Copyright 1998-2001 Stefan Westerfeld <email +>[email protected]</email +></para> + +<para +><anchor id="contributors"/> Dokumentation Copyright 1999-2001 Stefan Westerfeld <email +>[email protected]</email +> und Jeff Tranter <email +>[email protected]</email +>. </para> +<para +>Übersetzung: Frank Schütte <email +>[email protected]</email +></para +> +&underFDL; <para +>Alle Bibliotheken in &arts; stehen unter der <acronym +>GNU</acronym +> Lesser General Public Lizenz. Die überwiegende Menge des &arts;-Programms befindet sich in den Bibliotheken, einschließlich des gesamten <acronym +>MCOP</acronym +> und ArtsFlow. Damit können die Bibliotheken auch für nicht-freie/nicht-offene Anwendungen verwendet werden, falls gewünscht. </para> + +<para +>Es gibt einige Programme (wie <application +>artsd</application +>), die unter der <acronym +>GNU</acronym +> General Public Lizenz stehen. Da es unterschiedliche Einstellungen dazu gibt, ob es erlaubt ist, <acronym +>GPL</acronym +>-Anwendungen mit &Qt; zu linken, habe ich dieses explizit erlaubt, also zusätzlich zur <acronym +>GPL</acronym +>: Es ist auch erlaubt, dieses Programm mit der &Qt;-Bibliothek zu linken; dabei wird &Qt; wie eine Bibliothek benutzt, die normalerweise zu einem Betriebssystem dazugehört, ob das im Einzelfall so ist oder nicht (hier noch der Originaltext: "permission is also granted to link this program with the Qt library, treating Qt like a library that normally accompanies the operating system kernel, whether or not that is in fact the case.")</para> + +</chapter> + +<appendix id="installation"> +<title +>&arts; installieren</title> + +<para +>Um &arts; benutzen zu können, müssen Sie es zuerst installieren und starten. Dazu gibt es zwei Möglichkeiten, die in den nächsten beiden Abschnitten beschrieben werden. </para> + +<sect1 id="binary-install"> +<title +>Ein vorkompiliertes Binärpaket installieren</title> + +<para +>Der schnellste und einfachste Weg, um &arts; auf Ihrem System zu installieren ist ein vorkompiliertes Binärpaket. Aktuelle Versionen von &Linux;-Distributionen beinhalten &kde;, und wenn es sich um &kde; 2.0 oder später handelt, enthalten Sie &arts;. Wenn &kde; nicht in Ihrer Distribution enthalten ist, können Sie sie vielleicht von Ihrem Händler herunterladen. Alternativ sind manche Binärpakete auch von dritter Seite erhältlich. Achten Sie darauf, das die verwendeten Pakete kompatibel mit Ihrer Betriebssystemversion sind. </para> + +<para +>Eine grundlegende Installation von &kde; enthält den Soundserver, damit die meisten Anwendungen Klänge abspielen können. Wenn Sie das gesamte Paket der Multimedia-Werkzeuge und -Anwendungen haben wollen, müssen Sie vermutlich noch einige optionale Pakete installieren. </para> + +<para +>Der Nachteil an vorkompilierten Binärpaketen ist, das sie vermutlich nicht die aktuellste Version von &arts; enthalten. Das ist noch wahrscheinlicher, wenn Sie auf &CD-ROM; bereitstehen, da die Entwicklungsgeschwindigkeit von &arts; und &kde; so groß ist, das Medien wie die &CD-ROM; in der Regel nicht mithalten können. Sie werden auch feststellen, das, wenn Sie eine ungebräuchliche Distribution oder eine ungewöhnliche Konfiguration haben, Binärpakete nicht verfügbar sind. In solchen Fällen sind Sie auf die zweite Methode angewiesen. </para> + +</sect1> + +<sect1 id="source-install"> +<title +>Erstellen aus den Quelltexten</title> + +<para +>Der zeitaufwendigste aber flexibelste Weg ist, &arts; aus den Quelltexten selbst zu kompilieren. Das sichert, dass die kompilierte Version optimal für Ihre Systemeinrichtung geeignet ist und erlaubt Ihnen, die jeweils aktuelle Version zu verwenden. </para> + +<para +>Sie haben zwei Möglichkeiten -- entweder Sie installieren die letzte stabile Version, die zu &kde; gehört, oder Sie nehmen die aktuellste (aber vielleicht instabile) Version direkt aus dem <acronym +>CVS</acronym +>-Repository des &kde;-Projektes. Die meisten Benutzer, die nicht für &arts; entwickeln, sollten die stabile Version verwenden. Sie können sie von <ulink url="ftp://ftp.kde.org" +>ftp://ftp.kde.org</ulink +> oder von einem der vielen Mirrors herunterladen. Wenn Sie für &arts; entwickeln, sollten Sie die <acronym +>CVS</acronym +>-Version verwenden. Wenn Sie aRts ohne KDE verwenden wollen, können Sie einen selbstständigen Entwicklugsschnappschuß (Snapshot) von <ulink url="http://space.twc.de/~stefan/kde/arts-snapshot-doc.html" +> http://space.twc.de/~stefan/kde/arts-snapshot-doc.html</ulink +> herunterladen. </para> + +<para +>Weiterhin gilt, wenn Sie aus dem <acronym +>CVS</acronym +> kompilieren, es befinden sich einige Komponenten von &arts; (&dh; die grundlegenden Komponenten einschließlich des Soundservers) in dem <acronym +>CVS</acronym +>-Modul tdelibs, während weitere Komponenten (&zb; <application +>artsbuilder</application +>) sich im Modul tdemultimedia befinden. Das kann sich in Zukunft ändern. Im Modul kmusic finden Sie ebenfalls ein Version; es handelt sich dabei um die alte (vor-&kde; 2.0) Version, die jetzt überholt ist. </para> + +<para +>Die Vorbedingungen für die Kompilierung von &arts; sind die gleichen wie für den Rest von &kde;. Die configure-Skripte sollten Ihr Sytem identifizieren und anzeigen, falls benötigte Komponenten fehlen. Vergewissern Sie sich, das Ihr Sound-Treiber funktioniert (entweder der <acronym +>OSS</acronym +>/Free Kerneltreiber, der <acronym +>OSS</acronym +>-Treiber von 4Front Technologies oder der <acronym +>ALSA</acronym +>-Treiber mit <acronym +>OSS</acronym +>-Emulation). </para> + +<para +>Weitere Informationen zum Herunterladen und installieren von &kde; (einschließlich &arts;) finden Sie in der <ulink url="http://www.kde.org/documentation/faq/index.html" +>&kde; &FAQ;</ulink +>.</para> + +</sect1> + +</appendix> + +&digitalaudio; +&midiintro; +&arts-glossary; + +</book> +<!-- +Local Variables: +mode: sgml +sgml-omittag:nil +sgml-shorttag:t +sgml-namecase-general:t +sgml-general-insert-case:lower +sgml-minimize-attributes:nil +sgml-always-quote-attributes:t +sgml-indent-step:0 +sgml-indent-data:nil +End: +--> diff --git a/tde-i18n-de/docs/tdemultimedia/artsbuilder/mcop.docbook b/tde-i18n-de/docs/tdemultimedia/artsbuilder/mcop.docbook new file mode 100644 index 00000000000..84e77bce7f3 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/artsbuilder/mcop.docbook @@ -0,0 +1,1899 @@ +<!-- <?xml version="1.0" ?> +<!DOCTYPE chapter PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.1//EN" "dtd/kdex.dtd"> +To validate or process this file as a standalone document, uncomment +this prolog. Be sure to comment it out again when you are done --> + +<chapter id="mcop"> +<title +>&MCOP;: Objekt Modell und Streaming</title> + +<sect1 id="mcop-overview"> + +<title +>Ãberblick</title> + +<para +> &MCOP; ist der Standard, den &arts; für folgende Aufgaben verwendet: </para> + +<itemizedlist +> <listitem +> <para +> Kommunikation zwischen Objekten. </para +> </listitem +> <listitem +> <para +> Netzwerk-Transparenz. </para +> </listitem +> <listitem +> <para +> Beschreibung von Objekt-Schnittstellen. </para +> </listitem +> <listitem +> <para +> Programmiersprachenunabhängigkeit. </para +> </listitem +> </itemizedlist> + +<para +> Ein wichtiger Aspekt von &MCOP; ist die <emphasis +> Interface Description Language</emphasis +> , &IDL;, in der viele der Schnittstellen (Interfaces) und <acronym +>API</acronym +>s von &arts; sprachunabhängig definiert worden sind. </para> + +<para +> &IDL;-Schnittstellen werden durch den &IDL;-Ãbersetzer in C++-Quelltexte übersetzt. Wenn Sie eine Schnittstelle implementieren, verwenden Sie als Grundlage das Klassenskelett, das der &IDL;-Ãbersetzer erstellt hat. Wenn Sie eine Schnittstelle verwenden, benutzen Sie einen Wrapper. Auf diese Weise kann &MCOP; ein Protokoll verwenden, wenn das Objekt, das Sie verwenden nicht lokal ist - Sie haben also volle Netzwerk-Transparenz. </para> + +<para +> Dieses Kapitel soll die grundlegenden Möglichkeiten des Objektmodells beschreiben, das durch die Verwendung von &MCOP;, das Protokoll selbst und seine Verwendung in C++ (Sprachbindung) entsteht. Dieses Kapitel wird nicht übersetzt, da zur Programmierung ohnehin englische Sprachkenntnisse unabdingbar sind. </para> + +</sect1> + +<sect1 id="interfaces"> + +<title +>Interfaces and &IDL;</title> + +<para +> Many of the services provided by &arts;, such as modules and the sound server, are defined in terms of <acronym +>interfaces</acronym +>. Interfaces are specified in a programming language independent format: &IDL;. </para> + +<para +> This allows many of the implementation details such as the format of multimedia data streams, network transparency, and programming language dependencies, to be hidden from the specification for the interface. A tool, &mcopidl;, translates the interface definition into a specific programming language (currently only C++ is supported). </para> + +<para +> The tool generates a skeleton class with all of the boilerplate code and base functionality. You derive from that class to implement the features you want. </para> + +<para +> The &IDL; used by &arts; is similar to that used by <acronym +>CORBA</acronym +> and <acronym +>DCOM</acronym +>. </para> + +<para +> &IDL; files can contain: </para> + +<itemizedlist +> <listitem +> <para +> C-style #include directives for other &IDL; files. </para +> </listitem +> <listitem +> <para +> Definitions of enumerated and struct types, as in C/C++. </para +> </listitem +> <listitem +> <para +> Definitions of interfaces. </para +> </listitem +> </itemizedlist> + +<para +> In &IDL;, interfaces are defined much like a C++ class or C struct, albeit with some restrictions. Like C++, interfaces can subclass other interfaces using inheritance. Interface definitions can include three things: streams, attributes, and methods. </para> + +<sect2 id="streams"> + +<title +>Streams</title> + +<para +> Streams define multimedia data, one of the most important components of a module. Streams are defined in the following format: </para> + +<para +> [ async ] in|out [ multi ] <replaceable +>type</replaceable +> stream <replaceable +>name</replaceable +> [ , <replaceable +>name</replaceable +> ] ; </para> + +<para +> Streams have a defined direction in reference to the module, as indicated by the required qualifiers in or out. The type argument defines the type of data, which can be any of the types described later for attributes (not all are currently supported). Many modules use the stream type audio, which is an alias for float since that is the internal data format used for audio stream. Multiple streams of the same type can defined in the same definition uisng comma separated names. </para> + +<para +> Streams are by default synchronous, which means they are continuous flows of data at a constant rate, such as <acronym +>PCM</acronym +> audio. The async qualifier specifies an asynchronous stream, which is used for non-continuous data flows. The most common example of an async stream is &MIDI; messages. </para> + +<para +> The multi keyword, only valid for input streams, indicates that the interface supports a variable number of inputs. This is useful for implementing devices such as mixers that can accept any number of input streams. </para> + +</sect2> +<sect2 id="attributes"> + +<title +>Attributes</title> + +<para +> Attributes are data associated with an instance of an interface. They are declared like member variables in C++, and can can use any of the primitive types boolean, byte, long, string, or float. You can also use user-defined struct or enum types as well as variable sized sequences using the syntax sequence<type>. Attributes can optionally be marked readonly. </para> + +</sect2> +<sect2 id="methods"> + +<title +>Methods</title> + +<para +> As in C++, methods can be defined in interfaces. The method parameters are restricted to the same types as attributes. The keyword oneway indicates a method which returns immediately and is executed asynchronously. </para> + +</sect2> + +<sect2 id="standardinterfaces"> + +<title +>Standard Interfaces</title> + +<para +> Several standard module interfaces are already defined for you in &arts;, such as <interfacename +>StereoEffect</interfacename +>, and <interfacename +>SimpleSoundServer</interfacename +>. </para> + +</sect2> + +<sect2 id="example"> +<title +>Example</title> + +<para +> A simple example of a module taken from &arts; is the constant delay module, found in the file <filename +>tdemultimedia/arts/modules/artsmodules.idl</filename +>. The interface definition is listed below. </para> + +<programlisting> +interface Synth_CDELAY : SynthModule { + attribute float time; + in audio stream invalue; + out audio stream outvalue; +}; +</programlisting> + +<para +> This modules inherits from <interfacename +>SynthModule</interfacename +>. That interface, defined in <filename +>artsflow.idl</filename +>, defines the standard methods implemented in all music synthesizer modules. </para> + +<para +> The CDELAY effect delays a stereo audio stream by the time value specified as a floating point parameter. The interface definition has an attribute of type float to store the delay value. It defines two input audio streams and two output audio streams (typical of stereo effects). No methods are required other than those it inherits. </para> + +</sect2> + +</sect1> + +<sect1 id="more-about-streams"> +<title +>More About Streams</title> + +<para +> This section covers some additional topics related to streams. </para> + +<sect2 id="stream-types"> +<title +>Stream Types</title> + +<para +> There are various requirements for how a module can do streaming. To illustrate this, consider these examples: </para> + +<itemizedlist +> <listitem +> <para +> Scaling a signal by a factor of two. </para +> </listitem +> <listitem +> <para +> Performing sample frequency conversion. </para +> </listitem +> <listitem +> <para +> Decompressing a run-length encoded signal. </para +> </listitem +> <listitem +> <para +> Reading &MIDI; events from <filename class="devicefile" +>/dev/midi00</filename +> and inserting them into a stream. </para +> </listitem +> </itemizedlist> + +<para +> The first case is the simplest: upon receiving 200 samples of input the module produces 200 samples of output. It only produces output when it gets input. </para> + +<para +> The second case produces different numbers of output samples when given 200 input samples. It depends what conversion is performed, but the number is known in advance. </para> + +<para +> The third case is even worse. From the outset you cannot even guess how much data 200 input bytes will generate (probably a lot more than 200 bytes, but...). </para> + +<para +> The last case is a module which becomes active by itself, and sometimes produces data. </para> + +<para +> In &arts;s-0.3.4, only streams of the first type were handled, and most things worked nicely. This is probably what you need most when writing modules that process audio. The problem with the other, more complex types of streaming, is that they are hard to program, and that you don't need the features most of the time. That is why we do this with two different stream types: synchronous and asynchronous. </para> + +<para +> Synchronous streams have these characteristics: </para> + +<itemizedlist +> <listitem +> <para +> Modules must be able to calculate data of any length, given enough input. </para +> </listitem +> <listitem +> <para +> All streams have the same sampling rate. </para +> </listitem +> <listitem +> <para +> The <function +>calculateBlock()</function +> function will be called when enough data is available, and the module can rely on the pointers pointing to data. </para +> </listitem +> <listitem +> <para +> There is no allocation and deallocation to be done. </para +> </listitem +> </itemizedlist> + +<para +> Asynchronous streams, on the other hand, have this behaviour: </para> + +<itemizedlist +> <listitem +> <para +> Modules may produce data sometimes, or with varying sampling rate, or only if they have input from some filed escriptor. They are not bound by the rule <quote +>must be able to satisfy requests of any size</quote +>. </para +> </listitem +> <listitem +> <para +> Asynchronous streams of a module may have entirely different sampling rates. </para +> </listitem +> <listitem +> <para +> Outgoing streams: there are explicit functions to allocate packets, to send packets - and an optional polling mechanism that will tell you when you should create some more data. </para +> </listitem +> <listitem +> <para +> Incoming streams: you get a call when you receive a new packet - you have to say when you are through with processing all data of that packet, which must not happen at once (you can say that anytime later, and if everybody has processed a packet, it will be freed/reused) </para +> </listitem +> </itemizedlist> + +<para +> When you declare streams, you use the keyword <quote +>async</quote +> to indicate you want to make an asynchronous stream. So, for instance, assume you want to convert an asynchronous stream of bytes into a synchronous stream of samples. Your interface could look like this: </para> + +<programlisting> +interface ByteStreamToAudio : SynthModule { + async in byte stream indata; // the asynchonous input sample stream + + out audio stream left,right; // the synchronous output sample streams +}; +</programlisting> + +</sect2> + +<sect2 id="async-streams"> +<title +>Using Asynchronous Streams</title> + +<para +> Suppose you decided to write a module to produce sound asynchronously. Its interface could look like this: </para> + +<programlisting> +interface SomeModule : SynthModule +{ + async out byte stream outdata; +}; +</programlisting> + +<para +> How do you send the data? The first method is called <quote +>push delivery</quote +>. With asynchronous streams you send the data as packets. That means you send individual packets with bytes as in the above example. The actual process is: allocate a packet, fill it, send it. </para> + +<para +> Here it is in terms of code. First we allocate a packet: </para> + +<programlisting> +DataPacket<mcopbyte> *packet = outdata.allocPacket(100); +</programlisting> + +<para +> The we fill it: </para> + +<programlisting> +// cast so that fgets is happy that it has a (char *) pointer +char *data = (char *)packet->contents; + +// as you can see, you can shrink the packet size after allocation +// if you like +if(fgets(data,100,stdin)) + packet->size = strlen(data); +else + packet->size = 0; +</programlisting> + +<para +> Now we send it: </para> + +<programlisting> +packet->send(); +</programlisting> + +<para +> This is quite simple, but if we want to send packets exactly as fast as the receiver can process them, we need another approach, the <quote +>pull delivery</quote +> method. You ask to send packets as fast as the receiver is ready to process them. You start with a certain amount of packets you send. As the receiver processes one packet after another, you start refilling them with fresh data, and send them again. </para> + +<para +> You start that by calling setPull. For example: </para> + +<programlisting> +outdata.setPull(8, 1024); +</programlisting> + +<para +> This means that you want to send packets over outdata. You want to start sending 8 packets at once, and as the receiver processes some of them, you want to refill them. </para> + +<para +> Then, you need to implement a method which fills the packets, which could look like this: </para> + +<programlisting> +void request_outdata(DataPacket<mcopbyte> *packet) +{ + packet->size = 1024; // shouldn't be more than 1024 + for(int i = 0;i < 1024; i++) + packet->contents[i] = (mcopbyte)'A'; + packet->send(); +} +</programlisting> + +<para +> Thats it. When you don't have any data any more, you can start sending packets with zero size, which will stop the pulling. </para> + +<para +> Note that it is essential to give the method the exact name <methodname +>request_<replaceable +>streamname</replaceable +></methodname +>. </para> + +<para +> We just discussed sending data. Receiving data is much much simpler. Suppose you have a simple ToLower filter, which simply converts all letters in lowercase: </para> + +<programlisting> +interface ToLower { + async in byte stream indata; + async out byte stream outdata; +}; +</programlisting> + +<para +> This is really simple to implement; here is the whole implementation: </para> + +<programlisting> +class ToLower_impl : public ToLower_skel { +public: + void process_indata(DataPacket<mcopbyte> *inpacket) + { + DataPacket<mcopbyte> *outpacket = outdata.allocPacket(inpacket->size); + + // convert to lowercase letters + char *instring = (char *)inpacket->contents; + char *outstring = (char *)outpacket->contents; + + for(int i=0;i<inpacket->size;i++) + outstring[i] = tolower(instring[i]); + + inpacket->processed(); + outpacket->send(); + } +}; + +REGISTER_IMPLEMENTATION(ToLower_impl); +</programlisting> + +<para +> Again, it is essential to name the method <methodname +>process_<replaceable +>streamname</replaceable +></methodname +>. </para> + +<para +> As you see, for each arriving packet you get a call for a function (the <function +>process_indata</function +> call in our case). You need to call the <methodname +>processed()</methodname +> method of a packet to indicate you have processed it. </para> + +<para +> Here is an implenetation tip: if processing takes longer (&dh; if you need to wait for soundcard output or something like that), don't call processed immediately, but store the whole data packet and call processed only as soon as you really processed that packet. That way, senders have a chance to know how long it really takes to do your work. </para> + +<para +> As synchronization isn't so nice with asynchronous streams, you should use synchronous streams wherever possible, and asynchronous streams only when necessary. </para> + +</sect2> + +<sect2 id="default-streams"> +<title +>Default Streams</title> + +<para +> Suppose you have 2 objects, for example an AudioProducer and an AudioConsumer. The AudioProducer has an output stream and AudioConsumer has an input one. Each time you want to connect them, you will use those 2 streams. The first use of defaulting is to enable you to make the connection without specifying the ports in that case. </para> + +<para +> Now suppose the teo objects above can handle stereo, and each have a <quote +>left</quote +> and <quote +>right</quote +> port. You'd still like to connect them as easily as before. But how can the connecting system know which output port to connect to which input port? It has no way to correctly map the streams. Defaulting is then used to specify several streams, with an order. Thus, when you connect an object with 2 default output streams to another one with 2 default input streams, you don't have to specify the ports, and the mapping will be done correctly. </para> + +<para +> Of course, this is not limited to stereo. Any number of streams can be made default if needed, and the connect function will check that the number of defaults for 2 object match (in the required direction) if you don't specify the ports to use. </para> + +<para +> The syntax is as follows: in the &IDL;, you can use the default keyword in the stream declaration, or on a single line. For example: </para> + +<programlisting> +interface TwoToOneMixer { + default in audio stream input1, input2; + out audio stream output; +}; +</programlisting> + +<para +> In this example, the object will expect its two input ports to be connected by default. The order is the one specified on the default line, so an object like this one: </para> + +<programlisting> +interface DualNoiseGenerator { + out audio stream bzzt, couic; + default couic, bzzt; +}; +</programlisting> + +<para +> Will make connections from <quote +>couic</quote +> to <quote +>input1</quote +>, and <quote +>bzzt</quote +> to <quote +>input2</quote +> automatically. Note that since there is only one output for the mixer, it will be made default in this case (see below). The syntax used in the noise generator is useful to declare a different order than the declaration, or selecting only a few ports as default. The directions of the ports on this line will be looked up by &mcopidl;, so don't specify them. You can even mix input and output ports in such a line, only the order is important. </para> + +<para +> There are some rules that are followed when using inheritance: </para> + +<itemizedlist +> <listitem +> <para +> If a default list is specified in the &IDL;, then use it. Parent ports can be put in this list as well, whether they were default in the parent or not. </para +> </listitem +> <listitem +> <para +> Otherwise, inherit parent's defaults. Ordering is parent1 default1, parent1 default2..., parent2 default1... If there is a common ancestor using 2 parent branches, a <quote +>virtual public</quote +>-like merging is done at that default's first occurrence in the list. </para +> </listitem +> <listitem +> <para +> If there is still no default and a single stream in a direction, use it as default for that direction. </para +> </listitem +> </itemizedlist> + +</sect2> + +</sect1> +<sect1 id="attribute-change-notify"> +<title +>Attribute change notifications</title> + +<!-- TODO: This should be embedded better into the context - I mean: the + context should be written ;-). --> + +<para +> Attribute change notifications are a way to know when an attribute changed. They are a bit comparable with &Qt;'s or Gtk's signals and slots. For instance, if you have a &GUI; element, a slider, which configures a number between 0 and 100, you will usually have an object that does something with that number (for instance, it might be controlling the volume of some audio signal). So you would like that whenever the slider is moved, the object which scales the volume gets notified. A connection between a sender and a receiver. </para> + +<para +> &MCOP; deals with that by being able to providing notifications when attributes change. Whatever is declared as <quote +>attribute</quote +> in the &IDL;, can emit such change notifications, and should do so, whenever it is modified. Whatever is declared as <quote +>attribute</quote +> can also receive such change notifications. So for instance if you had two &IDL; interfaces, like these: </para> + +<programlisting> + interface Slider { + attribute long min,max; + attribute long position; + }; + interface VolumeControl : Arts::StereoEffect { + attribute long volume; // 0..100 + }; +</programlisting> + +<para +> You can connect them using change notifications. It works using the normal flowsystem connect operation. In this case, the C++ code to connect two objects would look like this: </para> + +<programlisting> +#include <connect.h> +using namespace Arts; +[...] +connect(slider,"position_changed",volumeControl,"volume"); +</programlisting> + +<para +> As you see, each attribute offers two different streams, one for sending the change notifications, called <function +><replaceable +>attributename</replaceable +>_changed</function +>, and one for receiving change notifications, called <function +>attributename</function +>. </para> + +<para +> It is important to know that change notifications and asynchronous streams are compatible. They are also network transparent. So you can connect a change notification of a float attribute of a &GUI; widget has to an asynchronous stream of a synthesis module running on another computer. This of course also implies that change notifications are <emphasis +>not synchronous</emphasis +>, this means, that after you have sent the change notification, it may take some time until it really gets received. </para> + +<sect2 id="sending-change-notifications"> + +<title +>Sending change notifications</title> + +<para +> When implementing objects that have attributes, you need to send change notifications whereever an attribute changes. The code for doing this looks like this: </para> + +<programlisting> + void KPoti_impl::value(float newValue) + { + if(newValue != _value) + { + _value = newValue; + value_changed(newValue); // <- send change notification + } + } +</programlisting> + +<para +> It is strongly recommended to use code like this for all objects you implement, so that change notifications can be used by other people. You should however void sending notifications too often, so if you are doing signal processing, it is probably the best if you keep track when you sent your last notification, so that you don't send one with every sample you process. </para> + +</sect2> + +<sect2 id="change-notifications-apps"> +<title +>Applications for change notifications</title> + +<para +> It will be especially useful to use change notifications in conjunction with scopes (things that visualize audio data for instance), gui elements, control widgets, and monitoring. Code using this is in <filename class="directory" +>tdelibs/arts/tests</filename +>, and in the experimental artsgui implementation, which you can find under <filename class="directory" +>tdemultimedia/arts/gui</filename +>. </para> + +<!-- TODO: can I markup links into the source code - if yes, how? --> + +<!-- LW: Linking into the source is problematic - we can't assume people are +reading this on a machine with the sources available, or that they aren't +reading it from a website. We're working on it! --> + +</sect2> +</sect1> + +<sect1 id="the-mcoprc-file"> + +<title +>The <literal role="extension" +>.mcoprc</literal +> file</title> + +<para +> The <literal role="extension" +>.mcoprc</literal +> file (in each user's home directory) can be used to configure &MCOP; in some ways. Currently, the following is possible: </para> + +<variablelist +> <varlistentry +> <term +>GlobalComm</term +> <listitem +> <para +> The name of an interface to be used for global communication. Global communication is used to find other objects and obtain the secret cookie. Multiple &MCOP; clients/servers that should be able to talk to each other need to have a GlobalComm object which is able to share information between them. Currently, the possible values are <quote +>Arts::TmpGlobalComm</quote +> to communicate via <filename class="directory" +>/tmp/mcop-<replaceable +>username</replaceable +></filename +> directory (which will only work on the local computer) and <quote +>Arts::X11GlobalComm</quote +> to communicate via the root window properties on the X11 server. </para +> </listitem +> </varlistentry +> <varlistentry +> <term +>TraderPath</term +> <listitem +> <para +> Specifies where to look for trader information. You can list more than one directory here, and separate them with commas, like </para +> </listitem +> </varlistentry +> <varlistentry +> <term +>ExtensionPath</term +> <listitem +> <para +> Specifies from which directories extensions (in the form of shared libraries) are loaded. Multiple values can be specified comma seperated. </para +> </listitem +> </varlistentry +> </variablelist> + +<para +> An example which uses all of the above is: </para> + +<programlisting> +# $HOME/.mcoprc file +GlobalComm=Arts::X11GlobalComm + +# if you are a developer, it might be handy to add a directory in your home +# to the trader/extension path to be able to add components without +# installing them +TraderPath="/opt/kde2/lib/mcop","/home/joe/mcopdevel/mcop" +ExtensionPath="/opt/kde2/lib","/home/joe/mcopdevel/lib" +</programlisting> + +</sect1> + +<sect1 id="mcop-for-corba-users"> +<title +>&MCOP; for <acronym +>CORBA</acronym +> Users</title> + +<para +> If you have used <acronym +>CORBA</acronym +> before, you will see that &MCOP; is much the same thing. In fact, &arts; prior to version 0.4 used <acronym +>CORBA</acronym +>. </para> + +<para +> The basic idea of <acronym +>CORBA</acronym +> is the same: you implement objects (components). By using the &MCOP; features, your objects are not only available as normal classes from the same process (via standard C++ techniques) - they also are available to remote servers transparently. For this to work, the first thing you need to do is to specify the interface of your objects in an &IDL; file - just like <acronym +>CORBA</acronym +> &IDL;. There are only a few differences. </para> + +<sect2 id="corba-missing"> +<title +><acronym +>CORBA</acronym +> Features That Are Missing In &MCOP;</title> + +<para +> In &MCOP; there are no <quote +>in</quote +> and <quote +>out</quote +> parameters on method invocations. Parameters are always incoming, the return code is always outgoing, which means that the interface: </para> + +<programlisting> +// CORBA idl +interface Account { + void deposit( in long amount ); + void withdraw( in long amount ); + long balance(); +}; +</programlisting> + +<para +> is written as </para> + +<programlisting> +// MCOP idl +interface Account { + void deposit( long amount ); + void withdraw( long amount ); + long balance(); +}; +</programlisting> + +<para +> in &MCOP;. </para> + +<para +> There is no exception support. &MCOP; doesn't have exceptions - it uses something else for error handling. </para> + +<para +> There are no union types and no typedefs. I don't know if that is a real weakness, something one would desperately need to survive. </para> + +<para +> There is no support for passing interfaces or object references </para> + +</sect2> + +<sect2 id="corba-different"> +<title +><acronym +>CORBA</acronym +> Features That Are Different In &MCOP;</title> + +<para +> You declare sequences as <quote +>sequence<replaceable +>type</replaceable +></quote +> in &MCOP;. There is no need for a typedef. For example, instead of: </para> + +<programlisting> +// CORBA idl +struct Line { + long x1,y1,x2,y2; +}; +typedef sequence<Line> LineSeq; +interface Plotter { + void draw(in LineSeq lines); +}; +</programlisting> + +<para +> you would write </para> + +<programlisting> +// MCOP idl +struct Line { + long x1,y1,x2,y2; +}; +interface Plotter { + void draw(sequence<Line> lines); +}; +</programlisting> + +</sect2> + +<sect2 id="no-in-corba"> +<title +>&MCOP; Features That Are Not In <acronym +>CORBA</acronym +></title> + +<para +> You can declare streams, which will then be evaluated by the &arts; framework. Streams are declared in a similar manner to attributes. For example: </para> + +<programlisting> +// MCOP idl +interface Synth_ADD : SynthModule { + in audio stream signal1,signal2; + out audio stream outvalue; +}; +</programlisting> + +<para +> This says that your object will accept two incoming synchronous audio streams called signal1 and signal2. Synchronous means that these are streams that deliver x samples per second (or other time), so that the scheduler will guarantee to always provide you a balanced amount of input data (&zb; 200 samples of signal1 are there and 200 samples signal2 are there). You guarantee that if your object is called with those 200 samples signal1 + signal2, it is able to produce exactly 200 samples to outvalue. </para> + +</sect2> + +<sect2 id="mcop-binding"> +<title +>The &MCOP; C++ Language Binding</title> + +<para +> This differs from <acronym +>CORBA</acronym +> mostly: </para> + +<itemizedlist +> <listitem +> <para +> Strings use the C++ <acronym +>STL</acronym +> <classname +>string</classname +> class. When stored in sequences, they are stored <quote +>plain</quote +>, that means they are considered to be a primitive type. Thus, they need copying. </para +> </listitem +> <listitem +> <para +> longs are plain long's (expected to be 32 bit). </para +> </listitem +> <listitem +> <para +> Sequences use the C++ <acronym +>STL</acronym +> <classname +>vector</classname +> class. </para +> </listitem +> <listitem +> <para +> Structures are all derived from the &MCOP; class <classname +>Type</classname +>, and generated by the &MCOP; &IDL; compiler. When stored in sequences, they are not stored <quote +>plain</quote +> , but as pointers, as otherwise, too much copying would occur. </para +> </listitem +> </itemizedlist> +</sect2> + +<sect2 id="implementing-objects"> +<title +>Implementing &MCOP; Objects</title> + +<para +> After having them passed through the &IDL; compiler, you need to derive from the <classname +>_skel</classname +> class. For instance, consider you have defined your interface like this: </para> + +<programlisting> +// MCOP idl: hello.idl +interface Hello { + void hello(string s); + string concat(string s1, string s2); + long sum2(long a, long b); +}; +</programlisting> + +<para +> You pass that through the &IDL; compiler by calling <userinput +><command +>mcopidl</command +> <parameter +>hello.idl</parameter +></userinput +>, which will in turn generate <filename +>hello.cc</filename +> and <filename +>hello.h</filename +>. To implement it, you need to define a C++-class that inherits the skeleton: </para> + +<programlisting> +// C++ header file - include hello.h somewhere +class Hello_impl : virtual public Hello_skel { +public: + void hello(const string& s); + string concat(const string& s1, const string& s2); + long sum2(long a, long b); +}; +</programlisting> + +<para +> Finally, you need to implement the methods as normal C++ </para> + +<programlisting> +// C++ implementation file + +// as you see string's are passed as const string references +void Hello_impl::hello(const string& s) +{ + printf("Hello '%s'!\n",s.c_str()); +} + +// when they are a returncode they are passed as "normal" strings +string Hello_impl::concat(const string& s1, const string& s2) +{ + return s1+s2; +} + +long Hello_impl::sum2(long a, long b) +{ + return a+b; +} +</programlisting> + +<para +> Once you do that, you have an object which can communicate using &MCOP;. Just create one (using the normal C++ facilities to create an object): </para> + +<programlisting> + Hello_impl server; +</programlisting> + +<para +> And as soon as you give somebody the reference </para> + +<programlisting> + string reference = server._toString(); + printf("%s\n",reference.c_str()); +</programlisting> + +<para +> and go to the &MCOP; idle loop </para> + +<programlisting> +Dispatcher::the()->run(); +</programlisting> + +<para +> People can access the thing using </para> + +<programlisting> +// this code can run anywhere - not necessarily in the same process +// (it may also run on a different computer/architecture) + + Hello *h = Hello::_fromString([the object reference printed above]); +</programlisting> + +<para +> and invoke methods: </para> + +<programlisting> + if(h) + h->hello("test"); + else + printf("Access failed?\n"); +</programlisting> + +</sect2> +</sect1> + +<sect1 id="mcop-security"> +<title +>&MCOP; Security Considerations</title> + +<para +> Since &MCOP; servers will listen on a <acronym +>TCP</acronym +> port, potentially everybody (if you are on the Internet) may try to connect &MCOP; services. Thus, it is important to authenticate clients. &MCOP; uses the md5-auth protocol. </para> + +<para +> The md5-auth protocol does the following to ensure that only selected (trusted) clients may connect to a server: </para> + +<itemizedlist +> <listitem +> <para +> It assumes you can give every client a secret cookie. </para +> </listitem +> <listitem +> <para +> Every time a client connects, it verifies that this client knows that secret cookie, without actually transferring it (not even in a form that somebody listening to the network traffic could find it out). </para +> </listitem +> </itemizedlist> + +<para +> To give each client the secret cookie, &MCOP; will (normally) put it in the <filename class="directory" +>mcop</filename +> directory (under <filename class="directory" +>/tmp/mcop-<envar +>USER</envar +>/secret-cookie</filename +>). Of course, you can copy it to other computers. However, if you do so, use a secure transfer mechanism, such as <command +>scp</command +> (from <application +>ssh</application +>). </para> + +<para +> The authentication of clients uses the following steps: </para> + +<procedure +> <step +> <para +> [SERVER] generate a new (random) cookie R </para +> </step +> <step +> <para +> [SERVER] send it to the client </para +> </step +> <step +> <para +> [CLIENT] read the "secret cookie" S from a file </para +> </step +> <step +> <para +> [CLIENT] mangle the cookies R and S to a mangled cookie M using the MD5 algorithm </para +> </step +> <step +> <para +> [CLIENT] send M to the server </para +> </step +> <step +> <para +> [SERVER] verify that mangling R and S gives just the same thing as the cookie M received from the client. If yes, authentication is successful. </para +> </step +> </procedure> + +<para +> This algorithm should be secure, given that </para> + +<orderedlist +> <listitem +> <para +> The secret cookies and random cookies are <quote +>random enough</quote +> and </para +> </listitem +> <listitem +> <para +> The MD5 hashing algorithm doesn't allow to find out the <quote +>original text</quote +>, that is the secret cookie S and the random cookie R (which is known, anyway), from the mangled cookie M. </para +> </listitem +> </orderedlist> + +<para +> The &MCOP; protocol will start every new connection with an authentication process. Basically, it looks like this: </para> + +<procedure +> <step +> <para +> Server sends a ServerHello message, which describes the known authentication protocols. </para +> </step +> <step +> <para +> Client sends a ClientHello message, which includes authentication info. </para +> </step +> <step +> <para +> Server sends an AuthAccept message. </para +> </step +> </procedure> + +<para +> To see that the security actually works, we should look at how messages are processed on unauthenticated connections: </para> + +<itemizedlist +> <listitem +> <para +> Before the authentication succeeds, the server will not receive other messages from the connection. Instead, if the server for instance expects a <quote +>ClientHello</quote +> message, and gets an mcopInvocation message, it will drop the connection. </para +> </listitem +> <listitem +> <para +> If the client doesn't send a valid &MCOP; message at all (no &MCOP; magic in the message header) in the authentication phase, but something else, the connection is dropped. </para +> </listitem +> <listitem +> <para +> If the client tries to send a very very large message (> 4096 bytes in the authentication phase, the message size is truncated to 0 bytes, which will cause that it isn't accepted for authentication) This is to prevent unauthenticated clients from sending &zb; 100 megabytes of message, which would be received and could cause the server to run out of memory. </para +> </listitem +> <listitem +> <para +> If the client sends a corrupt ClientHello message (one, for which demarshalling fails), the connection is dropped. </para +> </listitem +> <listitem +> <para +> If the client send nothing at all, then a timeout should occur (to be implemented). </para +> </listitem +> </itemizedlist> + +</sect1> + +<sect1 id="mcop-protocol"> +<title +>&MCOP; Protocol Specification</title> + +<sect2 id="mcop-protocol-intro"> +<title +>Einleitung</title> + +<para +> It has conceptual similarities to <acronym +>CORBA</acronym +>, but it is intended to extend it in all ways that are required for real time multimedia operations. </para> + +<para +> It provides a multimedia object model, which can be used for both: communication between components in one adress space (one process), and between components that are in different threads, processes or on different hosts. </para> + +<para +> All in all, it will be designed for extremely high performance (so everything shall be optimized to be blazingly fast), suitable for very communicative multimedia applications. For instance streaming videos around is one of the applications of &MCOP;, where most <acronym +>CORBA</acronym +> implementations would go down to their knees. </para> + +<para +> The interface definitions can handle the following natively: </para> + +<itemizedlist +> <listitem +> <para +> Continous streams of data (such as audio data). </para +> </listitem +> <listitem +> <para +> Event streams of data (such as &MIDI; events). </para +> </listitem +> <listitem +> <para +> Real reference counting. </para +> </listitem +> </itemizedlist> + +<para +> and the most important <acronym +>CORBA</acronym +> gimmicks, like </para> + +<itemizedlist +> <listitem +> <para +> Synchronous method invocations. </para +> </listitem +> <listitem +> <para +> Asynchronous method invocations. </para +> </listitem +> <listitem +> <para +> Constructing user defined data types. </para +> </listitem +> <listitem +> <para +> Multiple inheritance. </para +> </listitem +> <listitem +> <para +> Passing object references. </para +> </listitem +> </itemizedlist> + +</sect2> + +<sect2 id="mcop-protocol-marshalling"> +<title +>The &MCOP; Message Marshalling</title> + +<para +> Design goals/ideas: </para> + +<itemizedlist +> <listitem +> <para +> Marshalling should be easy to implement. </para +> </listitem +> <listitem +> <para +> Demarshalling requires the receiver to know what type he wants to demarshall. </para +> </listitem +> <listitem +> <para +> The receiver is expected to use every information - so skipping is only in the protocol to a degree that: </para +> <itemizedlist +> <listitem +> <para +> If you know you are going to receive a block of bytes, you don't need to look at each byte for an end marker. </para +> </listitem +> <listitem +> <para +> If you know you are going to receive a string, you don't need to read it until the zero byte to find out it's length while demarshalling, however, </para +> </listitem +> <listitem +> <para +> If you know you are going to receive a sequence of strings, you need to look at the length of each of them to find the end of the sequence, as strings have variable length. But if you use the strings for something useful, you'll need to do that anyway, so this is no loss. </para +> </listitem +> </itemizedlist +> </listitem +> <listitem +> <para +> As little overhead as possible. </para +> </listitem +> </itemizedlist> + +<!-- TODO: Make this a table --> + +<para +> Marshalling of the different types is show in the table below: </para> + +<informaltable> +<tgroup cols="3"> +<thead +> <row +> <entry +>Type</entry +> <entry +>Marshalling Process</entry +> <entry +>Result</entry +> </row +> </thead> + +<tbody +> <row +> <entry +><type +>void</type +></entry +> <entry +><type +>void</type +> types are marshalled by omitting them, so nothing is written to the stream for them.</entry +> <entry +></entry +> </row +> <row +> <entry +><type +>long</type +></entry +> <entry +>is marshalled as four bytes, the most significant byte first, so the number 10001025 (which is 0x989a81) would be marshalled as:</entry +> <entry +><literal +>0x00 0x98 0x9a 0x81</literal +></entry +> </row +> <row +> <entry +><type +>enums</type +></entry +> <entry +><para +>are marshalled like <type +>long</type +>s</para +></entry +> <entry +></entry +> </row +> <row +> <entry +><type +>byte</type +></entry +> <entry +><para +>is marshalled as a single byte, so the byte 0x42 would be marshalled as:</para +></entry +> <entry +><literal +>0x42</literal +></entry +> </row +> <row +> <entry +><type +>string</type +></entry +> <entry +><para +>is marshalled as a <type +>long</type +>, containing the length of the following string, and then the sequence of characters strings must end with one zero byte (which is included in the length counting).</para +> <important +> <para +>include the trailing 0 byte in length counting!</para +> </important +> <para +><quote +>hello</quote +> would be marshalled as:</para +></entry +> <entry +><literal +>0x00 0x00 0x00 0x06 0x68 0x65 0x6c 0x6c 0x6f 0x00</literal +></entry +> </row +> <row +> <entry +><type +>boolean</type +></entry +> <entry +><para +>is marshalled as a byte, containing 0 if <returnvalue +>false</returnvalue +> or 1 if <returnvalue +>true</returnvalue +>, so the boolean value <returnvalue +>true</returnvalue +> is marshalled as:</para +></entry +> <entry +><literal +>0x01</literal +></entry +> </row +> <row +> <entry +><type +>float</type +></entry +> <entry +><para +>is marshalled after the four byte IEEE754 representation - detailed docs how IEEE works are here: <ulink url="http://twister.ou.edu/workshop.docs/common-tools/numerical_comp_guide/ncg_math.doc.html" +>http://twister.ou.edu/workshop.docs/common-tools/numerical_comp_guide/ncg_math.doc.html</ulink +> and here: <ulink url="http://java.sun.com/docs/books/vmspec/2nd-edition/html/Overview.doc.html" +>http://java.sun.com/docs/books/vmspec/2nd-edition/html/Overview.doc.html</ulink +>. So, the value 2.15 would be marshalled as:</para +></entry +> <entry +><literal +>0x9a 0x99 0x09 0x40</literal +></entry +> </row +> <row +> <entry +><type +>struct</type +></entry +> <entry +><para +>A structure is marshalled by marshalling it's contents. There are no additional prefixes or suffixes required, so the structure </para +> <programlisting> +struct test { + string name; // which is "hello" + long value; // which is 10001025 (0x989a81) +}; +</programlisting +> <para +>would be marshalled as</para +></entry +> <entry +> <literallayout> +0x00 0x00 0x00 0x06 0x68 0x65 0x6c 0x6c +0x6f 0x00 0x00 0x98 0x9a 0x81 +</literallayout +></entry +> </row +> <row +> <entry +><type +>sequence</type +></entry +> <entry +><para +>a sequence is marshalled by listing the number of elements that follow, and then marshalling the elements one by one.</para +> <para +>So a sequence of 3 longs a, with a[0] = 0x12345678, a[1] = 0x01 and a[2] = 0x42 would be marshalled as:</para +></entry +> <entry +> <literallayout> +0x00 0x00 0x00 0x03 0x12 0x34 0x56 0x78 +0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x42 +</literallayout +> </entry +> </row +> </tbody> +</tgroup> +</informaltable> + +<para +> If you need to refer to a type, all primitive types are referred by the names given above. Structures and enums get own names (like Header). Sequences are referred as *<replaceable +>normal type</replaceable +>, so that a sequence of longs is <quote +>*long</quote +> and a sequence of Header struct's is <quote +>*Header</quote +>. </para> + +</sect2> + +<sect2 id="mcop-protocol-messages"> +<title +>Messages</title> + +<para +> The &MCOP; message header format is defined as defined by this structure: </para> + +<programlisting> +struct Header { + long magic; // the value 0x4d434f50, which is marshalled as MCOP + long messageLength; + long messageType; +}; +</programlisting> + +<para +> The possible messageTypes are currently </para> + +<programlisting> + mcopServerHello = 1 + mcopClientHello = 2 + mcopAuthAccept = 3 + mcopInvocation = 4 + mcopReturn = 5 + mcopOnewayInvocation = 6 +</programlisting> + +<para +> A few notes about the &MCOP; messaging: </para> + + +<itemizedlist +> <listitem +> <para +> Every message starts with a Header. </para +> </listitem +> <listitem +> <para +> Some messages types should be dropped by the server, as long as the authentication is not complete. </para +> </listitem +> <listitem +> <para +> After receiving the header, the protocol (connection) handling can receive the message completely, without looking at the contents. </para +> </listitem +> </itemizedlist> + +<para +> The messageLength in the header is of course in some cases redundant, which means that this approach is not minimal regarding the number of bytes. </para> + +<para +> However, it leads to an easy (and fast) implementation of non-blocking messaging processing. With the help of the header, the messages can be received by protocol handling classes in the background (non-blocking), if there are many connections to the server, all of them can be served parallel. You don't need to look at the message content, to receive the message (and to determine when you are done), just at the header, so the code for that is pretty easy. </para> + +<para +> Once a message is there, it can be demarshalled and processed in one single pass, without caring about cases where not all data may have been received (because the messageLength guarantees that everything is there). </para> + +</sect2> + +<sect2 id="mcop-protocol-invocations"> +<title +>Invocations</title> + +<para +> To call a remote method, you need to send the following structure in the body of an &MCOP; message with the messageType = 1 (mcopInvocation): </para> + +<programlisting> +struct Invocation { + long objectID; + long methodID; + long requestID; +}; +</programlisting> + +<para +> after that, you send the parameters as structure, &zb; if you invoke the method string concat(string s1, string s2), you send a structure like </para> + +<programlisting> +struct InvocationBody { + string s1; + string s2; +}; +</programlisting> + + +<para +> if the method was declared to be oneway - that means asynchronous without return code - then that was it. Otherwise, you'll receive as answer the message with messageType = 2 (mcopReturn) </para> + +<programlisting> +struct ReturnCode { + long requestID; + <resulttype> result; +}; +</programlisting> + + +<para +> where <resulttype> is the type of the result. As void types are omitted in marshalling, you can also only write the requestID if you return from a void method. </para> + +<para +> So our string concat(string s1, string s2) would lead to a returncode like </para> + +<programlisting> +struct ReturnCode { + long requestID; + string result; +}; +</programlisting> + +</sect2> + +<sect2 id="mcop-protocol-inspecting"> +<title +>Inspecting Interfaces</title> + +<para +> To do invocations, you need to know the methods an object supports. To do so, the methodID 0, 1, 2 and 3 are hardwired to certain functionalities. That is </para> + +<programlisting> +long _lookupMethod(MethodDef methodDef); // methodID always 0 +string _interfaceName(); // methodID always 1 +InterfaceDef _queryInterface(string name); // methodID always 2 +TypeDef _queryType(string name); // methodID always 3 +</programlisting> + +<para +> to read that, you of course need also </para> + +<programlisting> +struct MethodDef { + string methodName; + string type; + long flags; // set to 0 for now (will be required for streaming) + sequence<ParamDef> signature; +}; + +struct ParamDef { + string name; + long typeCode; +}; +</programlisting> + +<para +> the parameters field contains type components which specify the types of the parameters. The type of the returncode is specified in the MethodDef's type field. </para> + +<para +> Strictly speaking, only the methods <methodname +>_lookupMethod()</methodname +> and <methodname +>_interfaceName()</methodname +> differ from object to object, while the <methodname +>_queryInterface()</methodname +> and <methodname +>_queryType()</methodname +> are always the same. </para> + +<para +> What are those methodIDs? If you do an &MCOP; invocation, you are expected to pass a number for the method you are calling. The reason for that is, that numbers can be processed much faster than strings when executing an &MCOP; request. </para> + +<para +> So how do you get those numbers? If you know the signature of the method, that is a MethodDef that describes the method, (which contains name, type, parameter names, parameter types and such), you can pass that to _lookupMethod of the object where you wish to call a method. As _lookupMethod is hardwired to methodID 0, you should encounter no problems doing so. </para> + +<para +> On the other hand, if you don't know the method signature, you can find which methods are supported by using _interfaceName, _queryInterface and _queryType. </para> +</sect2> + +<sect2 id="mcop-protocol-typedefs"> +<title +>Type Definitions</title> + +<para +> User defined datatypes are described using the <structname +>TypeDef</structname +> structure: </para> + +<programlisting> +struct TypeComponent { + string type; + string name; +}; + +struct TypeDef { + string name; + + sequence<TypeComponent> contents; +}; +</programlisting> + +</sect2> +</sect1> + +<sect1 id="why-not-dcop"> +<title +>Why &arts; Doesn't Use &DCOP;</title> + +<para +> Since &kde; dropped <acronym +>CORBA</acronym +> completely, and is using &DCOP; everywhere instead, naturally the question arises why &arts; isn't doing so. After all, &DCOP; support is in <classname +>KApplication</classname +>, is well-maintained, supposed to integrate greatly with libICE, and whatever else. </para> + +<para +> Since there will be (potentially) a lot of people asking whether having &MCOP; besides &DCOP; is really necessary, here is the answer. Please don't get me wrong, I am not trying to say <quote +>&DCOP; is bad</quote +>. I am just trying to say <quote +>&DCOP; isn't the right solution for &arts;</quote +> (while it is a nice solution for other things). </para> + +<para +> First, you need to understand what exactly &DCOP; was written for. Created in two days during the &kde;-TWO meeting, it was intended to be as simple as possible, a really <quote +>lightweight</quote +> communication protocol. Especially the implementation left away everything that could involve complexity, for instance a full blown concept how data types shall be marshalled. </para> + +<para +> Even although &DCOP; doesn't care about certain things (like: how do I send a string in a network-transparent manner?) - this needs to be done. So, everything that &DCOP; doesn't do, is left to &Qt; in the &kde; apps that use &DCOP; today. This is mostly type management (using the &Qt; serialization operator). </para> + +<para +> So &DCOP; is a minimal protocol which perfectly enables &kde; applications to send simple messages like <quote +>open a window pointing to http://www.kde.org</quote +> or <quote +>your configuration data has changed</quote +>. However, inside &arts; the focus lies on other things. </para> + +<para +> The idea is, that little plugins in &arts; will talk involving such data structures as <quote +>midi events</quote +> and <quote +>songposition pointers</quote +> and <quote +>flow graphs</quote +>. </para> + +<para +> These are complex data types, which must be sent between different objects, and be passed as streams, or parameters. &MCOP; supplies a type concept, to define complex data types out of simpler ones (similar to structs or arrays in C++). &DCOP; doesn't care about types at all, so this problem would be left to the programmer - like: writing C++ classes for the types, and make sure they can serialize properly (for instance: support the &Qt; streaming operator). </para> + +<para +> But that way, they would be inaccessible to everything but direct C++ coding. Specifically, you could not design a scripting language, that would know all types plugins may ever expose, as they are not self describing. </para> + +<para +> Much the same argument is valid for interfaces as well. &DCOP; objects don't expose their relationships, inheritance hierarchies, etc. - if you were to write an object browser which shows you <quote +>what attributes has this object got</quote +>, you'd fail. </para> + + +<para +> While Matthias told me that you have a special function <quote +>functions</quote +> on each object that tells you about the methods that an object supports, this leaves out things like attributes (properties), streams and inheritance relations. </para> + +<para +> This seriously breaks applications like &arts-builder;. But remember: &DCOP; was not so much intended to be an object model (as &Qt; already has one with <application +>moc</application +> and similar), nor to be something like <acronym +>CORBA</acronym +>, but to supply inter-application communication. </para> + +<para +> Why &MCOP; even exists is: it should work fine with streams between objects. &arts; makes heavily use of small plugins, which interconnect themselves with streams. The <acronym +>CORBA</acronym +> version of &arts; had to introduce a very annoying split between <quote +>the SynthModule objects</quote +>, which were the internal work modules that did do the streaming, and <quote +>the <acronym +>CORBA</acronym +> interface</quote +>, which was something external. </para> + +<para +> Much code cared about making interaction between <quote +>the SynthModule objects</quote +> and <quote +>the <acronym +>CORBA</acronym +> interface</quote +> look natural, but it didn't, because <acronym +>CORBA</acronym +> knew nothing at all about streams. &MCOP; does. Look at the code (something like <filename +>simplesoundserver_impl.cc</filename +>). Way better! Streams can be declared in the interface of modules, and implemented in a natural looking way. </para> + +<para +> One can't deny it. One of the reasons why I wrote &MCOP; was speed. Here are some arguments why &MCOP; will definitely be faster than &DCOP; (even without giving figures). </para> + + +<para +> An invocation in &MCOP; will have a six-<quote +>long</quote +>-header. That is: </para> + +<itemizedlist +> <listitem +><para +>magic <quote +>MCOP</quote +></para +></listitem +> <listitem +><para +>message type (invocation)</para +></listitem +> <listitem +><para +>size of the request in bytes</para +></listitem +> <listitem +><para +>request ID</para +></listitem +> <listitem +><para +>target object ID</para +></listitem +> <listitem +><para +>target method ID</para +></listitem +> </itemizedlist> + +<para +> After that, the parameters follow. Note that the demarshalling of this is extremely fast. You can use table lookups to find the object and the method demarshalling function, which means that complexity is O(1) [ it will take the same amount of time, no matter how many objects are alive, or how many functions are there ]. </para> + +<para +> Comparing this to &DCOP;, you'll see, that there are at least </para> + +<itemizedlist +> <listitem +><para +>a string for the target object - something like <quote +>myCalculator</quote +></para +></listitem +> <listitem +><para +>a string like <quote +>addNumber(int,int)</quote +> to specify the method</para +></listitem +> <listitem +><para +>several more protocol info added by libICE, and other DCOP specifics I don't know</para +></listitem +> </itemizedlist> + +<para +> These are much more painful to demarshall, as you'll need to parse the string, search for the function, &etc;. </para> + +<para +> In &DCOP;, all requests are running through a server (<application +>DCOPServer</application +>). That means, the process of a synchronous invocation looks like this: </para> + +<itemizedlist +> <listitem +> <para +> Client process sends invocation. </para +> </listitem +> <listitem +> <para +> <application +>DCOPserver</application +> (man-in-the-middle) receives invocation and looks where it needs to go, and sends it to the <quote +>real</quote +> server. </para +> </listitem +> <listitem +> <para +> Server process receives invocation, performs request and sends result. </para +> </listitem +> <listitem +> <para +> <application +>DCOPserver</application +> (man-in-the-middle) receives result and ... sends it to the client. </para +> </listitem +> <listitem +> <para +> Client decodes reply. </para +> </listitem +> </itemizedlist> + +<para +> In &MCOP;, the same invocation looks like this: </para> + +<itemizedlist +> <listitem +> <para +> Client process sends invocation. </para +> </listitem +> <listitem +> <para +> Server process receives invocation, performs request and sends result. </para +> </listitem +> <listitem +> <para +> Client decodes reply. </para +> </listitem +> </itemizedlist> + +<para +> Say both were implemented correctly, &MCOP;s peer-to-peer strategy should be faster by a factor of two, than &DCOP;s man-in-the-middle strategy. Note however that there were of course reasons to choose the &DCOP; strategy, which is namely: if you have 20 applications running, and each app is talking to each app, you need 20 connections in &DCOP;, and 200 with &MCOP;. However in the multimedia case, this is not supposed to be the usual setting. </para> + +<para +> I tried to compare &MCOP; and &DCOP;, doing an invocation like adding two numbers. I modified testdcop to achieve this. However, the test may not have been precise on the &DCOP; side. I invoked the method in the same process that did the call for &DCOP;, and I didn't know how to get rid of one debugging message, so I used output redirection. </para> + +<para +> The test only used one object and one function, expect &DCOP;s results to decrease with more objects and functions, while &MCOP;s results should stay the same. Also, the <application +>dcopserver</application +> process wasn't connected to other applications, it might be that if many applications are connected, the routing performance decreases. </para> + +<para +> The result I got was that while &DCOP; got slightly more than 2000 invocations per second, &MCOP; got slightly more than 8000 invocations per second. That makes a factor of 4. I know that &MCOP; isn't tuned to the maximum possible, yet. (Comparision: <acronym +>CORBA</acronym +>, as implemented with mico, does something between 1000 and 1500 invocations per second). </para> + +<para +> If you want <quote +>harder</quote +> data, consider writing some small benchmark app for &DCOP; and send it to me. </para> + +<para +> <acronym +>CORBA</acronym +> had the nice feature that you could use objects you implemented once, as <quote +>seperate server process</quote +>, or as <quote +>library</quote +>. You could use the same code to do so, and <acronym +>CORBA</acronym +> would transparently descide what to do. With &DCOP;, that is not really intended, and as far as I know not really possible. </para> + +<para +> &MCOP; on the other hand should support that from the beginning. So you can run an effect inside &artsd;. But if you are a wave editor, you can choose to run the same effect inside your process space as well. </para> + +<para +> While &DCOP; is mostly a way to communicate between apps, &MCOP; is also a way to communicate inside apps. Especially for multimedia streaming, this is important (as you can run multiple &MCOP; objects parallely, to solve a multimedia task in your application). </para> + +<para +> Although &MCOP; does not currently do so, the possibilities are open to implement quality of service features. Something like <quote +>that &MIDI; event is really really important, compared to this invocation</quote +>. Or something like <quote +>needs to be there in time</quote +>. </para> + +<para +> On the other hand, stream transfer can be integrated in the &MCOP; protocol nicely, and combined with <acronym +>QoS</acronym +> stuff. Given that the protocol may be changed, &MCOP; stream transfer should not really get slower than conventional <acronym +>TCP</acronym +> streaming, but: it will be easier and more consistent to use. </para> + +<para +> There is no need to base a middleware for multimedia on &Qt;. Deciding so, and using all that nice &Qt;-streaming and stuff, will easily lead to the middleware becoming a &Qt;-only (or rather &kde;-only) thing. I mean: as soon as I'll see the GNOMEs using &DCOP;, too, or something like that, I am certainly proven wrong. </para> + +<para +> While I do know that &DCOP; basically doesn't know about the data types it sends, so that you could use &DCOP; without using &Qt;, look at how it is used in daily &kde; usage: people send types like <classname +>QString</classname +>, <classname +>QRect</classname +>, <classname +>QPixmap</classname +>, <classname +>QCString</classname +>, ..., around. These use &Qt;-serialization. So if somebody choose to support &DCOP; in a GNOME program, he would either have to claim to use <classname +>QString</classname +>,... types (although he doesn't do so), and emulate the way &Qt; does the streaming, or he would send other string, pixmap and rect types around, and thus not be interoperable. </para> + +<para +> Well, whatever. &arts; was always intended to work with or without &kde;, with or without &Qt;, with or without X11, and maybe even with or without &Linux; (and I have even no problems with people who port it to a popular non-free operating systems). </para> + +<para +> It is my position that non-&GUI;-components should be written non-&GUI;-dependant, to make sharing those among wider amounts of developers (and users) possible. </para> + +<para +> I see that using two <acronym +>IPC</acronym +> protocols may cause inconveniences. Even more, if they are both non-standard. However, for the reasons given above, switching to &DCOP; is no option. If there is significant interest to find a way to unite the two, okay, we can try. We could even try to make &MCOP; speak <acronym +>IIOP</acronym +>, then we'd have a <acronym +>CORBA</acronym +> <acronym +>ORB</acronym +> ;). </para> + +<para +> I talked with Matthias Ettrich a bit about the future of the two protocols, and we found lots of ways how things could go on. For instance, &MCOP; could handle the message communication in &DCOP;, thus bringing the protocols a bit closer together. </para> + +<para +> So some possible solutions would be: </para> + +<itemizedlist +> <listitem +> <para +> Write an &MCOP; - &DCOP; gateway (which should be possible, and would make interoperation possible) - note: there is an experimental prototype, if you like to work on that. </para +> </listitem +> <listitem +> <para +> Integrate everything &DCOP; users expect into &MCOP;, and try to only do &MCOP; - one could add an <quote +>man-in-the-middle-option</quote +> to &MCOP;, too ;) </para +> </listitem +> <listitem +> <para +> Base &DCOP; on &MCOP; instead of libICE, and slowly start integrating things closer together. </para +> </listitem +> </itemizedlist> + +<para +> However, it may not be the worst possibility to use each protocol for everything it was intended for (there are some big differences in the design goals), and don't try to merge them into one. </para> + +</sect1> +</chapter> + + + diff --git a/tde-i18n-de/docs/tdemultimedia/artsbuilder/midi.docbook b/tde-i18n-de/docs/tdemultimedia/artsbuilder/midi.docbook new file mode 100644 index 00000000000..dd750a8a52c --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/artsbuilder/midi.docbook @@ -0,0 +1,506 @@ +<!-- <?xml version="1.0" ?> +<!DOCTYPE chapter PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd"> +To validate or process this file as a standalone document, uncomment +this prolog. Be sure to comment it out again when you are done --> + +<chapter id="midi"> +<title +>&MIDI;</title> + +<sect1 id="midi-overview"> +<title +>Überblick</title> + +<!-- what-to-say-here: aRts has three roles + * moving midi events around between applications + * abstracting the hardware + * synthesizer --> + +<para +>Die &MIDI;-Unterstützung in &arts; hat verschiedene Aufgaben. Erstens ermöglicht sie die <emphasis +>Kommunikation</emphasis +> von verschiedenen Programmteilen, die &MIDI;-Ereignisse erzeugen oder verarbeiten. Wenn Sie z.B. über einen Sequenzer und einen Sampler verfügen, die beide &arts; unterstützen, kann &arts; &MIDI;-Ereignisse vom Sequenzer zum Sampler senden. </para> + +<para +>Auf der anderen Seite kann &arts; für ein Programm die <emphasis +>Interaktion mit Geräten</emphasis +> übernehmen. Wenn ein Programm (z.B. ein Sampler) &arts; unterstützt, kann es genau so gut &MIDI;-Ereignisse von einem externen &MIDI;-Keyboard empfangen. </para> + +<para +>Schließlich ist &arts; ein hervorragender <emphasis +>modularer Synthesizer</emphasis +>. Er ist genau dafür entworfen worden. Sie können mit artsbuilder aus den kleinen Modulen Instrumente zusammenstellen und diese Instrumente dann für Kompositionen oder zum Abspielen von Musik verwenden. Synthese heißt nicht notwendigerweise reine Synthese, es gibt Module, die Sie zum Abspielen von Samples verwenden können. Also kann &arts; ein Sampler, ein Synthesizer und mehr sein; &arts; ist vollständig modular, also leicht zum Erweitern und Experimentieren geeignet, mächtig und flexibel. </para> +</sect1> + +<sect1 id="midi-manager"> +<title +>Der &MIDI;-Manager</title> +<!-- what-to-say-here: + * how to use artscontrol - view midimanager + * what does autorestore do? (not yet implemented - so not yet documented) --> + +<para +>Die zentrale Komponente für Midi-Ereignisse innerhalb von &arts; ist der Midi-Manager. Er kontrolliert, welche Anwendungen verbunden sind und wie Midi-Ereignisse zwischen ihnen übertragen und verarbeitet werden sollen. Der Midi-Manager wird durch artscontrol gesteuert. Wählen Sie dazu <menuchoice +><guilabel +>Ansicht</guilabel +><guilabel +>Midi-Manager</guilabel +> </menuchoice +> im Menü. </para> + +<para +>Auf der linken Seite sehen Sieh <guilabel +>Midi-Eingänge</guilabel +>. Hier werden alle Geräte aufgelistet, die &MIDI;-Ereignisse produzieren. Das können externe &MIDI;-Kanäle sein, die mit einem externen Keyboard verbunden sind, ein Sequenzer, der ein Musikstück abspielt, oder eine andere &MIDI;-Quelle. Auf der rechten Seite sehen Sie <guilabel +>&MIDI;-Ausgänge</guilabel +>. Alle Geräte oder Programme, die &MIDI;-Ereignisse verarbeiten, sind hier aufgelistet. Das können simulierte Sampler (als Programme) oder externe &MIDI;-Kanäle, an denen ein Hardware-Sampler angeschlossen ist, sein. Neue Programme, wie z.B. Sequenzer, registrieren sich bei dem Midi-Manager, daher kann sich der Listeninhalt von Zeit zu Zeit ändern. </para> + +<para +>Sie können Ein- und Ausgänge verbinden, indem Sie den gewünschten Eingang auf der linken und den Ausgang auf der rechten Seite markieren und auf <guilabel +>Verbinden</guilabel +> klicken. Eine Trennung erreichen Sie mit dem Knopf <guilabel +>Trennen</guilabel +>. Die bestehenden Verbindungen werden durch günne Linien zwischen den Listen angezeigt. Sie können einen Midi-Eingang mit mehreren Midi-Ausgängen verbinden und umgekehrt. </para> + +<para +>Programme (wie der Sequenzer Brahms) fügen sich beim Start selbstständig zur entsprechenden Liste hinzu und entfernen sich beim Beenden selbstständig. Sie können aber auch von Hand Einträge hinzufügen, indem Sie im Menü <guilabel +>Hinzufügen</guilabel +> wählen. </para> + +<variablelist> +<varlistentry> +<term +><guimenuitem +>System-Midi-Kanal (OSS)</guimenuitem +></term> +<listitem> +<para +>Dadurch wird ein neues &arts;-Objekt erzeugt, das einen externen Midi-Kanal repräsentiert. </para> + +<para +>Da externe Midi-Kanäle sowohl senden als auch empfangen können, wird zu beiden Listen ein Eintrag hinzugefügt. Unter &Linux; benötigen Sie entweder einen <acronym +>OSS</acronym +>- (<acronym +>OSS/Free</acronym +> liegt Ihrem &Linux;-Kernel bei) oder einen <acronym +>ALSA</acronym +>-Treiber für Ihre Soundkarte installiert haben. Sie werden nach dem Gerätenamen gefragt. Er lautet normalerweise <filename class="devicefile" +>/dev/midi</filename +> oder <filename class="devicefile" +>/dev/midi00</filename +>. </para> + +<para +> Wenn Sie allerdings mehr als ein &MIDI;-Gerät oder einen &MIDI;-Loopback-Treiber installiert haben, ist die Auswahl größer. Informationen über die verfügbaren Midi-Kanäle finden Sie im &kcontrolcenter; unter <menuchoice +><guilabel +>Information</guilabel +> <guilabel +>Klänge</guilabel +></menuchoice +>. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guimenuitem +>aRts Synthese Midi-Ausgang</guimenuitem +></term> +<listitem> +<para +>Fügt einen neuen &MIDI;-Ausgang mit einem &arts;-Synthese-Instrument hinzu. Wenn Sie diesen Menüeintrag wählen, erscheint ein Dialog, der Ihnen die Wahl eines Instrumentes ermöglicht. Mit artsbuilder können Sie neue Instrumente erstellen. Alle <literal role="extension" +>.arts</literal +>-Dateien, die mit <filename +>instrument_</filename +> beginnen, werden hier aufgelistet. </para> +</listitem> +</varlistentry> +</variablelist> + +</sect1> + +<sect1 id="brahms"> +<title +>Verwendung von &arts; & Brahms</title> + +<para +>Zuerst benötigen Sie eine &kde; 2.1-taugliche Version von &brahms;. Sie finden Sie im <literal +>kmusic</literal +> <acronym +>CVS</acronym +>-Modul. Weitere Informationen zu &brahms; finden Sie auf der <ulink url="http://www.arts-project.org/" +>aRts-Internetseite</ulink +> im Bereich Download. </para> + +<para +>Wenn man die Anwendung startet, wird zunächst der &MIDI;-Manager angezeigt. Wenn man Klänge synthetisieren will, fügt man ein &MIDI;-Synthesizerinstrument über <menuchoice +><guilabel +>Hinzufügen</guilabel +><guilabel +>aRts Synthese Midi-Ausgang</guilabel +> </menuchoice +> hinzu. </para> + +<para +>Man wählt ein Instrument (zum Beispiel <guilabel +>organ2</guilabel +>). Man verbindet das Instrument über den Knopf <guilabel +>Verbinden</guilabel +>. Danach kann man mit &brahms; komponieren und die Ausgabe wird durch &arts; synthetisiert. </para> + +<para +>Man sollte das &artscontrol;-Fenster geöffnet lassen und die Lautstärkeeinstellung kontrollieren (die Qualität wird schlecht, wenn die Lautstärkeanzeige an die obere Grenze stösst). Nun kann man einneues Demolied für &arts; erstellen und es, wenn es fertig ist, unter aRts-project.org veröffentlichen ;-). </para> + +<!-- TODO: how to do more than one instrument in Brahms (hm, not implemented + yet, not documented yet), how to use samples, mapping and so on. These + things need to be implemented, too. --> + +</sect1> + +<sect1 id="midisend"> +<title +>midisend</title> + +<para +><command +>midisend</command +> ist ein kleines Programm, das &MIDI;-Ereignisse von der Kommandozeile senden kann. Es registriert sich als &MIDI;-Eingang wie alle anderen Anwendungen. Um es zu verwenden, geben Sie <screen +><prompt +>%</prompt +> <userinput +><command +>midisend</command +> <option +>-f</option +> <parameter +><replaceable +>/dev/midi00</replaceable +></parameter +></userinput +> </screen +> ein. Damit wird etwa das gleiche erreicht, wie durch das Hinzufügen eines System-Midikanals in artscontrol (nicht ganz, da midisend nur &MIDI;-Ereignisse senden aber nicht empfangen kann). Der Unterschied ist, das midisend auf unterschiedlichen Computern gestartet werden kann (und damit Netzwerktransparenz ermöglicht). </para> + +<para +>Sie können <command +>midisend</command +> auch Daten von <filename class="devicefile" +>stdin</filename +> senden lassen. Mit dem folgenden Befehl können sie Daten von Anwendungen, die &arts; nicht unterstützen, an &arts; weiterleiten: <screen +><prompt +>%</prompt +> <userinput +><command +><replaceable +>applicationwhichproducesmidieventsonstdout</replaceable +></command +> | <command +>midisend</command +> <option +>-f</option +> <option +><replaceable +>-</replaceable +></option +></userinput +></screen> +<!-- TODO: document all options --> +</para> + +</sect1> + +<sect1 id="midi-creating-instruments"> +<title +>Instrumente erstellen</title> + +<para +>&arts; synthetisiert Midi-Klänge auf folgende Weise. Es gibt eine Struktur, die einige Eingabekanäle, aus denen Frequenz und Lautstärke (velocity) und ein Parameter gelesen wird. Der Parameter zeigt an, ob die Taste noch heruntergedrückt ist. Die Struktur soll nun diese eine Note mit dieser Lautstärke und Frequenz erzeugen. Außerdem soll die Struktur auf den Wert des Parameters gedrückt reagieren (dabei bedeutet gedrückt=1 der Benutzer drückt die Taste immer noch herunter und gedrückt=0 die Taste wurde losgelassen). </para> + +<para +>Eingehende &MIDI;-Ereignisse veranlassen &arts;, neue Strukturen für jede gedrückte Taste zu generieren, ihnen die entsprechenden Parameter mitzugeben und sie wieder zu entfernen, sobald sie nicht mehr benötigt werden. </para> + +<para +>Eine Struktur wird auf folgende Art erzeugt und verwendet: </para> + +<itemizedlist> +<listitem> +<para +>Zum Beginn ist es am einfachsten, ein <filename +>template_Instrument.arts</filename +> in &arts-builder; zu öffnen. </para> + +<para +>Wählen Sie dazu <menuchoice +><guimenu +>Datei</guimenu +><guimenuitem +>Beispiel öffnen ...</guimenuitem +></menuchoice +> im Menü und im Dateidialog wählen Sie template_Instrument. Damit haben Sie eine leere Struktur mit den erforderlichen Parametern erzeugt, die Sie nur noch "ausfüllen" müssen. </para> +</listitem> + +<listitem> +<para +>Für den Parameter pressed(gedrückt) benutzen Sie entweder Synth_ENVELOPE_ADSR oder, für eine Schlagzeug wav-Datei, spielen sie einfach ab und ignorieren den Parameter. </para> +</listitem> + +<listitem> +<para +>Die Struktur sollte am Ausgang <quote +>done</quote +> anzeigen, das Sie nicht mehr benötigt wird. Wenn doneauf 1 gesetzt wird, nimmt &arts; an, das er die Struktur löschen kann. Angenehmerweise stellt das ADSR-Hüllkurven-Modul einen Parameter bereit, der anzeigt, wenn das Modul fertig ist. Sie müssen diesen Ausgang lediglich mit dem done-Ausgang Ihrer Struktur verbinden. </para> +</listitem> + +<listitem> +<para +>Sie sollten die Struktur in die Form <filename +>instrument_*</filename +> wie z.B. <filename +>instrument_piano.arts</filename +> umbenennen - unter diesem Namen sollten Sie die Struktur unter <filename class="directory" +>$<envar +>HOME</envar +>/arts/structures</filename +> speichern (dort speichert artsbuilder normalerweise Strukturen). </para> +</listitem> + +<listitem> +<para +>Schließlich, nachdem die Struktur gespeichert ist, können Sie sie im &MIDI;-Manager von artscontrol verwenden.</para> +</listitem> + +<listitem> +<para +>Und Sie müssen natürlich die Struktur so einrichten, das Sie ihre Audiodaten an den linken und rechten Ausgangskanal sendet, so dass sie schließlich durch den Audio-Manager (ein Teil von &artscontrol;) hörbar werden (oder sie mit Effekten weiterverarbeiten). </para> +</listitem> +</itemizedlist> + +<para +>Um zu lernen, wie Sie selbst ein Instrument erstellen, können Sie ein bereits vorhandenes Instrument analysieren (wählen Sie im Menü <menuchoice +><guimenu +>Datei</guimenu +><guimenuitem +>Beispiel öffnen</guimenuitem +></menuchoice +>). </para> +</sect1> + +<sect1 id="mapped-instruments"> +<title +>gemappte Instrumente</title> + +<para +>Gemappte Instrumente sind Instrumente, die sich abhängig von der Tonhöhe (pitch), dem Programm, dem Kanal und der Lautstärke (velocity) unterschiedlich verhalten. Sie könnten z.B. einen Klavierklang von 5 Oktaven bilden, indem Sie ein Sample für jede Oktave verwenden (entsprechende Höhenverschiebungen (pitchshifting) vorausgesetzt). Dieser Klang wird besser klingen als ein Sample für alle Oktaven. </para> + +<para +>Sie können auch eine Schlagzeug-Map bilden, die jeder Taste ein bestimmtes Schlaginstrument zuordnet. </para> + +<para +>Es ist sehr nützlich, wenn Sie einige unterschiedliche Klänge in ein gemapptes Instrument für verschiedene Programme zusammenfügen. Auf diese Weise können Sie Ihren Sequenzer, externes Keyboard oder andere &MIDI;-Quelle verwenden, um zwischen den Klängen umzuschalten, ohne das Sie &arts; umändern müssen. </para> + +<para +>Ein gutes Beispiel dafür ist das Instrument <filename +>arts_all</filename +>. Es fügt alle Instrumente in einer Map zusammen. Auf diese Weise müssen Sie lediglich einmal in &artscontrol; dieses <quote +>instrument</quote +> registrieren und schon können Sie ein komplettes Musikstück in einem Sequenzer komponieren, ohne &arts; umzuschalten. Wenn Sie einen anderen Klang benötigen, wechseln Sie einfach im Sequenzer das Programm und &arts; erzeugt einen anderen Klang. </para> + +<para +>Solche Maps können Sie auf einfache Weise erstellen. Sie müssen lediglich eine Textdatei anlegen, die einige Regeln enthält: </para> + +<programlisting +>ON <replaceable +>[ Bedingungen ...]</replaceable +> DO structure=<replaceable +>irgendeine Struktur</replaceable +>.arts +</programlisting> + +<para +>Die Bedingungen können eine oder mehrere der folgenden sein: </para> + +<variablelist> + +<varlistentry> +<term +><option +>pitch (Tonhöhe)</option +></term> + +<listitem> +<para +>Beim pitch handelt es sich um die gespielte Tonhöhe. Diese Bedingung verwenden Sie, wenn Sie den Instrumentenklang abhängig von der Tonhöhe aufteilen wollen. Von den Anfangsbeispielen würde ein Piano, das verschiedene Klänge für verschiedene Oktaven verwendet, mit einer solchen Bedingung erstellt. Sie können eine bestimmte Tonhöhe angeben, wie z.B. pitch=<parameter +>62</parameter +> oder einen Bereich wie pitch=<parameter +>60</parameter +>-<parameter +>72</parameter +>. Die möglichen Tonhöhen liegen zwischen <parameter +>0</parameter +> und <parameter +>127</parameter +>. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>program (Programm)</option +></term> +<listitem> +<para +>Das Programm, das auf dem Midi-Kanal aktiv ist, auf dem die Note gesendet wird. Üblicherweise kann man bei einem Sequenzer das <quote +>Instrument</quote +> über die Programmeinstellung auswählen. Einzelne Programme oder Bereiche sind erlaubt, also <userinput +><option +>program</option +>=<parameter +>3</parameter +></userinput +> oder <userinput +><option +>program</option +>=<parameter +>3</parameter +>-<parameter +>6</parameter +> </userinput +>. Die möglichen Programmeinstellungen reichen von <parameter +>0</parameter +> bis <parameter +>127</parameter +>. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>channel (Kanal)</option +></term> +<listitem> +<para +>Der Kanal, auf dem die Note gesendet wird. Einzelne Kanäle oder Kanalbereiche sind möglich, z.B. <userinput +><option +>channel</option +>=<parameter +>0</parameter +></userinput +> oder <userinput +><option +>channel</option +>=<parameter +>0</parameter +>-<parameter +>8</parameter +> </userinput +>. Die möglichen Werte liegen zwischen <parameter +>0</parameter +> und <parameter +>15</parameter +>. </para> +</listitem> + +</varlistentry> +<varlistentry> +<term +><option +>velocity (Lautstärke)</option +></term> +<listitem> +<para +>Die Lautstärke, die die Note hat. Einzelne Lautstärken (wofür eigentlich) oder Bereiche sind möglich, also <userinput +><option +>velocity</option +>=<parameter +>127</parameter +></userinput +> oder <userinput +><option +>veclocity</option +>=<parameter +>64</parameter +>-<parameter +>127</parameter +> </userinput +>. Die möglichen Werte liegen zwischen <parameter +>0</parameter +> und <parameter +>127</parameter +>. </para> +</listitem> +</varlistentry> +</variablelist> + +<para +>Ein komplettes Beispiel für eine Map sieht folgendermaßen aus (das Beispiel stammt aus <filename +>instrument_arts_all.arts-map</filename +>): </para> + +<programlisting +>ON program=0 DO structure=instrument_tri.arts +ON program=1 DO structure=instrument_organ2.arts +ON program=2 DO structure=instrument_slide1.arts +ON program=3 DO structure=instrument_square.arts +ON program=4 DO structure=instrument_neworgan.arts +ON program=5 DO structure=instrument_nokind.arts +ON program=6 DO structure=instrument_full_square.arts +ON program=7 DO structure=instrument_simple_sin.arts +ON program=8 DO structure=instrument_simple_square.arts +ON program=9 DO structure=instrument_simple_tri.arts +ON program=10 DO structure=instrument_slide.arts +ON program=11 pitch=60 DO structure=instrument_deepdrum.arts +ON program=11 pitch=61 DO structure=instrument_chirpdrum.arts +</programlisting> + +<para +>Wie Sie sehen, wird die Struktur abhängig vom Programm ausgewählt, beispielsweise sehen Sie als Programm 11 eine <quote +>Schlagzeug-Map</quote +> (mit zwei Einträgen), die eine <quote +>tiefe Trommel</quote +> auf C-5 (pitch=60) und eine <quote +>Snare-Trommel</quote +> auf C#-5 (pitch=61) spielt. </para> + +<para +>Um Map-Dateien in &artscontrol; als Instrumente zur Wahl erscheinen zu lassen, müssen Sie nach der Konvention <filename +>instrument_<replaceable +>irgendetwas</replaceable +>.arts-map</filename +> benannt werden und sich entweder unter Ihrem Persönlichen Verzeichnis in <filename class="directory" +>$<envar +>HOME</envar +>/arts/structures</filename +> oder im &kde;-Verzeichnis unter <filename class="directory" +>$<envar +>KDEDIR</envar +>/share/apps/artsbuilder/examples</filename +> befinden. Strukturen, die von dieser Map verwendet werden, können mit einem absoluten Pfad oder relativ zur Position der Map-Datei angegeben werden. </para> + +<para +>Es ist eine gute Ide, die arts_all.map zu erweitern oder vielleicht sogar eine General-&MIDI;-Map für &arts; zu erstellen. Das würde die Verwendung von &arts; vereinfachen. Bitte denken Sie darüber nach, ob Sie nicht interessante Instrumente für zukünftige Versionen von &arts; zur Verfügung stellen können. </para> +</sect1> + +<!-- TODO: Maybe helpful + * using an external keyboard + * loopback midi device + +<sect1 id="quick-start"> +<title +>Quick Start</title> + +</sect1> +<sect1 id="internal-details"> +<title +>More Internal Details</title> + +</sect1> + +<sect1 id="other-considerations"> +<title +>Other Considerations</title> + +</sect1> +--> + +</chapter> diff --git a/tde-i18n-de/docs/tdemultimedia/artsbuilder/midiintro.docbook b/tde-i18n-de/docs/tdemultimedia/artsbuilder/midiintro.docbook new file mode 100644 index 00000000000..0b18627a426 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/artsbuilder/midiintro.docbook @@ -0,0 +1,16 @@ +<!-- <?xml version="1.0" ?> +<!DOCTYPE appendix PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd"> +To validate or process this file as a standalone document, uncomment +this prolog. Be sure to comment it out again when you are done --> + +<appendix id="midi-introduction"> + +<title +>Einführung in <acronym +>MIDI</acronym +></title> + +<para +>Noch nicht geschrieben. </para> + +</appendix> diff --git a/tde-i18n-de/docs/tdemultimedia/artsbuilder/modules.docbook b/tde-i18n-de/docs/tdemultimedia/artsbuilder/modules.docbook new file mode 100644 index 00000000000..b6f6ccf91eb --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/artsbuilder/modules.docbook @@ -0,0 +1,1331 @@ +<!-- <?xml version="1.0" ?> +<!DOCTYPE chapter PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd"> +To validate or process this file as a standalone document, uncomment +this prolog. Be sure to comment it out again when you are done --> + +<chapter id="arts-modules"> +<title +>&arts;-Module</title> + + <sect1 id="modules-introduction"> +<title +>Einleitung</title> + +<para +>Dieses Kapitel beschreibt die Standardmodule von &arts;. Eine der mächtigsten Möglichkeiten von &arts; ist die Kombinierbarkeit von Modulen zu Strukturen, um neue Funktionen wie Effekte und Instrumente zu implementieren. </para> + +<para +>Die Module sind in Kategorien eingeteilt. Synthese-Module werden zur Implementation von <quote +>Verbindungen</quote +> benötigt, die Multimedia-Datenströme für neue Effekte, Instrumente, Mischer und Anwendungen zusammenfügen. Visuelle Module erlauben die Erzeugung einer graphischen Benutzeroberfläche zur Kontrolle der Klangstrukturen, die mit den Synthese-Modulen aufgebaut werden. </para> + +</sect1> + +<sect1 id="synth-modules-reference"> +<title +>Synthese-Modul Referenz</title> + + +<sect2 id="mcat-synth-arithmetic-mixing"> +<title +>Arithmetisch + Mix</title> + + + +<sect3 id="mref-synth-add-sect"> +<title +>Synth_ADD</title> +<anchor id="mref-synth-add"/> + +<mediaobject> +<imageobject> +<imagedata fileref="images/Synth_ADD.png" format="PNG"/></imageobject> +<textobject +><phrase +>Synth_ADD</phrase +></textobject> +</mediaobject> + +<para +>Addiert zwei Signale </para> + +</sect3> + +<sect3 id="mref-synth-mul-sect"> +<title +>Synth_MUL</title> +<anchor id="mref-synth-mul"/> + +<mediaobject> +<imageobject> +<imagedata fileref="images/Synth_MUL.png" format="PNG"/></imageobject> +<textobject +><phrase +>Synth_MUL</phrase +></textobject> +</mediaobject> + +<para +>Multiplizert ein Signal mit einem Faktor. Sie können dieses Modul verwenden, um ein Signal zu reduzieren (0 < Faktor < 1) oder zu verstärken (Faktor > 1), oder um ein Signal zu invertieren (Faktor < 0). Der Faktor kann ebenfalls ein Signal sein und muss keine Konstante sein (z.B. eine Hüllkurve oder ein reales Signal). </para> + +</sect3> + +<sect3 id="mref-synth-div-sect"> +<title +>Synth_DIV</title> +<anchor id="mref-synth-div"/> + +<mediaobject> +<imageobject> +<imagedata fileref="images/Synth_DIV.png" format="PNG"/></imageobject> +<textobject +><phrase +>Synth_DIV</phrase +></textobject> +</mediaobject> + +<para +>Dieses Modul teilt ein Signal durch einen Faktor. Es kann verwendet werden, um ein Signal durch ein anderes zu dividieren. Es kann aber auch invalue1 auf 1 gesetzt werden, damit das reziproke von invalue2 als outvalue erscheint. Allerdings darf dann invalue2 nicht 0 werden, da es sonst eine Division durch Null Probleme bereitet. </para> + +</sect3> + +<sect3 id="mref-synth-multi-add-sect"> +<title +>Synth_MULTI_ADD</title> +<anchor id="mref-synth-multi-add"/> + +<mediaobject> +<imageobject> +<imagedata fileref="images/Synth_MULTI_ADD.png" + format="PNG"/></imageobject> +<textobject +><phrase +>Synth_MULTI_ADD</phrase +></textobject> +</mediaobject> + +<para +>Addiert eine beliebige Anzahl von Signalen. Wenn Sie die Wellenformen von vier verschiedenen Oszillatoren addieren müssen, können Sie alle Ausgänge mit einem Synth_MULTI_ADD-Modul verbinden. Das ist effektiver als die Verwendung von drei Synth_ADD-Modulen. </para> + +</sect3> + +<sect3 id="mref-synth-xfade-sect"> +<title +>Synth_XFADE</title> +<anchor id="mref-synth-xfade"/> + +<mediaobject> +<imageobject +><imagedata fileref="images/Synth_XFADE.png" format="PNG"/> +</imageobject> +<textobject +><phrase +>Synth_XFADE</phrase +></textobject> +</mediaobject> + +<para +>Hiermit werden zwei Signale über Kreuz gemischt (crossfading). Wenn der Prozentsatz -1 beträgt, dann ist nur das linke, bei 1 nur das rechte und bei 0 sind beide Signale gleichstark hörbar. </para> + +<para +>Damit wird es möglich, ein Signal in einem definierten Bereich zu halten. Wenn Sie zwei Signale haben, die beide zwischen -1 und 1 vor dem Mischen waren, befindet sich das gemischte Signal ebenfalls zwischen -1 und 1. </para> +</sect3> + +<sect3 id="mref-synth-autopanner-sect"> +<title +>Synth_AUTOPANNER</title> +<anchor id="mref-synth-autopanner"/> + +<para +>Das Gegenteil eines crossfaders. Hier wird ein Monosignal aufgeteilt in ein Stereosignal: Das Modul kann das Signal automatisch zwischen dem rechten und linken Kanal aufteilen. Das macht lebendigere Mischungen möglich. Eine Standardanwendung wäre ein Gitarren- oder Gesangsklang. </para> + +<para +>Verbinden Sie einen <acronym +>LFO</acronym +>, eine Sinus- oder Sägezahnschwingung mit inlfo und wählen Sie eine Frequenz zwischen 0.1 und 5Hz für einen traditionellen Effekt oder eine höhere Frequenz für einen Special <acronym +>FX</acronym +>. </para> + +</sect3> + +</sect2> + +<sect2 id="mcat-synth-busses"> +<title +>Busse</title> + +<sect3 id="mref-synth-bus-uplink-sect"> +<title +>Synth_BUS_UPLINK</title> +<anchor id="mref-synth-bus-uplink"/> + +<mediaobject> +<imageobject +><imagedata fileref="images/Synth_BUS_UPLINK.png" + format="PNG"/> +</imageobject> +<textobject +><phrase +>Synth_BUS_UPLINK</phrase +></textobject> +</mediaobject> + +<para +>Ein Uplink zu einem Bus. Legen Sie ein Signal auf den linken und rechten Eingang und geben Sie dem <quote +>Bus</quote +> einen Namen, auf den die Daten gesendet werden sollen. Das kombinierte Signal von allen Uplinks mit dem gleichen Namen wird auf jedem Downlink mit diesem Namen anliegen. </para> +</sect3> + +<sect3 id="mref-synth-bus-downlink-sect"> +<title +>Synth_BUS_DOWNLINK</title> +<anchor id="mref-synth-bus-downlink"/> + +<mediaobject> +<imageobject> +<imagedata fileref="images/Synth_BUS_DOWNLINK.png" + format="PNG"/></imageobject> +<textobject +><phrase +>Synth_BUS_DOWNLINK</phrase +></textobject> +</mediaobject> + +<para +>Empfängt (Summe) alle Daten, die auf einen bestimmten Bus (der Name, den Sie beim Kanal <quote +>bus</quote +> festlegen) gesendet werden. </para> +</sect3> + +</sect2> + +<!-- TODO AFTER KDE2.1: move freeverb into delays, and rename category to + Delays & reverbs --> + +<sect2 id="mcat-synth-delays"> +<title +>Verzögerungen</title> + + + +<sect3 id="mref-synth-delay-sect"> +<title +>Synth_DELAY</title> +<anchor id="mref-synth-delay"/> + +<mediaobject> +<imageobject +><imagedata fileref="images/Synth_DELAY.png" + format="PNG"/></imageobject +></mediaobject> + +<para +>Verzögert das Eingangssignal um eine bestimmte Zeit. Die Zeit muss zwischen 0 und maxdelay für eine Verzögerung zwischen 0 und maxdelay Sekunden liegen. </para> + +<para +>Diese Art von Verzögerungen darf <emphasis +>nicht</emphasis +> in rückgekoppelten Strukturen verwendet werden, weil es sich um eine variable Verzögerungszeit handelt. Sie können die Zeit ändern, während das Modul läuft und sie auch auf Null setzen. Da aber in einer rückgekoppelten Struktur das eigene Ausgangssignal für die Berechnung des nächsten Eingangssignals notwendig ist, könnte eine Verzögerung, die auf Null abfällt, zu einem Einfrieren führen. </para> + +<para +>In einem solchen Fall können Sie aber CDELAY verwenden. Nehmen Sie eine geringe konstante Verzögerung (z.B. 0.001 Sekunden) zusammen mit einer einstellbaren Verzögerung. </para> + +<para +>Außerdem können Sie CDELAY und DELAY kombinieren, um eine variable Verzögerung mit einem positiven Minimalwert in einem rückgekoppelten System zu erhalten. Wichtig ist nur, das ein CDELAY-Modul vorhanden ist. </para> + +</sect3> + +<sect3 id="mref-synth-cdelay-sect"> +<title +>Synth_CDELAY</title> +<anchor id="mref-synth-cdelay"/> + +<mediaobject> +<imageobject +><imagedata fileref="images/Synth_CDELAY.png" +format="PNG"/></imageobject> +<textobject +><phrase +>Synth_CDELAY</phrase +></textobject> +</mediaobject> + +<para +>Verzögert das Eingangssignal um eine bestimmte Zeitspanne. Die Zeit muss größer als 0 für eine Verzögerung von mehr als 0 Sekunden sein. Die Verzögerung ist konstant während der Berechnung, kann also nicht verändert werden. </para> + +<para +>Das spart Rechenzeit, da keine Interpolation notwendig ist, und ist nützlich für rekursive Strukturen.Siehe weiter oben (Synth_DELAY). </para> + +</sect3> + +</sect2> + +<sect2 id="mcat-synth-envelopes"> +<title +>Hüllkurven</title> + + + +<sect3 id="mref-synth-envelope-adsr-sect"> +<title +>Synth_ENVELOPE_ADSR</title> +<anchor id="mref-synth-envelope-adsr"/> + +<mediaobject> +<imageobject +><imagedata fileref="images/Synth_ENVELOPE_ADSR.png" + format="PNG"/></imageobject> +<textobject +><phrase +>Synth_ENVELOPE_ADSR</phrase +></textobject> +</mediaobject> + +<para +>Dies ist eine klassische <acronym +>ADSR</acronym +>-Hüllkurve, das heißt Sie können folgendes festlegen: </para> + +<variablelist> +<varlistentry> +<term +>active</term> +<listitem> +<para +>Ob die Taste gerade vom Benutzer gedrückt wird. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>invalue</term> +<listitem> +<para +>Das Eingangssignal. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>attack</term> +<listitem> +<para +>Die Zeit zwischen dem Niederdrücken der Taste und dem Zeitpunkt zu dem das Signal seine maximale Amplitude erreicht (in Sekunden). </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>decay</term> +<listitem> +<para +>Die Zeit, bis das Signal nach dem Maximalwert einen konstanten Dauerwert annimmt (in Sekunden). </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>sustain</term> +<listitem> +<para +>Der konstante Dauerwert, bei dem das Signal gehalten wird, nachdem der Benutzer die Taste wieder losgelassen hat. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>release</term> +<listitem> +<para +>Die Zeit vom Loslassen der Taste bis das Signal den Wert Null wiedererreicht hat (in Sekunden). </para> +</listitem> +</varlistentry> +</variablelist> + +<para +>Das skalierte Signal liegt am Ausgang (outvalue) an. Wenn die <acronym +>ADSR</acronym +>-Hüllkurve beendet ist, wird der Ausgang done auf 1 gesetzt. Das können Sie verwenden, um für ein Instrument das Signal <quote +>done</quote +> zu generieren (das dazu führt, das die Struktur vom &MIDI;-Router nach dem Ende der Release-Phase gelöscht wird). </para> + +</sect3> + +<sect3 id="mref-synth-pscale-sect"> +<title +>Synth_PSCALE</title> +<anchor id="mref-synth-pscale"/> + +<mediaobject> +<imageobject +><imagedata fileref="images/Synth_PSCALE.png" +format="PNG"/></imageobject> +<textobject +><phrase +>Synth_PSCALE</phrase +></textobject> +</mediaobject> + +<para +>Das Synth_PSCALE-Modul skaliert einen Audiostrom von der Lautstärke 0 (Stille) bis 1 (Maximallautstärke) und zurück zu 0 (Stille). Gesteuert wird das durch den Eingang Position (pos) (dieser Eingang kann mit dem entsprechenden Ausgang von Synth_SEQUENCE belegt werden). Die Stelle, an der der Maximalwert erreicht werden soll, kann als Eingang pos angegeben werden. </para> + +<para +>Beispiel: Setzen Sie top auf 0.1. Das bedeutet, nach 10% der Note erreicht die Lautstärke ihren Maximalwert und klingt danach aus. </para> +</sect3> + +</sect2> + +<sect2 id="mcat-synth-effects"> +<title +>Effekte</title> + +<sect3 id="mref-synth-freeverb-sect"> +<title +>Synth_FREEVERB</title> +<anchor id="mref-synth-freeverb"/> + +<mediaobject> +<imageobject +><imagedata fileref="images/Synth_FREEVERB.png" +format="PNG"/></imageobject> +<textobject +><phrase +>Synth_FREEVERB</phrase +></textobject> +</mediaobject> + +<para +>Dies ist ein Nachhall-Effekt. In der augenblicklichen Implementation kann ein Stereosignal durch diesen Effekt geschickt werden. Dabei wird der Nachhall zum ursprünglichen Signal addiert. </para> + +<note> +<para +>Das bedeutet, Sie können das Modul ein innerhalb eines Stereo-Effektstapels verwenden. </para> +</note> + +<para +>Das Eingangssignal wird mit inleft und inright verbunden, das Ausgangssignal liegt bei outleft und outright an. </para> + +<para +>Sie können folgende Parameter festlegen: </para> + +<variablelist> +<varlistentry> +<term +>roomsize</term> +<listitem> +<para +>Die Größe des Raumes, für den der Nachhall simuliert wird (Bereich: 0..1, wobei 1 demgrößtmöglichen Raum entspricht). </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>damp</term> +<listitem> +<para +>Dies steuert einen Filter, der die Raumsimulation hohe Frequenzen absorbieren lässt. Der Bereich liegt zwischen 0 (keine Absorption) und 1 (sehr viel Absorption der hohen Frequenzen). </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>wet</term> +<listitem> +<para +>der Anteil des Nachhall-Signals (das ist der Anteil des Signals, das durch die Filter verändert und zu einer <quote +>nicht trockenen</quote +> Akustik, also einem <quote +>halligen Klang</quote +> führt. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>dry</term> +<listitem> +<para +>der Anteil des ursprünglichen Signals, der durchgelassen werden soll. Er führt eher zu einem Echo (oder kombinierter Verzögerung) anstatt einem Nachhall-Effekt (Bereich: 0..1) </para> +<!-- TODO: do some measurements to show that this documentation -is- correct, +I am not sure if it is echo, or really pure (non-delayed), or multiple delay +or whatever --> +</listitem> +</varlistentry> + +<varlistentry> +<term +>width</term> +<listitem> +<para +>Der Anteil an Stereo-Magie, den der Nachhall-Effekt hinzufügt und zu einem breiteren Klang im Stereo-Panorama führt (Bereich: 0..1). </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>mode</term> +<listitem> +<para +>[ TODO: Ich glaube, wenn mode 1 ist, wird das ursprüngliche Klangbild beibehalten, während mode 0 der normale Arbeitsmodus ist ] </para> +</listitem> +</varlistentry> +</variablelist> + +</sect3> + +<sect3 id="mref-synth-tremolo-sect"> +<title +>Synth_TREMOLO</title> +<anchor id="mref-synth-tremolo"/> + +<mediaobject +><imageobject +><imagedata fileref="images/Synth_TREMOLO.png" +format="PNG"/></imageobject> +<textobject +><phrase +>Synth_TREMOLO</phrase +></textobject> +</mediaobject> + +<para +>Das Tremolo-Modul verändert die Amplitude entsprechend einer <acronym +>LFO</acronym +>-Welle. Üblicherweise verwendet man dazu eine Sinusschwingung, aber das ist nicht zwingend notwendig. Man erhält einen intensiven Effekt, der in vielen Arrangements wegen seiner großen Dynamik sehr durchdringend ist. Der Tremolo-Effekt ist einer der liebsten Effekte für Gittaristen, wenn er auch nicht mehr so populär wie in den 1960ern ist. </para> + +<para +>[TODO: augenblicklich ist dieser Effekt als invalue + abs(inlfo) implementiert - vielleicht wäre es sinnvoller, diesen als invalue * (1+inlfo*depth) zu implementieren, wobei depth den Bereich 0..1 hat - das wird nach KDE2.1 entschieden. Falls Sie Anmerkungen haben, schicken Sie eine Mail an die &arts;-Liste ;). ] </para> + +</sect3> +<sect3 id="mref-synth-fx-cflanger-sect"> +<title +>Synth_FX_CFLANGER</title> +<anchor id="mref-synth-fx-cflanger"/> + +<mediaobject +><imageobject +><imagedata +fileref="images/Synth_FX_CFLANGER.png" format="PNG"/></imageobject> +<textobject +><phrase +>Synth_FX_CFLANGER</phrase +></textobject> +</mediaobject> + +<para +>Ein Flanger ist ein zeitveränderlicher Verzögerungseffekt. Um die Entwicklung von umfangreichen Flanger-Effekten einfacher zu gestalten, wurde dieses Modul hinzugefügt, das den Kern eines Ein-Kanal-Flangers darstellt. </para> + +<para +>Folgende Kanäle sind vorhanden:</para> + +<variablelist> +<varlistentry> +<term +>invalue</term> +<listitem> +<para +>Das Signal, das verarbeitet werden soll. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>lfo</term> +<listitem> +<para +>Möglichst eine Sinusschwingung, die die Verzögerungszeit (delay) innerhalb des Flangers moduliert (-1 .. 1). </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>mintime</term> +<listitem> +<para +>Der minimale Wert für die Verzögerung (delay) innerhalb des Flangers in Millisekunden. Empfohlene Werte: versuchen sie etwa 1 ms. Bitte verwenden Sie Werte < 1000 ms. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>maxtime</term> +<listitem> +<para +>Der minimale Wert für die Verzögerung (delay) innerhalb des Flangers in Millisekunden. Empfohlene Werte: versuchen sie etwa 5 ms. Bitte verwenden Sie Werte < 1000 ms. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>outvalue</term> +<listitem> +<para +>Das Ausgangssignal. Für den Effekt ist es wichtig, dass dieses Signal mit dem ursprünglichen (nicht veränderten) Signal gemischt wird. </para> +</listitem> +</varlistentry> +</variablelist> + +<tip> +<para +>Sie können dieses als die Basis für einen Choreffekt verwenden. </para> +</tip> + +</sect3> + +</sect2> + +<sect2 id="mcat-synth-filters"> +<title +>Filter</title> + +<sect3 id="mref-synth-pitch-shift-sect"> +<title +>Synth_PITCH_SHIFT</title> +<anchor id="mref-synth-pitch-shift"/> + +<mediaobject +><imageobject +><imagedata +fileref="images/Synth_PITCH_SHIFT.png" format="PNG"/></imageobject> +<textobject +><phrase +>Synth_PITCH_SHIFT</phrase +></textobject> +</mediaobject> + +<para +>Dieser Höhenverschiebungseffekt verändert die Frequenz des Eingangssignals ohne die Geschwindigkeit des Signals zu verändern. Eine Anwendung für diesen Effekt ist die Veränderung Ihrer Stimme, während Sie sie aufnehmen (und abspielen) in Echtzeit </para> + +<para +>Der Parameter <emphasis +>speed</emphasis +> gibt die relative Geschwindigkeit wieder, mit der das Signal wiedergegeben wird. Eine Geschwindigkeit von 2 würde den Klang auf die doppelte Frequenz anheben (z.B. würde eine Eingangsfrequenz von 440Hz zu einer Ausgangsfrequenz von 880Hz führen). </para> + +<para +>Der Parameter <emphasis +>frequency(Frequenz)</emphasis +> wird intern verwendet, um zwischen unterschiedlichen Signalgüten umzuschalten. Abhängig von Ihrer Wahl wird der erzeugte Klang mehr oder weniger realistisch sein. Ein guter Startwert liegt zwischen 5 und 10. </para> + +</sect3> + +<sect3 id="mref-synth-shelve-cutoff-sect"> +<title +>Synth_SHELVE_CUTOFF</title> +<anchor id="mref-synth-shelve-cutoff"/> + +<mediaobject +><imageobject +><imagedata +fileref="images/Synth_SHELVE_CUTOFF.png" format="PNG"/></imageobject> +<textobject +><phrase +>Synth_SHELVE_CUTOFF</phrase +></textobject> +</mediaobject> + +<para +>Filtert alle Frequenzen oberhalb einer Grenzfrequenz heraus. </para> + +</sect3> + +<sect3 id="mref-synth-brickwall-limiter-sect"> +<title +>Synth_BRICKWALL_LIMITER</title> +<anchor id="mref-synth-brickwall-limiter"/> + +<mediaobject +><imageobject +><imagedata +fileref="images/Synth_BRICKWALL_LIMITER.png" + format="PNG"/></imageobject> +<textobject +><phrase +>Synth_BRICKWALL_LIMITER</phrase +></textobject> +</mediaobject> + +<para +>Dieses Modul beschneidet ein Signal, um es in den Bereich von [-1;1] einzupassen. Es werden keine Maßnahmen gegen die Störungen getroffen, die beim Abschneiden lauter Signale entstehen. Sie können das als Effekt verwenden (z.B. um eine leicht abgeschnittene Sinusschwingung zu erzeugen). Es ist wahrscheinlich meistens eine gute Idee, das Resultat durch einen Tiefpassfilter zu schicken, damit es nicht so aggressiv klingt. </para> +</sect3> + +<sect3 id="mref-synth-std-equalizer-sect"> +<title +>Synth_STD_EQUALIZER</title> +<anchor id="mref-synth-std-equalizer"/> + +<mediaobject +><imageobject +><imagedata +fileref="images/Synth_STD_EQUALIZER.png" format="PNG"/></imageobject> +<textobject +><phrase +>Synth_STD_EQUALIZER</phrase +></textobject> +</mediaobject> + +<para +>Ein hübsches Modul eines parametrischen Equalizers. Folgende Parameter sind vorhanden: </para> + +<variablelist> +<varlistentry> +<term +>invalue, outvalue</term> +<listitem> +<para +>Das Signal, das durch den Equalizer gefiltert wird. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>low</term> +<listitem> +<para +>Wie tiefe Frequenzen verändert werden sollen. Der Wert ist in dB, wobei 0 keine Änderung der tiefen Frequenzen bedeutet, -6 bedeutet Absenkung um 6dB und +6 bedeutet Anhebung um 6dB. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>mid</term> +<listitem> +<para +>Wie mittlere Frequenzen durch den Equalizer verändert werden sollen in dB (siehe auch low). </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>high</term> +<listitem> +<para +>Wie hohe Frequenzen durch den Equalizer verändert werden sollen in dB (siehe auch low). </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>frequency</term> +<listitem> +<para +>Dies ist die zentral Frequenz des Equalizers in Hz, die mittleren Frequenzen befinden sich in diesem Bereich, die hohen und tiefen Frequenz oberhalb und unterhalb. Anmerkung: die Frequenz kann nicht höher als die halbe Samplingrate sein, also normalerweise 22050Hz, und nicht tiefer als 1 Hz. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>q</term> +<listitem> +<para +>Beeinflusst die Breite des Frequenzspektrums. Es sind nur positive Zahlen > 0 erlaubt. Der Wert Eins ist sinnvoll, höhere Werte von q bedeuten ein schmaleres Frequenzband der mittleren Frequenzen, geringere Werte ein breiteres Band. </para> +</listitem> +</varlistentry> +</variablelist> + +</sect3> + +<sect3 id="mref-synth-rc-sect"> +<title +>Synth_RC</title> +<anchor id="mref-synth-rc"/> + +<mediaobject +><imageobject +><imagedata fileref="images/Synth_RC.png" +format="PNG"/></imageobject> +<textobject +><phrase +>Synth_RC</phrase +></textobject> +</mediaobject> + +<para +>Ein gedämpfter Schwingkreis, der alle Frequenzen um seine Resonanzfrequenz filtert. Es gibt keine leichte Möglichkeit, die Resonanzfrequenz festzulegen (die nicht herausgefiltert wird), da es nur zwei ungewöhnliche Konstanten f und b gibt. Der Programmteil stammt noch aus den ersten Tagen von Synthesizern und wird vermutlich durch einen neuen Filter ersetzt werden, bei dem man die Frequenz und den Resonanzwert als Parameter hat. </para> + +<para +>Versuchen Sie etwa b=5, f=5 oder b=10, f=10 oder b=15, f=15. </para> + +</sect3> + +<sect3 id="mref-synth-moog-vcf-sect"> +<title +>Synth_MOOG_VCF</title> +<anchor id="mref-synth-moog-vcf"/> + +<mediaobject +><imageobject +><imagedata fileref="images/Synth_MOOG_VCF.png" +format="PNG"/></imageobject> +<textobject +><phrase +>Synth_MOOG_VCF</phrase +></textobject> +</mediaobject> + +<para +>Filtert alle Frequenzen oberhalb einer Grenzfrequenz heraus (es handelt sich um einen 24db 4pole-Filter, der -24db pro Oktave oberhalb der Grenzfrequenz absenkt), es gibt einen zusätzlichen Parameter, um die Resonanz einzustellen, 0 bedeutet keine Resonanz und 4 bedeutet selbstoszillierend. </para> + +</sect3> + +</sect2> + +<sect2 id="mcat-synth-midi-sequencing"> +<title +>Midi + Sequenzer</title> + +<sect3 id="mref-synth-midi-test-sect"> +<title +>Synth_MIDI_TEST</title> +<anchor id="mref-synth-midi-test"/> + +<mediaobject +><imageobject +><imagedata fileref="images/Synth_MIDI_TEST.png" +format="PNG"/></imageobject> +<textobject +><phrase +>Synth_MIDI_TEST</phrase +></textobject> +</mediaobject> + +<para +>Dieses Modul lädt eine Instrumentenstruktur aus einer Datei und registriert sich als &MIDI;-Ausgangskanal beim &arts;-&MIDI;-Manager. Noten, die an diesen Ausgang gesendet werden, erzeugen Töne dieses Instrumentes. </para> + +<note> +<para +>Sie können so etwas mit &artscontrol; leichter einrichten als manuell in &arts-builder;. </para> +</note> + +</sect3> + +<sect3 id="mref-synth-sequence-sect"> +<title +>Synth_SEQUENCE</title> +<anchor id="mref-synth-sequence"/> + +<mediaobject +><imageobject +><imagedata fileref="images/Synth_SEQUENCE.png" +format="PNG"/></imageobject +></mediaobject> + +<para +>Spielt eine Sequenz von Noten immer wieder. Die Noten werden in Tracker Notation angegeben und durch Semikolons voneinander getrennt. Ein Beispiel ist <literal +>A-3;C-4;E-4;C-4;</literal +>. Die Geschwindigkeit wird in Sekunden pro Note angegeben, wenn Sie also 120 BPM anvisieren, legen Sie die Geschwindigkeit auf 0.5 Sekunden fest, da 60 Sekunden / 0.5 Sekunden pro Note auf 120 BPM führt. </para> + +<para +>Sie können für jede Note eine individuelle Länge relativ zur Grundlänge festlegen durch einen Doppelpunkt gefolgt von der Länge hinter der Notenbezeichnung. Ein Beispiel dafür ist <literal +>A-3:2;C-4:0.5;D-4:0.5;E-4;</literal +>. Midi-Kompositionsprogramme ist ein wenig komfortabler ;) </para> + +<para +>Das Synth_SEQUENCE-Modul gibt zusätzliche Informationen über die Position innerhalb der gerade wiedergegebenen Note aus, wobei 0 gerade begonnen und 1 gerade beendet bedeutet. Diese Informationen können im Synth_PSCALE-Modul verwendet werden (siehe unten). </para> +</sect3> + +<sect3 id="mref-synth-sequence-freq-sect"> +<title +>Synth_SEQUENCE_FREQ</title> +<anchor id="mref-synth-sequence-freq"/> + +<mediaobject +><imageobject +><imagedata fileref="images/Synth_SEQUENCE_FREQ.png" +format="PNG"/></imageobject +></mediaobject> + +<para +>Dieses Modul arbeitet gleich dem Synth_SEQUENCE, einziger Unterschied ist, das es keine Notennamen, sondern Frequenzen annimmt. </para> + +</sect3> + +</sect2> + +<sect2 id="mcat-synth-samples"> +<title +>Samples</title> + +<sect3 id="mref-synth-play-wav-sect"> +<title +>Synth_PLAY_WAV</title> +<anchor id="mref-synth-play-wav"/> + +<mediaobject> +<imageobject +><imagedata fileref="images/Synth_PLAY_WAV.png" +format="PNG"/></imageobject> +<textobject +><phrase +>Synth_PLAY_WAV</phrase +></textobject> +</mediaobject> + +<para +>Dieser Menüpunkt spielt eine <literal role="extension" +>wav</literal +>-Datei ab. Er ist nur dann verfügbar, wenn Sie libaudiofile auf Ihrem Computer installiert haben. Die wave-Datei startet, sobald das Modul erstellt wird. </para> + +<para +>Sie stoppt, sobald das Ende der wav-Datei erreicht ist. Zusätzlich wird der Parameter finished (beendet) auf 1 gesetzt. Der Geschwindigkeitsparameter (speed) kann verwendet werden, um die Datei schneller oder langsamer wiederzugeben, wobei 1.0 der normalen (aufgenommenen) Geschwindigkeit entspricht. </para> +<!-- TODO: KDE2.2: check that this really works together in instruments with +the done parameter things ;) --> +</sect3> + +</sect2> + +<sect2 id="mcat-synth-soundio"> +<title +>Klang-IO</title> + +<sect3 id="mref-synth-play-sect"> +<title +>Synth_PLAY</title> +<anchor id="mref-synth-play"/> + +<mediaobject> +<imageobject +><imagedata fileref="images/Synth_PLAY.png" +format="PNG"/></imageobject> +<textobject +><phrase +>Synth_PLAY</phrase +></textobject> +</mediaobject> + +<important> +<para +>Sie werden dieses Modul normalerweise nicht benötigen, wenn Sie nicht selbstständige Anwendungen erstellen. Innerhalb von &artsd; existiert bereits ein Modul Synth_PLAY und ein zweites wird nicht funktionieren. </para> +</important> + +<para +>Das Synth_PLAY-Modul gibt ein Audio-Signal auf die Soundkarte aus. Die linken und rechten Kanäle sollten die <emphasis +>normalisierten</emphasis +> Eingangssignale für die Kanäle enthalten. Wenn sich das Eingangssignal nicht zwischen -1 und 1 befindet, werden zu hohe Amplituden abgeschnitten (clipping). </para> + +<para +>Wie bereits gesagt, darf es nur ein Synth_PLAY-Modul geben, da es direkt auf die Soundkarte zugreift. Verwenden Sie Busse, wenn Sie mehr als einen Audiostrom mischen wollen. Verwenden Sie das Modul Synth_AMAN_PLAY, um eine Ausgabe innerhalb von &artsd; zu erzeugen. </para> + +<para +>Anmerkung: Das Synth_PLAY-Modul übernimmt das gesamte Timing für die Struktur. Das bedeutet: Wenn Sie kein Synth_PLAY-Modul haben, haben Sie kein Timing und damit auch keine Klangausgabe. Sie benötigen also (genau) ein Synth_PLAY-Objekt. </para> + +</sect3> + +<sect3 id="mref-synth-record-sect"> +<title +>Synth_RECORD</title> +<anchor id="mref-synth-record"/> + +<mediaobject +><imageobject +><imagedata fileref="images/Synth_RECORD.png" +format="PNG"/></imageobject> +<textobject +><phrase +>Synth_RECORD</phrase +></textobject> +</mediaobject> + +<important> +<para +>Sie werden dieses Modul vermutlich niemals benötigen, es sei denn, Sie schreiben selbstständige Anwendungen. Innerhalb von artsd befindet sich bereits ein Synth_RECORD-Modul und ein zweites funktioniert nicht. </para> +</important> + +<para +>Das Synth_RECORD-Modul nimmt ein Signal von Ihrer Soundkarte auf. Die Eingangskanäle left (links) und right (rechts) enthalten die Eingangssignale von der Soundkarte (zwischen -1 und 1). </para> + +<para +>Wie bereits gesagt kann nur ein Synth_RECORD-Modul verwendet werden, da es direkt auf die Soundkarte zugreift. Verwenden Sie Busse, wenn Sie einen Audiodatenstrom an mehr als einer Stelle verwenden möchten. Verwenden Sie das Modul Synth_AMAN_RECORD, um einen Eingang innerhalb von artsd zu erzeugen. Damit das funktioniert, muss &artsd; mit <emphasis +>Full-Duplex aktiviert</emphasis +> gestartet werden. </para> +</sect3> + +<sect3 id="mref-synth-aman-play-sect"> +<title +>Synth_AMAN_PLAY</title> +<anchor id="mref-synth-aman-play"/> + +<mediaobject +><imageobject +><imagedata fileref="images/Synth_AMAN_PLAY.png" +format="PNG"/></imageobject> +<textobject +><phrase +>Synth_AMAN_PLAY</phrase +></textobject> +</mediaobject> + +<para +>Das Modul Synth_AMAN_PLAY gibt ein Ausgangssignal aus. Es sollte (nicht notwendigerweise) normalisiert (zwischen -1 und 1) sein. </para> + +<para +>Dieses Modul verwendet den Audiomanager, um festzulegen, wo das Signal wiedergegeben wird. Der Audiomanager kann mit Hilfe von &artscontrol; gesteuert werden. Um die Verwendung intuitiver zu gestalten, sollten Sie dem Signal einen Namen geben. Das können Sie, indem Sie den Parameter <emphasis +>title (Titel)</emphasis +> verwenden. Eine weitere Besonderheit des Audiomanagers ist die Fähigkeit, den letzten Wiedergabekanal eines Signals zu speichern. Dazu muss er die Signale unterscheiden können. Aus diesem Grund sollten Sie <emphasis +>autoRestoreID</emphasis +> einen eindeutigen Wert geben. </para> +</sect3> + +<sect3 id="mref-synth-aman-record-sect"> +<title +>Synth_AMAN_RECORD</title> +<anchor id="mref-synth-aman-record"/> + +<mediaobject +><imageobject +><imagedata +fileref="images/Synth_AMAN_RECORD.png" format="PNG"/></imageobject> +<textobject +><phrase +>Synth_AMAN_RECORD</phrase +></textobject> +</mediaobject> + +<para +>Das Modul Synth_AMAN_RECORD kann Daten einer externen Quelle (z.B. Line In / Mikrofon) innerhalb von artsd aufnehmen. Die Ausgabe ist ein normalisiertes Signal (zwischen -1 und 1). </para> + +<para +>Über den Audiomanager kann festgelegt werden, von wo das Signal aufgenommen wird. Der Audiomanager kann mit Hilfe von artscontrol gesteuert werden. Um die Verwendung intuitiver zu gestalten, sollten Sie dem Signal einen Namen geben. Das können Sie, indem Sie den Parameter <emphasis +>title (Titel)</emphasis +> verwenden. Eine weitere Besonderheit des Audiomanagers ist die Fähigkeit, den letzten Wiedergabekanal eines Signals zu speichern. Dazu muss er die Signale unterscheiden können. Aus diesem Grund sollten Sie <emphasis +>autoRestoreID</emphasis +> einen eindeutigen Wert geben. </para> +</sect3> + +<sect3 id="mref-synth-capture-sect"> +<title +>Synth_CAPTURE</title> +<anchor id="mref-synth-capture"/> + +<mediaobject +><imageobject +><imagedata fileref="images/Synth_CAPTURE.png" +format="PNG"/></imageobject> +<textobject +><phrase +>Synth_CAPTURE</phrase +></textobject> +</mediaobject> + +<para +>Das Synth_CAPTURE-Modul kann ein Audiosignal in eine wav-Datei auf Ihrer Festplatte schreiben. Die Datei hat immer den Namen <filename +>/tmp/mcop-<replaceable +>usename</replaceable +>/capture.wav</filename +> </para> +</sect3> + +</sect2> + +<sect2 id="mcat-synth-tests"> +<title +>Tests</title> + +<sect3 id="mref-synth-nil-sect"> +<title +>Synth_NIL</title> +<anchor id="mref-synth-nil"/> + +<mediaobject +><imageobject +><imagedata fileref="images/Synth_NIL.png" +format="PNG"/></imageobject> +<textobject +><phrase +>Synth_NIL</phrase +></textobject> +</mediaobject> + +<para +>Macht gar nichts. Das Modul ist sinnvoll zum Testen. </para> + +</sect3> + +<sect3 id="mref-synth-debug-sect"> +<title +>Synth_DEBUG</title> +<anchor id="mref-synth-debug"/> + +<mediaobject +><imageobject +><imagedata fileref="images/Synth_DEBUG.png" +format="PNG"/></imageobject> +<textobject +><phrase +>Synth_DEBUG</phrase +></textobject> +</mediaobject> + +<para +>Kann zum debuggen verwendet werden. Es gibt den Wert des Signals invalue in gleichbleibenden Abständen (etwa 1 Sekunde) zusammen mit einem von Ihnen festgelegten Kommentar aus. Auf diese Weise können Sie herausfinden, ob gewisse Signale in gewissen Bereichen bleiben oder ob sie überhaupt vorhanden sind. </para> +</sect3> + +<sect3 id="mref-synth-midi-debug-sect"> +<title +>Synth_MIDI_DEBUG</title> +<anchor id="mref-synth-midi-debug"/> + +<mediaobject +><imageobject +><imagedata fileref="images/Synth_MIDI_DEBUG.png" +format="PNG"/></imageobject> +<textobject +><phrase +>Synth_MIDI_DEBUG</phrase +></textobject> +</mediaobject> + +<para +>Hiermit können Sie überprüfen, ob Ihre &MIDI;-Ereignisse &arts; überhaupt erreichen. </para> + +<para +>Wenn ein MIDI_DEBUG aktiv ist, druckt &artsserver; etwa die folgenden Angaben: </para> + +<screen +><computeroutput +>201 100753.837585 on 0 42 127</computeroutput +></screen> + +<screen +><computeroutput +>202 101323.128355 off 0 42</computeroutput +></screen> + +<para +>Die erste Zeile teilt mit, das 100753ms (das sind 100 Sekunden) nach dem Start von MIDI_DEBUG das &MIDI;-Ereignis "Note an" auf Kanal 0 eingetroffen ist.Dieses Ereignis hatte die Lautstärke (velocity) 127, also den lautest möglichen Wert. Die nächste Zeile zeigt das zugehörige "Note aus"-Ereignis.[ TODO: Das funktioniert momentan noch nicht. Reparieren und durch den &MIDI;-Manager leiten]. </para> +</sect3> + +<sect3 id="mref-synth-data-sect"> +<title +>Synth_DATA</title> +<anchor id="mref-synth-data"/> + +<mediaobject +><imageobject +><imagedata fileref="images/Synth_DATA.png" +format="PNG"/></imageobject> +<textobject +><phrase +>Synth_DATA</phrase +></textobject> +</mediaobject> + +<para +>Erzeugt ein Signal mit einer konstanten Nummer. </para> +<!-- TODO: this doesn't really belong in test, does it? --> +</sect3> +</sect2> + +<sect2 id="mcat-synth-osc-mod"> +<title +>Oszillation & Modulation</title> + +<sect3 id="mref-synth-frequency-sect"> +<title +>Synth_FREQUENCY</title> +<anchor id="mref-synth-frequency"/> + +<mediaobject +><imageobject +><imagedata fileref="images/Synth_FREQUENCY.png" +format="PNG"/></imageobject> +<textobject +><phrase +>Synth_FREQUENCY</phrase +></textobject> +</mediaobject> + +<para +>Keiner der Oszillatoren in &arts; benötigt eine Frequenz als Eingabe, sondern nur eine Position innerhalb der Welle. Die Position muss zwischen 0 und 1 liegen. Das wird für ein Standard-Synth_WAVE_SIN-Modul auf den Bereich 0 bis 2*Pi umgerechnet. Um eine bestimmte Frequenz zu erzeugen, benötigen Sie ein Synth_FREQUENCY-Modul. </para> +</sect3> + +<sect3 id="mref-synth-fm-source-sect"> +<title +>Synth_FM_SOURCE</title> +<anchor id="mref-synth-fm-source"/> + +<mediaobject +><imageobject +><imagedata fileref="images/Synth_FM_SOURCE.png" +format="PNG"/></imageobject> +<textobject +><phrase +>Synth_FM_SOURCE</phrase +></textobject> +</mediaobject> + +<para +>Dieses Modul wird für Frequenzmodulation benötigt. Legen Sie die Grundfrequenz an den Frequenzeingang und ein anderes Signal an den Modulationseingang. Setzen Sie den Modulationswert (modlevel) etwa auf 0.3. Die Frequenz wird mit dem Modulationssignal moduliert. Ein interessantes Signal entsteht, wenn man ein rückgekoppeltes Signal verwendet, d.h. eine Kombination des verzögerten Ausgangssignals von Synth_FM_SOURCE (sie müssen es mit einem Oszillator verbinden, da es nur die Rolle von Synth_FREQUENCY übernimmt), und irgendein anderes Signal. </para> + +<para +>Arbeitet gut mit Synth_WAVE_SIN-Oszillatoren zusammen. </para> +</sect3> + +</sect2> + +<sect2 id="mcat-synth-waveforms"> +<title +>Wellenformen</title> + +<sect3 id="mref-synth-wave-sin-sect"> +<title +>Synth_WAVE_SIN</title> +<anchor id="mref-synth-wave-sin"/> + +<mediaobject +><imageobject +><imagedata fileref="images/Synth_WAVE_SIN.png" +format="PNG"/></imageobject> +<textobject +><phrase +>Synth_WAVE_SIN</phrase +></textobject> +</mediaobject> + +<para +>Sinusgenerator. Legen Sie ein Signal (pos) von Synth_FREQUENCY oder Synth_FM_SOURCE an den Eingang und am Ausgang liegt eine Sinusschwingung an. Das pos-Signal legt die Position in der Schwingung (Phasenverschiebung) im Bereich von 0..1 fest, was intern 0..2*Pi entspricht. </para> + +</sect3> + +<sect3 id="mref-synth-wave-tri-sect"> +<title +>Synth_WAVE_TRI</title> +<anchor id="mref-synth-wave-tri"/> + +<mediaobject +><imageobject +><imagedata fileref="images/Synth_WAVE_TRI.png" +format="PNG"/></imageobject> +<textobject +><phrase +>Synth_WAVE_TRI</phrase +></textobject> +</mediaobject> + +<para +>Dreieckgenerator. Legen Sie ein Signal (pos) von Synth_FREQUENCY oder Synth_FM_SOURCE an den Eingang und am Ausgang liegt eine Dreieckschwingung an. Das pos-Signal legt die Position in der Schwingung (Phasenverschiebung) im Bereich von 0..1 fest, was intern 0..2*Pi entspricht. Vorsicht: Das Eingangssignal <emphasis +>muss</emphasis +> im Bereich von 0..1 sein, damit ein gutes Ausgangssignal entsteht. </para> +</sect3> + +<sect3 id="mref-synth-noise-sect"> +<title +>Synth_NOISE</title> +<anchor id="mref-synth-noise"/> + +<mediaobject +><imageobject +><imagedata fileref="images/Synth_NOISE.png" +format="PNG"/></imageobject> +<textobject +><phrase +>Synth_NOISE</phrase +></textobject> +</mediaobject> + +<para +>Lärmgenerator. Dieser Generator erzeugt ein zufälliges Signal zwischen -1 und 1. </para> + +</sect3> + +<sect3 id="mref-synth-wave-square-sect"> +<title +>Synth_WAVE_SQUARE</title> +<anchor id="mref-synth-wave-square"/> + +<mediaobject +><imageobject +><imagedata +fileref="images/Synth_WAVE_SQUARE.png" format="PNG"/></imageobject> +<textobject +><phrase +>Synth_WAVE_SQUARE</phrase +></textobject> +</mediaobject> + +<para +>Rechteckgenerator. Legen Sie ein Signal (pos) von Synth_FREQUENCY oder Synth_FM_SOURCE an den Eingang und am Ausgang liegt eine Rechteckschwingung an. Das pos-Signal legt die Position in der Schwingung (Phasenverschiebung) im Bereich von 0..1 fest, was intern 0..2*Pi entspricht. Vorsicht: Das Eingangssignal <emphasis +>muss</emphasis +> im Bereich von 0..1 sein, damit ein gutes Ausgangssignal entsteht. </para> +</sect3> + +<sect3 id="mref-synth-wave-softsaw-sect"> +<title +>Synth_WAVE_SOFTSAW</title> +<anchor id="mref-synth-wave-softsaw"/> + +<mediaobject +><imageobject +><imagedata +fileref="images/Synth_WAVE_SOFTSAW.png" format="PNG"/></imageobject> +<textobject +><phrase +>Synth_WAVE_SOFTSAW</phrase +></textobject> +</mediaobject> + +<para +>Abgeschwächte Sägezahnoszillation. Dieses Signal ist ähnlich zum Signal des Dreieckgenerators. Legen Sie ein Signal (pos) von Synth_FREQUENCY oder Synth_FM_SOURCE an den Eingang und am Ausgang liegt eine weiche Sägezahnschwingung an. Das pos-Signal legt die Position in der Schwingung (Phasenverschiebung) im Bereich von 0..1 fest, was intern 0..2*Pi entspricht. Vorsicht: Das Eingangssignal <emphasis +>muss</emphasis +> im Bereich von 0..1 sein, damit ein gutes Ausgangssignal entsteht. </para> +</sect3> + +<sect3 id="mref-synth-wave-pulse-sect"> +<title +>Synth_WAVE_PULSE</title> +<anchor id="mref-synth-wave-pulse"/> + +<mediaobject +><imageobject +><imagedata fileref="images/Synth_WAVE_PULSE.png" +format="PNG"/></imageobject> +<textobject +><phrase +>Synth_WAVE_PULSE</phrase +></textobject> +</mediaobject> + +<para +>Impulsgenerator - dieses Modul ist grundsätzlich ähnlich zum Rechteckgenerator (Synth_WAVE_RECT), bietet aber zusätzlich eine Möglichkeit, das Verhältnis von Maximumzeit zu Minimumzeit mit dem Eingang <emphasis +>dutycycle</emphasis +> einzustellen. Legen Sie ein Signal (pos) von Synth_FREQUENCY oder Synth_FM_SOURCE an den Eingang und am Ausgang liegt eine Impulsschwingung an. Das pos-Signal legt die Position in der Schwingung (Phasenverschiebung) im Bereich von 0..1 fest, was intern 0..2*Pi entspricht. Vorsicht: Das Eingangssignal <emphasis +>muss</emphasis +> im Bereich von 0..1 sein, damit ein gutes Ausgangssignal entsteht. </para> +</sect3> +</sect2> +<sect2 id="mcat-synth-misc"> +<title +>Verschiedenes</title> + +<sect3 id="mref-synth-compressor-sect"> +<title +>Synth_COMPRESSOR</title> +<anchor id="mref-synth-compressor"/> + +<mediaobject> +<imageobject +><imagedata fileref="images/Synth_COMPRESSOR.png" + format="PNG"/></imageobject +></mediaobject> + +<para +>Dieses Modul reduziert den Dynamikbereich des Signals. Ein Kompressor ist nützlich, um die großen Lautstärkeschwankungen einer über ein Mikrophon redenden Person zu verringern. </para> + +<para +>Sobald das Eingangssignal einen bestimmten Pegel (den Grenzpegel) überschreitet, wird der Pegel reduziert. Jeder Pegelwert oberhalb des Grenzpegels wird mit einem Faktor, eine Zahl zwischen 0 und 1, multipliziert. Zum Abschluß wird das gesamte Signal mit dem Ausgangsfaktor multipliziert. </para> + +<para +>Die Argumente attack und release verzögern den Start und das Ende der Kompression. Das kann verwendet werden, um z.B. den lauten Beginn einer Basedrum zu hören. Das Argument wird in Millisekunden angegeben und ein Wert von 0 ms ist möglich, kann aber zu einem leichten Nebengeräusch führen. </para> + +</sect3> +</sect2> +</sect1> + +<sect1 id="visual-modules-reference"> +<title +>Visuelle Modul-Referenz</title> + +<para +>TODO wenn visuelle Module stabiler sind. </para> +</sect1> + +</chapter> diff --git a/tde-i18n-de/docs/tdemultimedia/artsbuilder/porting.docbook b/tde-i18n-de/docs/tdemultimedia/artsbuilder/porting.docbook new file mode 100644 index 00000000000..d6579f178bf --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/artsbuilder/porting.docbook @@ -0,0 +1,50 @@ +<!-- <?xml version="1.0" ?> +<!DOCTYPE chapter PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd"> +To validate or process this file as a standalone document, uncomment +this prolog. Be sure to comment it out again when you are done --> + +<chapter id="porting"> +<title +>Anwendungen auf &arts; portieren</title> + +<sect1 id="using-artsdsp"> +<title +>&artsdsp; verwenden</title> + +<para +>Die Anwendung &artsdsp;, die <link linkend="artsdsp" +> weiter oben</link +> beschrieben wird, erlaubt den meisten Standardanwendungen, die direkt auf die Audio-Geräte zugreifen, unter &arts; problemlos zu funktionieren. Die meisten Anwendungen, die den Enlightenment Sound Daemon (esd) verwenden, funktionieren ebenfalls, indem <application +>esd</application +> unter &artsdsp; gestartet wird. </para> + +<para +>Damit existiert eine gute Übergangslösung, um Anwendungen auf &kde; zu portieren. Es erlaubt natürlich keiner Anwendung, direkt von &arts; zu profitieren und alle Fähigkeiten von &arts;, wie z.B. die Verwendung von Modulen und Multimediaströmen, zu verwenden. Wenn die Anwendung mehr können soll, als nur einfache Audiodateien abzuspielen, sollte man Unterstützung für &arts; hinzufügen. </para> + +<para +>Die Anwendung kann dann viele Aufgaben an &arts; übertragen -- sie kann die in &arts; enthaltenen Funktionen verwenden, um Dinge wie unterschiedliche Codecs, Medienformate oder die Kontrolle der Audiogeräte. </para> + +</sect1> + +<sect1 id="adding-native-arts-support"> +<title +>&arts;-Unterstützung hinzufügen</title> + +<para +>Wenn Sie &arts; verwenden, können Sie zwischen verschiedenen <link linkend="arts-apis" +><acronym +>API</acronym +>s</link +> auswählen. Die Entscheidung wird unter anderem davon abhängen, welche Art von Medienstrom (Klang, &MIDI;, &CD;-Audio &etc;) Sie verwenden wollen, welche <acronym +>API</acronym +>-Fähigkeiten Sie benötigen und ob Sie in C++ programmieren. In den meisten Fällen sollte die Entscheidung abhängig von den benötigten Fähigkeiten klar sein </para> + +<para +>Anwendungen, die auf anderen Architekturen als &kde; funktionieren sollen, können nicht davon ausgehen, das &arts; immer vorhanden ist. Durch eine Plugin-Architektur können Sie geschickt verschiedene Multimediaumgebungen unterstützen. Wenn Sie das Plugin-<acronym +>API</acronym +> außerdem veröffentlichen und gut dokumentieren (besonders für nicht als Quelltext verfügbare Anwendungen), ermöglichen Sie auch anderen Entwicklern, ein &arts;-Plugin für Ihre Anwendung zu schreiben. </para> + +</sect1> + +</chapter> + diff --git a/tde-i18n-de/docs/tdemultimedia/artsbuilder/references.docbook b/tde-i18n-de/docs/tdemultimedia/artsbuilder/references.docbook new file mode 100644 index 00000000000..41a070d556a --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/artsbuilder/references.docbook @@ -0,0 +1,61 @@ +<!-- <?xml version="1.0" ?> +<!DOCTYPE chapter PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd"> +To validate or process this file as a standalone document, uncomment +this prolog. Be sure to comment it out again when you are done --> + +<chapter id="references"> +<title +>Referenz</title> + +<variablelist> + +<varlistentry> +<term +><ulink +url="http://multimedia.kde.org" +>http://multimedia.kde.org</ulink +></term> +<listitem> +<para +>Das ist die Hauptseite für Informationen zum Thema &kde;-Multimedia. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><ulink +url="http://www.arts-project.org" +>http://www.arts-project.org</ulink +></term> +<listitem> +<para +>Das ist die Internetseite des &arts;-Projektes. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>&kde; 2.0 Development (&kde; 2.0 Entwicklung)</term> +<listitem> +<para +>Kapitel 14 dieses veröffentlichten Buches beschäftigt sich mit Multimedia allgemein und mit &arts;. Es ist gedruckt oder im Internet mit Kommentaren verfügbar unter <ulink url="http://www.andamooka.org" +>http://www.andamooka.org</ulink +>. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term> +<ulink +url="http://sound.condorow.net" +>http://sound.condorow.net</ulink +></term> +<listitem> +<para +>Diese Internetseite hat eine umfangreiche List zu Klängen und &MIDI;-Anwendungen unter &Linux;. </para> +</listitem> +</varlistentry> + +</variablelist> + +</chapter> diff --git a/tde-i18n-de/docs/tdemultimedia/artsbuilder/tools.docbook b/tde-i18n-de/docs/tdemultimedia/artsbuilder/tools.docbook new file mode 100644 index 00000000000..06b47a413dd --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/artsbuilder/tools.docbook @@ -0,0 +1,1007 @@ +<!-- +<?xml version="1.0" ?> +<!DOCTYPE chapter PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd"> + +To validate or process this file as a standalone document, uncomment +this prolog. Be sure to comment it out again when you are done --> + +<chapter id="arts-tools"> +<title +>&artscontrol;</title> + +<para +>Mit &arts; werden einige Hilfs- und Steuerprogramme ausgeliefert. Sie müssen sich mit diesen Programmen vertraut machen, wenn Sie &arts; effektiv nutzen wollen. Dieser Abschnitt beschreibt jedes dieser Programme und ihre Aufrufparameter. </para> + +<sect1 id="kde-control-center"> +<title +>&kcontrol;</title> + +<para +>Wenn Sie &arts; unter &kde; einsetzen, stellt &kcc; einige Einstellmöglichkeiten in dem Abschnitt <guilabel +>Klänge</guilabel +> bereit. Einige dieser Einstellungen werden von &arts; verwendet. Weiterhin können Sie Klänge mit verschiedenen Systemnachrichten des Fenstermanagers oder von &kde; im Abschnitt <menuchoice +><guilabel +>Erscheinungsbild</guilabel +><guilabel +>Systemnachrichten</guilabel +></menuchoice +> verknüpfen. Das Handbuch zu &kcontrol; gibt genauere Informationen über diese Einstellungen. </para> + +</sect1> + +<sect1 id="artsd"> +<title +>&artsd;</title> + +<para +>Der Zugriff auf die Klangressourcen wird durch &artsd;, den &arts;-Dämon kontrolliert. Das ermöglicht es verschiedenen Anwendungen, gleichzeitig Anfragen an den Soundserver zu senden, der sie dann mixt und zusammen wiedergibt. Ohne einen zentralen Soundserver kann immer nur eine Anwendung zur Zeit die Klangressourcen verwenden. </para> + +<para +>Zur Verwendung von &arts; darf nur eine Instanz von &artsd; aktiv sein. Sie wird normalerweise beim Start von &kde; gestartet, wenn der zugehörige Eintrag in &kcontrol; im Abschnitt <guilabel +>Soundserver</guilabel +> aktiviert ist. </para> + +<para +>Das Programm akzeptiert die folgenden Aufrufparameter:</para> + +<!-- LW: FIX THIS --> + +<cmdsynopsis +><command +>artsd</command +> <group choice="opt" +> <option +>-n</option +> <option +>-p</option +> <option +>-N</option +> <option +>-W <replaceable +>n</replaceable +></option +> </group +> <group choice="opt" +> <option +>-a <replaceable +>audiomethod</replaceable +></option +> <option +>-r <replaceable +>sampling rate</replaceable +></option +> <option +>-b <replaceable +>bits</replaceable +></option +> <option +>-d</option +> <option +>-D <replaceable +>devicename</replaceable +></option +> <option +>-F <replaceable +>fragments</replaceable +></option +> <option +>-S <replaceable +>size</replaceable +></option +> <option +>-s <replaceable +>seconds</replaceable +></option +> <option +>-m <replaceable +>appName</replaceable +></option +> </group +> <group choice="opt" +> <option +>-h</option +> <option +>-A</option +> <option +>-v</option +> <option +>-l <replaceable +>level</replaceable +></option +> </group +> </cmdsynopsis> + +<variablelist +><varlistentry> +<term +><option +>-r <replaceable +>Sampling-Rate</replaceable +></option +></term> +<listitem> +<para +>Setzt die zu verwendende Sampling-Rate.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>-h</option +></term> +<listitem> +<para +>Verwendungshinweise anzeigen.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>-n</option +></term> +<listitem> +<para +>Netzwerk-Transparenz aktivieren.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>-p <replaceable +>Port</replaceable +></option> +</term> +<listitem> +<para +>Legt den zu verwendenden <acronym +>TCP</acronym +>-Port fest (setzt <option +>-n</option +> voraus).</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>-u</option +></term> +<listitem> +<para +>Öffentlich, keine Authentifizierung (unsicher).</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>-d</option +></term> +<listitem> +<para +>Volle Duplex-Fähigkeit aktivieren.</para> +</listitem> +</varlistentry> +<varlistentry> +<term +><option +>-D <replaceable +>Gerätename</replaceable +></option +></term> +<listitem> +<para +>Audiogerät festlegen (normalerweise <filename +>/dev/dsp</filename +>).</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>-F <replaceable +>Fragmente</replaceable +></option +></term> +<listitem> +<para +>Anzahl der Fragmente festlegen.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>-S <replaceable +>Größe</replaceable +></option +></term> +<listitem> +<para +>Legt die Fragmentgröße in Byte fest.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>-s <replaceable +>Sekunden</replaceable +></option +></term> +<listitem> +<para +>Legt die Zeit bis zum automatischen Aussetzen in Sekunden fest. Der Wert Null deaktiviert das automatische Aussetzen.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>-m <replaceable +>appName</replaceable +></option +></term> +<listitem> +<para +>Gibt den Namen der Anwendung an, die für die Ausgabe von Fehler- , Warn- und Informationsmeldungen verwendet wird. Wenn Sie KDE verwenden, können Sie das Hilfsprogramm <application +>artsmessage</application +> verwenden.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>-N</option +></term> +<listitem> +<para +>Erhöht die Größe der Netzwerkpuffer auf einen Wert, der für ein 10 mbps LAN erforderlich ist. Diese Einstellung ist äquivalent zur Option -w 5 (weiter unten). </para> +</listitem> +</varlistentry> +<varlistentry> +<term +><option +>-w <replaceable +>n</replaceable +></option +></term> +<listitem> +<para +>Wenn Sie &artsd; über eine Netzwerkverbindung zu einem anderen Rechner betreiben, sollten Sie die Puffer vergrößern, um Aussetzer zu vermeiden. &arts; stellt Anwendungen eine Standardpuffergröße bereit. Ohne diese Option basiert die Größe auf Abschnittgröße * Abschnittanzahl. Durch diese Option können Sie diese Größe vom Standardwert um einen Faktor von <replaceable +>n</replaceable +> erhöhen. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>-l <replaceable +>Ebene</replaceable +></option +></term> +<listitem> +<para +>Legt die Informationsebene fest - 3 (keine), 2 (Warnungen), 2 (Informationen), 0 (Debug).</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>-v</option +></term> +<listitem> +<para +>Versionsnummer anzeigen.</para> +</listitem> +</varlistentry> + +</variablelist> + +<para +>In den meisten Fällen reicht das Kommando &artsd; zum Start. </para> +</sect1> + +<sect1 id="artswrapper"> +<title +>&artswrapper;</title> + +<para +>Für ein gutes Echtzeit-Antwortverhalten, sollte &artsd; normalerweise als Echtzeit-Prozess (auf Systemen, die solche Prozesse unterstützen) gestartet werden. Das erfordert root-Rechte, daher kann &artsd; aus Sicherheitsgründen durch ein kleines Startprogramm namens <application +>artswrapper</application +> gestartet werden, das Echtzeitpriorität setzt (es arbeitet als <systemitem class="username" +>root</systemitem +>) und dann <command +>artsd</command +> als Nicht-root startet. </para> + +<para +>Falls man artswrapper als SUID <systemitem class="username" +>root</systemitem +> ausführt, wird die Qualität der Wiedergabe aufgrund weniger Unterbrechungen der Musik erhöht. Allerdings erhöht sich dadurch auch das Risiko einer Beschädigung des Rechners durch einen Fehler oder einen böswilligen Benutzer. Außerdem kann die Wiedergabe einer hochwertigen Musikaufnahme in einem Mehr-Benutzersystem negative Auswirkungen auf die Geschwindigkeit anderer Prozesse und Benutzer haben, die <quote +>produktiv</quote +> arbeiten wollen.</para> + +</sect1> + +<sect1 id="artsshell"> +<title +>&artsshell;</title> + +<para +>Der Befehl &artsshell; ist ein Hilfsprogramm, das verschiedene Funktionen im Zusammenhang mit dem Soundserver ausführt. Das Programm wird in der Zukunft vermutlich mit weiteren Funktionen ausgestattet (einen Überblick geben die Kommentare im Quelltext). </para> + +<para +>Die Befehlszeile zum Start hat das folgende Format: </para> + +<!-- LW: FIX THIS --> + +<cmdsynopsis +><command +>artsshell</command +> <group +> <arg +>suspend</arg +><arg +>status</arg +> <arg +>terminate</arg +> <arg +>autosuspend <replaceable +>secs</replaceable +></arg +> <arg +>networkbuffers <replaceable +>n</replaceable +></arg +> <arg +>volume [<replaceable +>volume</replaceable +>]</arg +> <arg +>stereoeffect <replaceable +>options</replaceable +></arg +> </group +> <group +> <option +>-h</option +> <option +>-q</option +> </group +> </cmdsynopsis> + +<para +>artsshell [options] <replaceable +>Befehl</replaceable +> [<replaceable +>Befehlsoptionen</replaceable +>] </para> + +<para +>Folgende Optionen werden unterstützt: </para> + +<variablelist> + +<varlistentry> +<term +><option +>-q</option +></term> +<listitem> +<para +>Ausgabe unterdrücken.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>-h</option +></term> +<listitem> +<para +>Verwendungshinweise anzeigen.</para> +</listitem> +</varlistentry> + +</variablelist> + +<para +>Folgende Befehle werden unterstützt:</para> + +<variablelist> + +<varlistentry> +<term +><option +>suspend</option +></term> +<listitem> +<para +>Der Soundserver schaltet sich aus. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>status</option +></term> +<listitem> +<para +>Statusinformationen des Soundservers anzeigen.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>terminate</option +></term> +<listitem> +<para +>Den Soundserver beenden. Das kann Programme, die den Soundserver verwenden, zum Absturz bringen. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>autosuspend</option +> <parameter +>Sekunden</parameter +></term> +<listitem> +<para +>Setzt die Zeit bis zum Aussetzen auf die angegebene Anzahl von Sekunden. Der Soundserver setzt automatisch aus, wenn er die angegebene Zeit unbeschäftigt ist. Der Wert Null deaktiviert das automatische Aussetzen. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>networkbuffers</option +> <parameter +>n</parameter +></term> +<listitem> +<para +>Setzt die Größe der Netzwerkpuffer auf das <parameter +>n</parameter +>-fache der Standardgröße. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>volume</option +> [<replaceable +>Lautstärke</replaceable +>]</term> +<listitem> +<para +>Legt die Lautstärkeskalierung für die Soundserver Audioausgabe fest. Das Argument <replaceable +>Lautstärke</replaceable +> ist eine Kommazahl. Bei Aufruf ohne Argument wird der aktuelle Wert angezeigt. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>Liste der Stereoeffekte</option +></term> +<listitem> +<para +>Liste aller verfügbaren Stereoeffektmodule</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>stereoeffect insert [top|bottom]</option +> <replaceable +>Name</replaceable +></term> +<listitem> +<para +>Fügt einen Stereoeffekt in einen Stereoeffektstapel ein. Gibt einen Namen zurück, der für ein späteres Löschen erforderlich ist. Der Effekt kann oben oder unten (Standardeinstellung) hinzugefügt werden.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>stereoeffect remove</option +> <replaceable +>Id</replaceable +></term> +<listitem> +<para +>Löscht den Stereoeffekt mit dem Namen <replaceable +>Id</replaceable +> vom Effektstapel.</para> +</listitem> +</varlistentry> + +</variablelist> + +</sect1> + +<sect1 id="artsplay"> +<title +><application +>artsplay</application +></title> + +<para +>Der Befehl <application +>artsplay</application +> ist ein einfaches Hilfsprogramm zum Abspielen einer Klangdatei. Der Befehl hat ein einziges Argument, nämlich den Namen der an den Soundserver zu schickenden Datei. Die Klangdatei kann zu jedem der üblichen Typen gehören, also <literal role="extension" +>wav</literal +> oder <literal role="extension" +>au</literal +>. Mit diesem Befehl kann man testen, ob der Soundserver funktioniert. Indem man zwei Befehl parallel oder in schneller Folge gibt, kann man demonstrieren, wie der Soundserver mehrere Ausgaben mixen kann.</para> + +</sect1> + +<sect1 id="artsdsp"> +<title +><application +>artsdsp</application +></title> + +<para +>Der Soundserver unterstützt nur Anwendungen, die &arts;-aktiviert sind. Viele herkömmliche Anwendungen wollen auf die Klanggeräte direkt zugreifen. Das Programm &artsdsp; ist eine Übergangslösung, die es vielen dieser Anwendungen erlaubt, ohne Änderung zu funktionieren. </para> + +<para +>Wenn ein Programm unter &artsdsp; ausgeführt wird, werden alle Zugriffe auf das Audiogerät <filename class="devicefile" +>/dev/dsp</filename +> abgefangen und in &arts; <acronym +>API</acronym +>-Aufrufe umgewandelt. Diese Emulation ist nicht perfekt, aber die meisten Anwendungen funktionieren auf diese Weise mit einer kleinen Einbuße an Geschwindigkeit und Antwortverhalten. </para> + +<para +>Der Befehl &artsdsp; hat das folgende Format: </para> + +<!-- LW: FIX THIS --> +<para +>artsdsp [<replaceable +>Optionen</replaceable +>] <replaceable +>Anwendung Parameter</replaceable +> </para> + +<para +>Folgende Optionen werden erkannt: </para> + +<variablelist> + +<varlistentry> +<term +><option +>-h</option +>, <option +>--help</option +></term> +<listitem> +<para +>Zeigt eine kurze Hilfe.</para> +</listitem> +</varlistentry> +<varlistentry> +<term +><option +>-n</option +> <option +>--name</option +> = <replaceable +>Name</replaceable +></term> +<listitem> +<para +>Verwendet <replaceable +>Name</replaceable +> um den Spieler gegenüber <command +>artsd</command +>.zu identifizieren.</para> + +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>-m</option +> <option +>--mmap</option +></term> +<listitem> +<para +>Speicher-Mapping emulieren (&zb; für <application +>Quake</application +>).</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>-v</option +> <option +>--verbose</option +></term> +<listitem> +<para +>Zeigt Parameter an.</para> +</listitem> +</varlistentry> + +</variablelist> + +<para +>Ein typischer Aufruf ist: </para> + +<para> +<userinput +><command +>artsdsp</command +> <option +>-v</option +> <option +>-m</option +> <parameter +>realplay <replaceable +>Lied.mp3</replaceable +></parameter +></userinput> +</para> + +<para +>Einige Anwendungen funktionieren mit der Einstellung <option +>--mmap</option +> besser. Es werden nicht alle Funktionen des Klanggerätes voll emuliert, aber die meisten Anwendungen sollten funktionieren. Falls eine nicht funktionieren sollte, senden Sie eine detailierte Benachrichtigung ein. So können die Entwickler möglicherweise eine Lösung finden. Bedenken Sie, dass es sich um eine Übergangslösung handelt. Die beste Lösung ist sicherlich, Unterstützung für &arts; zu der Anwendung hinzuzufügen. Wenn Ihre Lieblingsanwendung &arts; nicht unterstützt, bitten Sie die Entwickler diese Unterstützung nachzurüsten. </para> + +</sect1> + +<sect1 id="artscat"> +<title +><application +>artscat</application +></title> + +<para +>Dieses kleine Hilfsprogramm kann Audion-Rohdaten zum Soundserver schicken. Sie müssen das Datenformat (Samplingrate, Samplegröße und Anzahl der Kanäle) angeben. Es ist ein Programm, das Sie vermutlich nicht oft benötigen, das aber für Testzwecke recht praktisch ist. Die Aufrufsyntax ist: </para> + +<!-- LW: FIX THIS --> + +<para +>artscat [ <replaceable +>Optionen</replaceable +> ] [ <replaceable +>Dateiname</replaceable +> ] </para> + +<para +>Wenn Sie keinen Dateinamen angeben, wird von der Standardeingabe gelesen. Folgende Optionen werden unterstützt: </para> + +<variablelist> +<varlistentry> +<term +><option +>-v</option +> <parameter +>--verbose</parameter +></term> +<listitem> +<para +>Setzt die zu verwendende Sampling-Rate. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>-b</option +> <parameter +>Bits</parameter +></term> +<listitem> +<para +>Setzt die Sample-Größe fest (8 oder 16). </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>-c</option +> <parameter +>Kanäle</parameter +></term> +<listitem> +<para +>Setzt die Anzahl der Kanäle fest (1 oder 2). </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>-h</option +></term> +<listitem> +<para +>Nur Verwendungshinweise anzeigen. </para> +</listitem> +</varlistentry> + +</variablelist> +</sect1> + +<sect1 id="artscontrol"> +<title +>&artscontrol;</title> + +<para +>Dies ist ein graphisches Programm für die Durchführung einer Anzahl Aufgaben im Zusammenhang mit dem Soundserver. Das Hauptfenster hat zwei Lautstärkeanzeigen und einen Schieberegler für die Gesamtausgabelautstärke. Aus dem Menü <guimenu +>Ansicht</guimenu +> können Sie weitere Funktionen auswählen: </para> + +<variablelist> + +<varlistentry> +<term +><guimenuitem +>FFT-Anzeige</guimenuitem +></term> +<listitem> +<para +>Öffnet ein Fenster mit einer Echtzeit-Spektrumanalysator-Anzeige. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guimenuitem +>Audio-Manager</guimenuitem +></term> +<listitem> +<para +>Zeigt die aktiven Klangquellen an und erlaubt die Zuordnung zu einem der verfügbaren Busse. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guimenuitem +>aRts-Statusanzeige</guimenuitem +></term> +<listitem> +<para +>Zeigt an, ob der Soundserver läuft und Echtzeitpriorität besitzt. Außerdem wird angezeigt, wann der Soundserver automatisch aussetzt. Durch einen Knopf kann er auch sofort ausgeschaltet werden. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guimenuitem +>Midi-Manager</guimenuitem +></term> +<listitem> +<para +>Zeigt aktive &MIDI;-Ein- und Ausgabegeräte an und erlaubt die Herstellung von Verknüpfungen [TODO: Funktioniert vermutlich noch nicht! Mehr Details benötigt]. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guimenuitem +>FreeVerb</guimenuitem +></term> +<listitem> +<para +>Verbindet einen FreeVerb-Echoeffekt mit dem Stapel von &arts; Ausgabeeffekten und erlaubt eine graphische Kontrolle der Effektparameter. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guimenuitem +>Lautstärkeanzeige im LED-Stil</guimenuitem +></term> +<listitem> +<para +>Ändert die Lautstärkeanzeige des Hauptfensters auf eine farbige <acronym +>LED</acronym +>-Anzeige anstatt Fortschrittsbalken. </para> +</listitem> +</varlistentry> + +</variablelist> + +</sect1> + +<sect1 id="artsc-config"> +<title +><application +>artsc-config</application +></title> + +<para +>Dieses Hilfsprogramm unterstützt Entwickler bei der Verwendung des &arts; C-<acronym +>API</acronym +>. Es gibt die geeignete Compiler- und Linker-Optionen aus, die zur Kompilierung und zum Linken von Programmen mit &arts; benötigt werden. Es ist gedacht zur Verwendung innerhalb von make-Dateien zur Unterstützung von Portabilität. Das Programm kennt drei Optionen: </para> + +<variablelist> +<varlistentry> +<term +><option +>--cflags</option +></term> +<listitem> +<para +>Zeigt die Kompiler-Flags an, die zur Kompilierung mit dem &arts; C-<acronym +>API</acronym +> benötigt werden. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>--libs</option +></term> +<listitem> +<para +>Zeigt die Linker-Flags an, die zum Linken mit dem &arts; C-<acronym +>API</acronym +> benötigt werden. </para> +</listitem> +</varlistentry> +<varlistentry> +<term +><acronym +>--version</acronym +></term> +<listitem> +<para +>Zeigt die Versionsnummer des <command +>artsc-config</command +> Befehles an. </para> +</listitem> +</varlistentry> +</variablelist> + +<para +>Eine typische Ausgabe dieses Befehls sieht folgendermaßen aus:</para> + +<screen width="40" +><prompt +>%</prompt +> <userinput +><command +>artsc-config</command +> <option +>--cflags</option +></userinput> +<computeroutput +>-I/usr/local/kde2/include/artsc</computeroutput> +<prompt +>%</prompt +> <userinput +><command +>artsc-config</command +> <option +>--libs</option +></userinput> +<computeroutput +>-L/usr/local/kde2/lib -ldl -lartsc -DPIC -fPIC -lpthread</computeroutput> +<prompt +>%</prompt +> <userinput +><command +>artsc-config</command +> <option +>--version</option +></userinput> +<computeroutput +>0.9.5</computeroutput +> +</screen> + +<para +>Sie können dieses Programm in einer Make-Datei z.B. in einer solchen Regel verwenden: </para> + +<programlisting +>artsc: artsc.c + gcc `artsc-config --cflags` -o artsc artsc.c `artsc-config --libs` +</programlisting> + +</sect1> + +<sect1 id="mcopidl"> +<title +>&mcopidl;</title> + +<para +>Der Befehl &mcopidl; ist der <acronym +>IDL</acronym +>-Datei Kompiler für &MCOP;, das Multimedia Communication Protokol, das von &arts; verwendet wird. Interfaces sind in &arts; in &IDL;, einer sprachunabhängigen Interface Definition Language, geschrieben. Das Programm &mcopidl; akzeptiert ein &IDL;-Datei als Eingabe und generiert C++-Header und Quelldateien für eine Klasse, die das Interface implementiert. Der Befehl hat die folgende Syntax: </para> + +<!-- LW: FIX THIS --> + +<para +>mcopidl [ <replaceable +>Optionen</replaceable +> ] <replaceable +>Dateiname</replaceable +> </para> + +<para +>Folgende Optionen sind möglich:</para> +<variablelist> +<varlistentry> +<term +><option +>-I</option +> <parameter +>Verzeichnis</parameter +></term> +<listitem> +<para +>Suche in <parameter +>Verzeichnis</parameter +> nach Include-Dateien. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>-e</option +> <parameter +>Name</parameter +></term> +<listitem> +<para +>Schließe die Struktur, das Interface oder den Aufzählungstyp <parameter +>Name</parameter +> von der Erzeugung aus. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>-t</option +></term> +<listitem> +<para +>Erzeuge zusätzlich die Dateien <literal role="extension" +>.mcoptype</literal +>/ <literal role="extension" +>.mcopclass</literal +>, die Informationen für die &IDL;-Datei enthalten. </para> +</listitem> +</varlistentry> +</variablelist> + +<para +>Weitere Informationen über &MCOP; und &IDL; finden Sie im Abschnitt <link linkend="interfaces" +>Interfaces und &IDL;</link +>. </para> + +</sect1> + +</chapter> diff --git a/tde-i18n-de/docs/tdemultimedia/juk/Makefile.am b/tde-i18n-de/docs/tdemultimedia/juk/Makefile.am new file mode 100644 index 00000000000..df6332b8050 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/juk/Makefile.am @@ -0,0 +1,4 @@ +KDE_LANG = de +SUBDIRS = $(AUTODIRS) +KDE_DOCS = AUTO +KDE_MANS = AUTO diff --git a/tde-i18n-de/docs/tdemultimedia/juk/Makefile.in b/tde-i18n-de/docs/tdemultimedia/juk/Makefile.in new file mode 100644 index 00000000000..a059387f118 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/juk/Makefile.in @@ -0,0 +1,635 @@ +# Makefile.in generated by automake 1.10.1 from Makefile.am. +# KDE tags expanded automatically by am_edit - $Revision: 483858 $ +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = docs/tdemultimedia/juk +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +#>- RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ +#>- html-recursive info-recursive install-data-recursive \ +#>- install-dvi-recursive install-exec-recursive \ +#>- install-html-recursive install-info-recursive \ +#>- install-pdf-recursive install-ps-recursive install-recursive \ +#>- installcheck-recursive installdirs-recursive pdf-recursive \ +#>- ps-recursive uninstall-recursive +#>+ 7 +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive nmcheck-recursive bcheck-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +#>- DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +#>+ 1 +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) $(KDE_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +ARTSCCONFIG = @ARTSCCONFIG@ +AUTOCONF = @AUTOCONF@ +AUTODIRS = @AUTODIRS@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CONF_FILES = @CONF_FILES@ +CYGPATH_W = @CYGPATH_W@ +DCOPIDL = @DCOPIDL@ +DCOPIDL2CPP = @DCOPIDL2CPP@ +DCOPIDLNG = @DCOPIDLNG@ +DCOP_DEPENDENCIES = @DCOP_DEPENDENCIES@ +DEFS = @DEFS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +GMSGFMT = @GMSGFMT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KCFG_DEPENDENCIES = @KCFG_DEPENDENCIES@ +KCONFIG_COMPILER = @KCONFIG_COMPILER@ +KDECONFIG = @KDECONFIG@ +KDE_EXTRA_RPATH = @KDE_EXTRA_RPATH@ +KDE_RPATH = @KDE_RPATH@ +KDE_XSL_STYLESHEET = @KDE_XSL_STYLESHEET@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MAKEKDEWIDGETS = @MAKEKDEWIDGETS@ +MCOPIDL = @MCOPIDL@ +MEINPROC = @MEINPROC@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TOPSUBDIRS = @TOPSUBDIRS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XMLLINT = @XMLLINT@ +X_RPATH = @X_RPATH@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +am__leading_dot = @am__leading_dot@ +am__tar = @am__tar@ +am__untar = @am__untar@ +#>- bindir = @bindir@ +#>+ 2 +DEPDIR = .deps +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +kde_appsdir = @kde_appsdir@ +kde_bindir = @kde_bindir@ +kde_confdir = @kde_confdir@ +kde_datadir = @kde_datadir@ +kde_htmldir = @kde_htmldir@ +kde_icondir = @kde_icondir@ +kde_kcfgdir = @kde_kcfgdir@ +kde_libs_htmldir = @kde_libs_htmldir@ +kde_libs_prefix = @kde_libs_prefix@ +kde_locale = @kde_locale@ +kde_mimedir = @kde_mimedir@ +kde_moduledir = @kde_moduledir@ +kde_servicesdir = @kde_servicesdir@ +kde_servicetypesdir = @kde_servicetypesdir@ +kde_sounddir = @kde_sounddir@ +kde_styledir = @kde_styledir@ +kde_templatesdir = @kde_templatesdir@ +kde_wallpaperdir = @kde_wallpaperdir@ +kde_widgetdir = @kde_widgetdir@ +tdeinitdir = @tdeinitdir@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +xdg_appsdir = @xdg_appsdir@ +xdg_directorydir = @xdg_directorydir@ +xdg_menudir = @xdg_menudir@ +KDE_LANG = de +#>- SUBDIRS = $(AUTODIRS) +#>+ 1 +SUBDIRS =. +KDE_DOCS = AUTO +KDE_MANS = AUTO +#>- all: all-recursive +#>+ 1 +all: docs-am all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) +#>- @for dep in $?; do \ +#>- case '$(am__configure_deps)' in \ +#>- *$$dep*) \ +#>- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ +#>- && exit 0; \ +#>- exit 1;; \ +#>- esac; \ +#>- done; \ +#>- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdemultimedia/juk/Makefile'; \ +#>- cd $(top_srcdir) && \ +#>- $(AUTOMAKE) --gnu docs/tdemultimedia/juk/Makefile +#>+ 12 + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdemultimedia/juk/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/tdemultimedia/juk/Makefile + cd $(top_srcdir) && perl ../scripts/admin/am_edit -p../scripts/admin docs/tdemultimedia/juk/Makefile.in +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +#>- distdir: $(DISTFILES) +#>+ 1 +distdir: distdir-nls $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +#>- uninstall: uninstall-recursive +#>+ 1 +uninstall: uninstall-docs uninstall-nls uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +#>- clean: clean-recursive +#>+ 1 +clean: kde-rpo-clean clean-recursive + +#>- clean-am: clean-generic mostlyclean-am +#>+ 1 +clean-am: clean-docs clean-bcheck clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +#>- install-data-am: +#>+ 1 +install-data-am: install-docs install-nls + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic ctags \ + ctags-recursive distclean distclean-generic distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ + tags-recursive uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: + +#>+ 2 +KDE_DIST=juk-adv-search.png search-playlist.png index.docbook juk-main.png juk-file-renamer.png juk-tag-guesser.png index.cache.bz2 history-playlist.png normal-playlist.png Makefile.in toolbar.png Makefile.am + +#>+ 24 +index.cache.bz2: $(srcdir)/index.docbook $(KDE_XSL_STYLESHEET) toolbar.png juk-file-renamer.png normal-playlist.png juk-main.png juk-tag-guesser.png index.docbook history-playlist.png juk-adv-search.png search-playlist.png + @if test -n "$(MEINPROC)"; then echo $(MEINPROC) --check --cache index.cache.bz2 $(srcdir)/index.docbook; $(MEINPROC) --check --cache index.cache.bz2 $(srcdir)/index.docbook; fi + +docs-am: index.cache.bz2 + +install-docs: docs-am install-nls + $(mkinstalldirs) $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/juk + @if test -f index.cache.bz2; then \ + echo $(INSTALL_DATA) index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/juk/; \ + $(INSTALL_DATA) index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/juk/; \ + elif test -f $(srcdir)/index.cache.bz2; then \ + echo $(INSTALL_DATA) $(srcdir)/index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/juk/; \ + $(INSTALL_DATA) $(srcdir)/index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/juk/; \ + fi + -rm -f $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/juk/common + $(LN_S) $(kde_libs_htmldir)/$(KDE_LANG)/common $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/juk/common + +uninstall-docs: + -rm -rf $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/juk + +clean-docs: + -rm -f index.cache.bz2 + + +#>+ 13 +install-nls: + $(mkinstalldirs) $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/juk + @for base in toolbar.png juk-file-renamer.png normal-playlist.png juk-main.png juk-tag-guesser.png index.docbook history-playlist.png juk-adv-search.png search-playlist.png ; do \ + echo $(INSTALL_DATA) $$base $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/juk/$$base ;\ + $(INSTALL_DATA) $(srcdir)/$$base $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/juk/$$base ;\ + done + +uninstall-nls: + for base in toolbar.png juk-file-renamer.png normal-playlist.png juk-main.png juk-tag-guesser.png index.docbook history-playlist.png juk-adv-search.png search-playlist.png ; do \ + rm -f $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/juk/$$base ;\ + done + + +#>+ 5 +distdir-nls: + for file in toolbar.png juk-file-renamer.png normal-playlist.png juk-main.png juk-tag-guesser.png index.docbook history-playlist.png juk-adv-search.png search-playlist.png ; do \ + cp $(srcdir)/$$file $(distdir); \ + done + +#>+ 15 +force-reedit: + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdemultimedia/juk/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/tdemultimedia/juk/Makefile + cd $(top_srcdir) && perl ../scripts/admin/am_edit -p../scripts/admin docs/tdemultimedia/juk/Makefile.in + + +#>+ 21 +clean-bcheck: + rm -f *.bchecktest.cc *.bchecktest.cc.class a.out + +bcheck: bcheck-recursive + +bcheck-am: + @for i in ; do \ + if test $(srcdir)/$$i -nt $$i.bchecktest.cc; then \ + echo "int main() {return 0;}" > $$i.bchecktest.cc ; \ + echo "#include \"$$i\"" >> $$i.bchecktest.cc ; \ + echo "$$i"; \ + if ! $(CXX) $(DEFS) -I. -I$(srcdir) -I$(top_builddir) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(KDE_CXXFLAGS) --dump-class-hierarchy -c $$i.bchecktest.cc; then \ + rm -f $$i.bchecktest.cc; exit 1; \ + fi ; \ + echo "" >> $$i.bchecktest.cc.class; \ + perl $(top_srcdir)/admin/bcheck.pl $$i.bchecktest.cc.class || { rm -f $$i.bchecktest.cc; exit 1; }; \ + rm -f a.out; \ + fi ; \ + done + + +#>+ 3 +final: + $(MAKE) all-am + +#>+ 3 +final-install: + $(MAKE) install-am + +#>+ 3 +no-final: + $(MAKE) all-am + +#>+ 3 +no-final-install: + $(MAKE) install-am + +#>+ 3 +kde-rpo-clean: + -rm -f *.rpo + +#>+ 3 +nmcheck: +nmcheck-am: nmcheck diff --git a/tde-i18n-de/docs/tdemultimedia/juk/history-playlist.png b/tde-i18n-de/docs/tdemultimedia/juk/history-playlist.png Binary files differnew file mode 100644 index 00000000000..9d72414a765 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/juk/history-playlist.png diff --git a/tde-i18n-de/docs/tdemultimedia/juk/index.cache.bz2 b/tde-i18n-de/docs/tdemultimedia/juk/index.cache.bz2 Binary files differnew file mode 100644 index 00000000000..f26f1cf5263 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/juk/index.cache.bz2 diff --git a/tde-i18n-de/docs/tdemultimedia/juk/index.docbook b/tde-i18n-de/docs/tdemultimedia/juk/index.docbook new file mode 100644 index 00000000000..3e99b0aa415 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/juk/index.docbook @@ -0,0 +1,2425 @@ +<?xml version="1.0" ?> +<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [ + <!ENTITY package "tdemultimedia"> + <!ENTITY kappname "&juk;"> + <!ENTITY juk "<application +>JuK</application +>"> + <!ENTITY % addindex "IGNORE"> + <!ENTITY % German "INCLUDE"> +]> + +<book lang="&language;"> + +<bookinfo> +<title +>Das Handbuch zu &juk;</title> + +<authorgroup> +<author +>&Lauri.Watts; &Lauri.Watts.mail;</author> +<author +><firstname +>Michael</firstname +> <surname +>Pyne</surname +> <affiliation +> <address +><email +>[email protected]</email +></address> +</affiliation> +</author> + +<othercredit role="developer" +><firstname +>Scott</firstname +> <surname +>Wheeler</surname +> <affiliation +> <address +>&Scott.Wheeler.mail;</address> +</affiliation> +</othercredit> + +<othercredit role="translator" +><firstname +>Patrick</firstname +><surname +>Trettenbrein</surname +><affiliation +><address +><email +>[email protected]</email +></address +></affiliation +><contrib +>Übersetzer</contrib +></othercredit +> <othercredit role="translator" +><firstname +>Arnold</firstname +><surname +>Krille</surname +><affiliation +><address +><email +>[email protected]</email +></address +></affiliation +><contrib +>Korrekturleser</contrib +></othercredit +> + +</authorgroup> + +<copyright> +<year +>2001</year> +<year +>2002</year> +<year +>2004</year> +<holder +>&Scott.Wheeler;</holder> +</copyright> +<legalnotice +>&FDLNotice;</legalnotice> + +<date +>2004-05-06</date> +<releaseinfo +>2.1</releaseinfo> + +<abstract> +<para +>&juk; ist Jukebox, "Metadaten-Editor" und Manager der Musiksammlung zugleich. </para> +</abstract> + +<keywordset> +<keyword +>KDE</keyword> +<keyword +>tdemultimedia</keyword> +<keyword +>audio</keyword> +<keyword +>Metadaten-Editor</keyword> +<keyword +>player</keyword> +<keyword +>jukebox</keyword> +<keyword +>JuK</keyword> +</keywordset> + +</bookinfo> + +<chapter id="introduction"> +<title +>Einführung</title> + +<para +>&juk; ist eine Jukebox. Und wie mit vielen anderen Jukebox-Anwendungen auch, können Sie mit &juk; die <quote +>Metadaten</quote +> Ihrer Musikdatei bearbeiten und Ihre Sammlung und Wiedergabelisten verwalten. </para> +</chapter> + +<chapter id="using-juk"> +<title +>&juk; verwenden</title> + +<para> +<screenshot> +<screeninfo +>Ein Bildschirmphoto von &juk;</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="juk-main.png" format="PNG"/> + </imageobject> + <textobject> + <phrase +>Ein Bildschirmphoto von &juk; in Aktion.</phrase> + </textobject> + </mediaobject> +</screenshot> +</para> + +<para +>&juk; enthält eine Liste aller Dateien von denen es weiß, dass sie sich auf dem Rechner befinden. Diese wird <guilabel +>Kollektionsliste</guilabel +> genannt. Die Kollektionsliste ist speziell für &juk; und wird nicht von anderen Programmen verwendet.</para> + +<para +>Unabhängig von der Kollektionsliste sind Wiedergabelisten. Es können so viele Wiedergabelisten verwaltet werden, wie erwünscht. Erstellte Wiedergabelisten können auch mit anderen Abspielprogrammen (wie zum Beispiel &noatun; oder <application +>XMMS</application +>) abgespielt werden, und dort erstellte Wiedergabelisten können in &juk; verwendet werden.</para> + +<para +>Einzelne Dateien können zur Kollektionsliste über den Menüpunkt <menuchoice +><guimenu +>Datei</guimenu +><guimenuitem +>Öffnen ...</guimenuitem +></menuchoice +> und der Auswahl der Dateien mittels des Standard-&kde;-Dateidialogs hinzugefügt werden. Ganze Ordner können über den Menüpunkt <menuchoice +><guimenu +>Datei</guimenu +><guimenuitem +>Ordner öffnen ...</guimenuitem +></menuchoice +> hinzugefügt werden. Ordner, die Sie auf diese Weise hinzugefügt haben, werden bei jedem Start von &juk; neu eingelesen. Sie können alle Ordner, die Sie bereits für ihre Kollektionsliste eingelesen haben, mit einem Rechtsklick auf das Symbol der <guilabel +>Kollektionsliste</guilabel +> und Auswahl von <guimenuitem +>Erneut laden</guimenuitem +> nochmals einlesen, also aktualisieren.</para> + +<para +>Das Hinzufügen eines Stücks zu einer Wiedergabeliste wird die Datei des Stücks automatisch zur Kollektionsliste hinzufügen, aber das Hinzufügen einer Datei zur Kollektionsliste wird das Stück nicht automatisch zu einer Wiedergabeliste hinzufügen.</para> + +<para +>Sie können ganz einfach eine Wiedergabeliste aus ihrer vollständigen Kollektionsliste erstellen, indem sie einen Rechtsklick auf das Symbol <guilabel +>Kollektionsliste</guilabel +> machen und dort den Menüpunkt <guimenuitem +>Duplizieren</guimenuitem +> auswählen. Die erstellte Wiedergabeliste ist eine normale Wiedergabeliste, daher wird das Verändern dieser Wiedergabeliste nicht die <guilabel +>Kollektionsliste</guilabel +> verändern.</para> + +<para +>Sie können einzelne Wiedergabelisten, die Sie nicht mit &juk; erstellt haben, mittels <menuchoice +><guimenu +>Datei</guimenu +><guimenuitem +>Öffnen ...</guimenuitem +></menuchoice +> hinzufügen. Alle Wiedergabelisten in einem Ordner, den Sie mittels dem Menüpunkt <menuchoice +><guimenu +>Datei</guimenu +><guimenuitem +>Ordner öffnen ...</guimenuitem +></menuchoice +> zur Kollektionsliste hinzugefügt haben, wird automatisch hinzugefügt.</para> + +<para +>Sie können eine neue Wiedergabeliste über den Menüpunkt <menuchoice +><guimenu +>Datei</guimenu +><guimenuitem +>Neu</guimenuitem +></menuchoice +> oder mit einem Klick auf das Symbol <guiicon +>Neu</guiicon +> in der Werkzeugsleiste hinzufügen. Sie werden nach einem Namen für die neue Wiedergabeliste gefragt. Nach der Eingabe erscheint ein Symbol für die neue Wiedergabeliste in der Kontrollleiste. Jetzt können Sie Dateien mittels "drag and drop" von der Kollektionsliste zur Wiedergabeliste, oder von einer bestehenden oder zu Ihrer soeben erstellten Wiedergabeliste hinzufügen. Um die Änderungen in der Wiedergabeliste zu speichern klicken Sie auf das Symbol <guiicon +>Speichern</guiicon +> oder verwenden Sie den Menüpunkt <menuchoice +><guimenu +>Datei</guimenu +><guimenuitem +>Speichern</guimenuitem +></menuchoice +>.</para> + +<sect1 id="collection-list-gui"> +<title +>Die Stückliste</title> + +<para +>Wenn Sie sich die Kollektionsliste ansehen, enthält das Hauptfenster alleDateien, die &juk; eingelesen hat. Wenn Sie sich eine Wiedergabeliste ansehen, werden nur die Songs angezeigt, die sich in dieser befinden. In beiden Fällen ist das Aussehen und das Verhalten der Liste identisch.</para> + +<para +>Jedes Stück nimmt eine Zeile im Anzeigefenster ein. Für jedes Metadaten-Feld, das &juk; verarbeitet, wird eine Spalte angezeigt. Diese Felder stimmen mit den Feldern überein, die man im Metadaten-Editor editieren kann.</para> + +<para +>Sie können die Liste jederzeit mit einem Linksklick auf den Spaltentitel ordnen. Dies wird die Einträge in aufsteigender Reihenfolge, basierend auf dem Inhalt der Spalten sortieren. Wenn Sie erneut einen Linksklick auf den selben Spaltentitel machen, werden die Dateien in absteigender Reihenfolge geordnet.</para> + +<para +>Die Spalten sind anfänglich groß genug um den längsten Eintrag in der jeweiligen Spalte anzuzeigen. Sie können die Größe der Spalten ändern indem Sie ihren Mauszeiger auf den Teiler zwischen zwei Spalten bewegen. Dann können Sie nach einem Linksklick auf den Teiler bei gedrückter linker Maustaste die Größe der Spalte ändern.</para> + +<para +>Sie können die Spaltentitel ordnen indem Sie einen Linksklick auf den gewünschten Titel machen und ihn entweder nach rechts oder links in die gewünschte Position ziehen. Sie können ihn jedoch nicht über den Rand des Fensters hinaus bewegen, sodass Sie etwas nach rechts oder links scrollen und den Titel erneut bewegen müssen, bis er sich in der gewünschten Position befindet.</para> + +<para +>Sie können Spalten verstecken oder versteckte Spalten anzeigen lassen, indem Sie einen Rechtsklick auf einen Spaltentitel machen und dort die anzuzeigende oder zu versteckende Spalte an oder abwählen.</para> + +<para +>Ein Doppelklick mit der linken Maustaste auf ein Stück wird dieses mit dem integrierten Abspielprogramm wiedergeben. Wenn bereits ein anders Stück gespielt wird, wird dessen Wiedergabe gestoppt und die Wiedergabe des neu ausgewählten Stückes beginnt.</para> + +<para +>Ein Rechtsklick auf ein Stück bringt ein Menü zum Vorschein:</para> + +<variablelist> +<varlistentry> +<term +><guimenuitem +>Als Nächstes abspielen</guimenuitem +></term> +<listitem> +<para +>Dies wird das Stück abspielen nachdem das zurzeit spielende Stück vorüber ist. Wenn gerade kein Stück spielt wird die Datei abgespielt wenn Sie das nächste mal den <guiicon +>Wiedergabe</guiicon +> Knopf drücken. Falls Sie die Funktion "Als Nächstes abspielen" bereits für ein anderes Stück festgelegt hatten, wird anstatt des bereits festgelegten Stücks das neu ausgewählte abgespielt.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guimenuitem +>Ausschneiden</guimenuitem +></term> +<term +><guimenuitem +>Kopieren</guimenuitem +></term> +<term +><guimenuitem +>Einfügen</guimenuitem +></term> +<listitem> +<para +>...</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guimenuitem +>Löschen</guimenuitem +></term> +<listitem> +<para +>Wenn Sie ein Stück in der Kollektionsliste markiert haben und die Funktion <guimenuitem +>Löschen</guimenuitem +> auswählen, wird das Stück aus der Kollektionsliste und allen in &juk; geladenen Wiedergabelisten gelöscht. Sie sollten beachten, dass, wenn sich die Datei, die Sie gelöscht haben, in einem Ordner befindet, den &juk; beim Starten einliest, das Stück automatisch wieder zur Kollektionsliste hinzugefügt wird, wenn Sie &juk; das nächste Mal starten. Allerdings wird es nicht automatisch wieder zu einer Wiedergabeliste hinzugefügt.</para> +<para +>Wenn Sie eine Wiedergabeliste anzeigen lassen und dort ein Stück markiert haben, wird die Option <guimenuitem +>Löschen</guimenuitem +> das Stück nur aus der Wiedergabeliste entfernen.</para> + +</listitem> +</varlistentry> + +<varlistentry> +<term +><guimenuitem +>Bearbeiten</guimenuitem +></term> +<listitem> +<para +>Erlaubt Ihnen das aktuell ausgewählte Stück in der Spalte, in der Sie es angeklickt haben, zu bearbeiten. Zum Beispiel: Wenn Sie den Metadaten-Editor gerade nicht angezeigt haben und Sie schnell eine Wiedergabeliste erstellen wollen, Sie aber einen Rechtschreibfehler in einem Künstlernamen bemerkt haben, können Sie diesen direkt über diesen Menüpunkt bearbeiten.</para> +<para +>Änderungen die auf diese Weise durchgeführt wurden werden immer gespeichert, sobald Sie irgendwo anders hinklicken und damit das Bearbeiten beenden.</para> +<para +>Dieser Menüpunkt wird allerdings nicht verfügbar sein wenn &juk; bemerkt, dass Sie für das ausgewählte Stück nur Leserechte besitzen.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guimenuitem +>Aktualisieren</guimenuitem +></term> +<listitem> +<para +>Diese Option wird die Metadaten des ausgewählten Stücks erneut laden, vorausgesetzt, die Metadaten wurden geändert, während &juk; gestartet war.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guimenuitem +>Von der Festplatte löschen</guimenuitem +></term> +<listitem> +<para +>Dies wird das Stück aus der Kollektionsliste und allen Wiedergabelisten löschen, weiter wird die zum Stück gehörige Datei von der Festplatte gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden, deshalb müssen Sie ihn bestätigen bevor er ausgeführt wird. Benutzen Sie dies mit Vorsicht.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guisubmenu +>Metadaten raten</guisubmenu +></term> +<listitem> +<para +>Dies wird &juk; dazu veranlassen zu versuchen die Metadaten wie Künstler und Titel eines Stücks zu erraten. &juk; verwendet verschiedene Methoden: <variablelist> + + <varlistentry +><term +><guimenuitem +>Vom Dateinamen</guimenuitem +></term> + <listitem +><para +>&juk; wird versuchen die Metadaten des Stücks basierend auf dem Dateinamen des Stücks zu ergänzen. Zum Beispiel werden einem Stück mit dem Dateinamen <filename +>Roxette - You've Got the Look.mp3</filename +> der Eintrag "Roxette" als Künstler und "You've Got the Look" als Titel in die Metadaten eingetragen. Sie können die Vorgehensweise, wie &juk; die Metadaten errät, über den Menüpunkt <menuchoice +><guimenu +>Einstellungen</guimenu +><guimenuitem +>Metadaten raten ...</guimenuitem +></menuchoice +> anpassen. &juk; ersetzt aus Dateinamen nur Metadaten die es selbst hinzugefügt hat. Wenn Sie Informationen zum Beispiel per Hand eingegeben haben werden diese von &juk; nicht verändert.</para> + </listitem> + </varlistentry> + + <varlistentry +><term +><guimenuitem +>Aus dem Internet</guimenuitem +></term> + <listitem +><para +>&juk; wird versuchen die Metadaten des Stückes zu erraten indem es das MusicBrainz-Programm verwendet. Um diese Option zu verwenden müssen Sie MusicBrainz auf Ihrem System installiert haben. </para> + </listitem> + </varlistentry> + + </variablelist> +</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guimenuitem +>Datei umbenennen</guimenuitem +></term> +<listitem> +<para +>Dies wird die ausgewählten Stücke gemäß dem angegebenen Muster umbenennen. Um diese Option benutzen zu können, müssen Sie zuerst im Menüpunkt <menuchoice +> <guimenu +>Einstellungen</guimenu +><guimenuitem +>Dateien umbenennen ...</guimenuitem +></menuchoice +> einstellen, nach welchem Muster die Dateien umbenannt werden sollen. Der endgültige Name einer Datei basiert auf ihren Metadaten. Zum Beispiel kann das Ogg-Vorbis-Stück <quote +>The Theme (Metroid)</quote +> von Stemage in <filename +>/usr/share/music/Stemage/The Theme (Metroid).ogg</filename +> umbenannt werden. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guimenuitem +>Wiedergabeliste aus den ausgewählten Stücken erstellen</guimenuitem +></term> +<listitem> +<para +>Dies erlaubt Ihnen schnell und einfach eine Wiedergabeliste aus den Stücken Ihrer Kollektionsliste zu erstellen. Diese Funktion wird Sie zuerst nach einem Namen für die neue Wiedergabeliste fragen, danach werden alle aktuell ausgewählten Stücke zur neu erstellten Wiedergabeliste hinzugefügt.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guimenuitem +>Ausgewählte Stücke zu K3b hinzufügen</guimenuitem +></term> +<listitem> +<para +>Dies erlaubt Ihnen schnell ein K3b-CD-Projekt aus Ihren aktuell ausgewählten Stücken zu erstellen. &juk; wird Sie fragen, ob Sie eine Audio-&CD; oder eine Daten-&CD; erstellen wollen, wenn nicht bereits ein K3b-Projekt geöffnet ist.</para> + +<para +>Wenn K3b nicht bereits gestartet ist, wird &juk; es automatisch für Sie starten. Danach wird &juk; automatisch alle ausgewählten Stücke zum aktuellen K3b-Projekt hinzufügen. Sie können nun Ihr K3b-Projekt entweder speichern um es später zu brennen oder sofort eine CD aus dem Projekt erstellen. </para> + +</listitem> +</varlistentry> + +</variablelist> + +</sect1> + +<sect1 id="juk-playlists"> +<title +>&juk;-Wiedergabelisten</title> +<para +>Eine Wiedergabeliste ist einfach eine Sammlung von Stücken zu einem Thema. Zum Beispiel könnten Sie eine Wiedergabeliste haben von Stücken die Sie hören wenn Sie programmieren, wenn Sie versuchen zu schlafen oder wenn Sie lachen wollen. &juk; unterstützt verschiedene Formen von Wiedergabelisten. </para> + +<variablelist> + +<varlistentry> +<term id="juk-normal-playlists" +>Normale Wiedergabelisten</term> +<listitem +><para +><inlinemediaobject +><imageobject +><imagedata format="PNG" fileref="normal-playlist.png"/></imageobject +></inlinemediaobject +> Die häufigste Wiedergabeliste. Sie ist aus Dateien zusammengestellt, wie die Kollektionsliste.</para +></listitem> +</varlistentry> + +<varlistentry> +<term id="juk-history-playlists" +>Verlauf</term> +<listitem +><para +><inlinemediaobject +><imageobject +><imagedata format="PNG" fileref="history-playlist.png"/></imageobject +></inlinemediaobject +> Wenn Sie diese Wiedergabeliste aktivieren (Menüpunkt <menuchoice +><guimenu +>Ansicht</guimenu +><guimenuitem +>Verlauf anzeigen</guimenuitem +></menuchoice +>), wird diese Wiedergabeliste jedes Stück, das &juk; abspielt, aufzeichnen. Die Wiedergabeliste verfügt über eine zusätzliche Spalte <guilabel +>Zeit</guilabel +>, welche exakt aufzeichnet, zu welcher Zeit und zu welchem Datum das Stück abgespielt wurde. Die Wiedergabeliste verfolgt den Verlauf aber erst nach Aktivierung. </para +></listitem> +</varlistentry> + +<varlistentry> +<term id="juk-search-playlists" +>Wiedergabeliste durchsuchen</term> +<listitem +><para +><inlinemediaobject +><imageobject +><imagedata format="PNG" fileref="search-playlist.png"/></imageobject +></inlinemediaobject +> Diese Funktion basiert auf einer Suche. Eine Wiedergabeliste dieser Form können Sie über den Menüpunkt <menuchoice +><guimenu +>Datei</guimenu +><guisubmenu +>Neu</guisubmenu +><guimenuitem +>Wiedergabeliste durchsuchen</guimenuitem +></menuchoice +> oder durch einen Klick auf den Knopf <link linkend="juk-advanced-search-dialog" +>Erweiterte Suche</link +> neben der <link linkend="search-bar" +>Suchleiste</link +> erstellen.</para> +<para +>Nach dem Erstellen einer solchen Wiedergabeliste werden automatisch alle Stücke aus Ihrer Kollektionsliste zu denen von Ihnen angegebenen Kriterien passend zur Wiedergabeliste hinzugefügt. Die Wiedergabeliste wird sich automatisch aktualisieren wenn sich Stücke Ihrer Kollektionsliste ändern.</para +></listitem> +</varlistentry> + +</variablelist> + +<para +>Wiedergabelisten werden im <guilabel +>Wiedergabelisten Bereich</guilabel +>, dem senkrechten Bereich links im &juk; Programmfenster, aufgelistet. In diesem Fenster erscheint ein Symbol für jede Wiedergabeliste die Sie zu &juk; hinzugefügt haben. Für dieses Fenster gibt es verschiedene Ansichtsmöglichkeiten, welche Sie über den Menüpunkt <guimenu +>Ansicht</guimenu +><guisubmenu +>Anzeigemodi</guisubmenu +> auswählen können. <variablelist> + +<varlistentry> +<term id="juk-viewmode-default" +>Standardanzeigemodus</term> +<listitem> +<para +>Dies ist der Standardansichtsmodus. In dieser Ansicht werden alle Wiedergabelisten als große Symbole untereinander dargestellt. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term id="juk-viewmode-compact" +>Kompakter Anzeigemodus</term> +<listitem> +<para +>Diese Anzeigemodus ist ähnlich dem normalen Anzeigemodus, mit dem Unterschied, dass die Wiedergabelisten durch horizontale Streifen mit kleinen Symbolen dargestellt werden. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term id="juk-viewmode-tree" +>Baum-Anzeigemodus</term> +<listitem> +<para +>Dieser Anzeigemodus ist der komplexeste von allen. Er ist ähnlich dem kompakten Anzeigemodus, außer das die Kollektionsliste jetzt die "Wurzel" des Baumes darstellt. Die Kollektionsliste hat in dieser Ansicht drei "Äste", sprich Unterpunkte: Künstler, Album und Genre. Jeder dieser Unterpunkte steht für die Einträge in der dazugehörigen Kategorie. Falls Sie zum Beispiel vier verschiedene Künstler in Ihrer Kollektionsliste haben, haben Sie im Unterpunkt Künstler noch einmal vier Unterpunkte mit den jeweiligen Künstlernamen.</para> +<para +>Eines der raffinierten Extras des Baum-Ansichtsmodus ist "drag and drop retagging". Wählen Sie einige Dateien aus der Stückliste aus und ziehen Sie diese auf einen der Künstlernamen, Album oder Genre und die Metadaten der Stücke wird automatisch geändert. Das heißt wenn Sie einige Stücke auf ein Genre "Rock" ziehen, wird bei jedem der Stücke das Genre auf "Rock" geändert. </para> +</listitem> +</varlistentry> + +</variablelist> + +</para> + +</sect1> + +<sect1 id="juk-tagger"> +<title +>Der Metadaten-Editor von &juk;</title> + +<para +>Für viele Dateitypen ist es vorteilhaft, den Dateinamen einer Datei zu verwenden um deren Inhalt anzugeben: <quote +><filename +>Report für die Anschlagtafel - Juni 2004.sxw</filename +></quote +>. Dieser Dateiname enthält alle Informationen, die Sie wahrscheinlich benötigen um die Datei wieder zu finden. Wenn Sie aber versuchen, alle nützlichen Informationen über ein Stück in seinem Dateinamen anzugeben, führt dies zu Dateinamen wie: <quote +><filename +>Type O Negative - The Glorious Liberation Of The Peoples Technocratic Republic Of Vinnland By The Combined Forces Of The United Territories Of Europa.ogg</filename +></quote +> oder <quote +><filename +>Various Artists_15_The Smithsonian Collection of Classic Jazz Volume II_Jimmie Lunceford & His Orchestra - Organ Grinder's Swing.mp3</filename +></quote +>. Solche Dateinamen sind nicht wirklich schön anzuschauen und auch nicht wirklich praktisch. Wenn Sie jetzt zu solch einer Datei auch noch Informationen wie Album und Stücknummer hinzufügen, wird der Dateiname immer länger und länger. Und trotzdem enthält der Dateiname noch nicht alle Informationen wie zum Beispiel den Musikstil oder das Jahr in dem das Stück veröffentlicht wurde.</para> + +<para +>Die Lösung dieses Problems ist es, einfach alle wichtigen Informationen innerhalb der Datei zu speichern. Mp3- und Ogg-Dateien können sogar kurze Texte enthalten in denen Sie den Inhalt der Datei kurz beschreiben können. Es gibt verschiedene Formate um solche Informationen innerhalb von Dateien abzuspeichern, aber &juk; verbirgt die Unterschiede zwischen ihnen und ermöglicht es, auf einem einzigen Weg alle Metadaten, die &juk; auslesen kann, zu bearbeiten.</para> + +<para +>&juk; ist ein vollwertiger Metadaten-Editor, der es Ihnen ermöglicht, die Metadaten von Mp3- und Ogg-Dateien zu bearbeiten. Sie können einzelne Dateien oder mehrere gleichzeitig bearbeiten. Wenn Sie mehrere Dateien gleichzeitig bearbeiten, spielt es keine Rolle, ob einige vom Typ Mp3 und einige vom Typ Ogg sind. Die einzige Voraussetzung um die Metadaten zu bearbeiten ist, dass Sie Schreibrechte für die Datei besitzen. Das heißt, Sie können keine Metadaten von Stücken bearbeiten, die sich zum Beispiel auf einer eingebundenen &CD-ROM; befinden.</para> + +<sect2 id="tagging-a-single-file"> +<title +>Metadaten einer einzelnen Datei ändern</title> + +<para +>Um die Metadaten einer einzelnen Datei zu ändern, muss die zu ändernde Datei entweder in der Kollektionsliste oder ein Eintrag der Datei aus einer Wiedergabeliste ausgewählt werden. Falls der Metadaten-Editor nicht sichtbar ist, können Sie ihn über den Menüpunkt <menuchoice +><guimenu +>Ansicht</guimenu +><guimenuitem +>Meta Info Editor anzeigen</guimenuitem +></menuchoice +> anzeigen lassen. Er erscheint dann im unteren Bereich des Listenansichtbereiches.</para> + +<para +>Um die Metadaten zu ändern, müssen Sie nur die gewünschte Information in das dafür vorgesehene Feld eingeben. Wenn Sie Ihre Eingabe beendet haben, klicken Sie mit der linken Maustaste auf die Listenansicht, und Sie werden aufgefordert, das Speichern Ihrer Änderungen zu bestätigen.</para> + +<para +>Sie haben vielleicht schon bemerkt, dass es sein kann, dass der Metadaten-Editor ausgegraut angezeigt wird, sodass Sie nichts ändern können, wenn Sie auf eine Datei klicken. Dies ist immer dann der Fall, wenn &juk; bemerkt hat, das Sie für das Stück nur Leserechte haben.</para> + +<variablelist> +<title +>Felder des Metadaten-Editors</title> +<varlistentry> +<term +><guilabel +>Künstler:</guilabel +></term> +<listitem> +<para +>Der Name des Künstlers / der Künstler, der/die den Song veröffentlichte/n.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guilabel +>Titel:</guilabel +></term> +<listitem> +<para +>Der Name des Stückes.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guilabel +>Album:</guilabel +></term> +<listitem> +<para +>Der Name des Albums auf dem das Stück veröffentlicht wurde.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guilabel +>Genre:</guilabel +></term> +<listitem> +<para +>Der <quote +>Stil</quote +> der Musik (zum Beispiel: Rock). &juk; enthält bereits eine Liste von Genres konform zum ID3-Standard, aber Sie können auch Ihre eigenen Einträge zur Liste hinzufügen.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guilabel +>Dateiname:</guilabel +></term> +<listitem> +<para +>Der Name der Datei auf dem Datenträger. Der Eintrag kann direkt bearbeitet werden. Die Datei wird dann beim Speichern umbenannt.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guilabel +>StückNr:</guilabel +></term> +<listitem> +<para +>Die Position des Stückes auf der Originalaufnahme.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guilabel +>Jahr:</guilabel +></term> +<listitem> +<para +>Das Jahr in dem das Stück veröffentlicht wurde.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guilabel +>Länge:</guilabel +></term> +<listitem> +<para +>Ist nicht veränderbar, wird nur zu Informationszwecken angezeigt.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guilabel +>Bitrate:</guilabel +></term> +<listitem> +<para +>Ist nicht veränderbar, wird nur zu Informationszwecken angezeigt.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guilabel +>Kommentar:</guilabel +></term> +<listitem> +<para +>Hier können Sie Ihren eigenen Kommentar zum Stück einfügen.</para> +</listitem> +</varlistentry> +</variablelist> + +<para +>Sie können Ihre Änderungen jederzeit speichern, indem Sie entweder den Menüpunkt <menuchoice +><guimenu +>Metadaten</guimenu +><guimenuitem +>Speichern</guimenuitem +></menuchoice +> auswählen oder den Kurzbefehl <keycombo action="simul" +>&Strg;<keycap +>T</keycap +></keycombo +> drücken.</para> + +</sect2> + +<sect2 id="tagging-multiple-files"> +<title +>Bearbeiten der Metadaten von mehreren Dateien</title> + +<para +>Sie können mehrere Dateien im Listenansicht-Fenster auswählen und ein oder mehrere Felder der Metadaten für alle Dateien bearbeiten.</para> + +<para +>Verwenden Sie <keycap +>Shift</keycap +> und den Linksklick, um benachbarte Dateien auszuwählen, und &Strg; und den Linksklick um nicht benachbarte Dateien auszuwählen.</para> + +<para +>Falls der Metadaten-Editor nicht sichtbar ist, können Sie ihn über den Menüpunkt <menuchoice +><guimenu +>Ansicht</guimenu +><guimenuitem +>Metadaten-Editor anzeigen</guimenuitem +></menuchoice +> jederzeit einblenden. Der Metadaten-Editor erscheint dann am unteren Rand der Listenansicht.</para> + +<para +>Der Metadaten-Editor verhält sich geringfügig anders, wenn Sie mehrere Dateien ausgewählt haben.</para> + +<para +>Jedes Feld des Metadaten-Editors wird jetzt ein kleines Feld neben sich haben mit dem Sie es <guilabel +>aktivieren</guilabel +> können. Jedes Feld, dessen Inhalt bei allen ausgewählten Dateien gleich ist, wird diesen Inhalt anzeigen. Um ein Feld zu editieren, müssen Sie das kleine Feld neben dem Eingabefeld <guilabel +>aktivieren</guilabel +>.</para> + +<!-- put screeny here --> + +<para +>Jedes Feld, das keinen übereinstimmenden Inhalt bei allen ausgewählten Dateien hat ist anfänglich nicht bearbeitbar, und zeigt keinen Inhalt an.</para> + +<para +>Um den Inhalt eines Feldes zu ändern, müssen Sie dieses aktivieren, indem Sie das Ankreuzfeld <guilabel +>Aktivieren</guilabel +> neben dem Eingabefeld markieren, falls es nicht schon markiert ist. Dann können Sie den Inhalt des Feldes wie gewohnt editieren.</para> + +<para +>Wenn Sie mit dem Bearbeiten aller Felder fertig sind, genügt ein Klick mit der &LMBn; in die Listenansicht, und Sie müssen das Speichern Ihrer Änderungen bestätigen. Der Speicherndialog zeigt Ihnen eine Liste der betroffenen Dateien an, damit Sie sichergehen können, dass Sie nur Dateien ändern, die Sie auch wirklich ändern wollen.</para> + +<para +>Sie können Ihre Änderungen jederzeit speichern, indem Sie entweder den Menüpunkt <menuchoice +><guimenu +>Metadaten</guimenu +><guimenuitem +>Speichern</guimenuitem +></menuchoice +> auswählen oder den Kurzbefehl <keycombo action="simul" +>&Strg;<keycap +>T</keycap +></keycombo +> drücken.</para> + +</sect2> + +</sect1> + +<sect1 id="juk-rename-dialog"> +<title +>Umbenennen</title> +<para> +<screenshot> +<screeninfo +>Der Umbenennendialog</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="juk-file-renamer.png" format="PNG"/> + </imageobject> + <textobject> + <phrase +>Ein Bildschirmphoto des Umbenennendialogs</phrase> + </textobject> + </mediaobject> +</screenshot> +</para> + +<para +>Der Konfigurationsdialog dieser Funktion wird benutzt, um einzustellen, wie ein Stück basierend auf seinen Metadaten umbenannt wird. Zuerst werden die Informationen nach einem einstellbaren Muster geändert, danach werden diese genutzt, um den Dateinamen basierend auf dem <guilabel +>Dateinameschema</guilabel +> zu erstellen. </para> + +<para +>Der wichtigste Teil dieser Funktion ist das <guilabel +>Dateinamenschema</guilabel +>. Hier können Sie einstellen, nach welchem Schema &juk; die Dateien umbenennen wird. Der Grund warum es funktioniert ist, das einige Zeichen eine spezielle Bedeutung haben. </para> + +<para +><variablelist> +<varlistentry> +<term +>%t</term> +<listitem +><para +>Wird durch den Titel ersetzt.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>%a</term> +<listitem +><para +>Wird durch den Namen des/der Künstler/s ersetzt.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>%A</term> +<listitem +><para +>Wird durch den Namen des Albums ersetzt.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>%T</term> +<listitem +><para +>Wird durch die StückNr. ersetzt.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>%c</term> +<listitem +><para +>Wird durch den angegebene Kommentar zum Stück ersetzt.</para> +</listitem> +</varlistentry> + +</variablelist> +</para> + +<para +>Jedes Schema kann %s enthalten, was durch die aktuellen Metadaten ersetzt wird und jeden Text den Sie möchten, inklusive Schrägstriche (/). Wenn in einem Schema ein Schrägstrich vorkommt wird dieser wie ein Trennzeichen zwischen zwei Ordnern gehandhabt. So ist es möglich Trennzeichen in das Feld <guilabel +>Dateinamen Schema</guilabel +> einzufügen.</para> + +<para +>Das Benutzen dieser Zeichen ermöglicht es, leere Metadaten-Angaben zu ignorieren. Wenn Sie die Option <guilabel +>Wert erforderlich</guilabel +> ankreuzen, wird beim Umbenennen der Eintrag ignoriert, wenn er leer ist. Zum Beispiel können Sie so Dateien, die Kommentare enthalten, von solchen trennen, die keine haben, indem Sie <replaceable +>hat-einen-kommentar/%s</replaceable +> in das <guilabel +>Kommentar-Marke</guilabel +>nfeld eintragen.</para> + +<para +>Sie können Ihr Dateinamenschema testen, indem Sie im Feld <guilabel +>Aktueller Dateiname</guilabel +> eine Datei auswählen. Dann wird &juk; unterhalb im Bereich <guilabel +>Neuer Dateiname</guilabel +> den neuen Dateinamen anzeigen. </para> +</sect1> + +<sect1 id="juk-tag-guesser-configuration"> +<title +>Einrichtung des Metadaten-Raters</title> +<para> +<screenshot> +<screeninfo +>Einrichtung des Metadaten-Raters</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="juk-tag-guesser.png" format="PNG"/> + </imageobject> + <textobject> + <phrase +>Bildschirmphoto der Einrichtung des Metadaten-Raters</phrase> + </textobject> + </mediaobject> +</screenshot> +</para> + +<para +>Der Dialog "Einrichtung des Metadaten-Raters" wird benutzt, um einzustellen, nach welchen Schemata &juk; die Informationen raten soll.</para> + +<para +>Im Dialogfenster sehen Sie links eine Liste mit den verschiedenen Dateinamenmustern. &juk; enthält eine umfangreiche Sammlung von Mustern um die am häufigsten verwendeten Schemata bei der Benennung von Dateien abzudecken. Wenn Sie ein neues Schema hinzufügen wollen, klicken Sie auf den Knopf <guibutton +>Hinzufügen</guibutton +>, geben Ihr neues Schema ein und klicken auf <guibutton +>OK</guibutton +>. Verwenden Sie die gleichen Ersetzungszeichen wie im Dialog<link linkend="juk-rename-dialog" +>Dateien Umbenennen ...</link +>. </para> + +<para +>&juk; versucht, die vorhandenen Schemata der Reihe nach durchzugehen, beginnend am Anfang der Liste. Das erste Schema, das auf den Dateinamen zutrifft, wird verwendet um die Metadaten des Stücks zu ergänzen. Auf einige Dateien wird eventuell mehr als ein Schema zutreffen. Um sicherzustellen, dass das richtige Schema verwendet wird, müssen Sie dieses in der Liste markieren und mit den Pfeilknöpfen an die Spitze der Liste bewegen. </para> + +<para +>Sie können vorhandene Schemata auch bearbeiten oder aus der Liste löschen. Um ein Schema zu bearbeiten oder zu löschen müssen Sie es markieren und dann entweder auf <guibutton +>Ändern</guibutton +> oder auf <guibutton +>Entfernen</guibutton +> klicken. </para> +</sect1> + +<sect1 id="juk-advanced-search-dialog"> +<title +>Erweiterte Suche</title> +<para> +<screenshot> +<screeninfo +>Erweiterte Suche</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="juk-adv-search.png" format="PNG"/> + </imageobject> + <textobject> + <phrase +>Bildschirmphoto des erweiterten Suchdialogs</phrase> + </textobject> + </mediaobject> +</screenshot> +</para> + +<para +>Der erweiterte Suchdialog kann verwendet werden um <link linkend="juk-search-playlists" +>Wiedergabelisten zu durchsuchen</link +>. Er erlaubt Ihnen eine genaue Suche in den verschiedenen Metadaten Ihrer Stücke.</para> + +<para +>Am oberen Rand des Fensters können Sie den Namen der Wiedergabeliste eingeben. Dann können Sie die Kriterien im Bereich <guilabel +>Suchkriterien</guilabel +> festlegen. </para> + +<para +>Am Beginn der Gruppe <guilabel +>Suchkriterium</guilabel +> befinden sich zwei Auswahlknöpfe, <guilabel +>Übereinstimmung mit einem der Kriterien</guilabel +> und <guilabel +>Übereinstimmung mit allen Kriterien</guilabel +>. Wenn Sie <guilabel +>Übereinstimmung mit einem der Kriterien</guilabel +> auswählen, wird eine Übereinstimmung mit einem der angegebenen Kriterien das Stück zur Wiedergabeliste hinzufügen. Anderenfalls muss das Stück alle angegebenen Kriterien erfüllen um zur Wiedergabeliste hinzugefügt zu werden. </para> + +<para +>Unter den Auswahlknöpfen befinden sich die Eingabezeilen, mit denen Sie Kriterien festlegen können. Als Standard werden zwei Eingabezeilen angezeigt, falls Sie mehr als zwei Kriterien festlegen möchten, können Sie sich mit dem Knopf <guibutton +>Mehr</guibutton +> eine weitere Eingabezeile anzeigen lassen. Um die jeweils unterste Eingabezeile der Liste zu entfernen, müssen Sie auf den Knopf<guibutton +>Weniger</guibutton +> klicken. Falls Sie eine Eingabezeile leer lassen, wird diese von &juk; ignoriert, sodass Sie den <guibutton +> KnopfWeniger</guibutton +> nicht verwenden müssen, wenn Sie eine Eingabezeile leer lassen. </para> + +<para +>Jede Eingabezeile besteht aus drei Teilen. Ganz links befindet sich die Auswahlliste mit der Sie auswählen können welche Art von Metadaten übereinstimmen soll. Die Auswahlliste der Art der Übereinstimmung befindet sich ganz rechts, und in der Mitte finden Sie das Eingabefeld für den zu suchenden Text. Wenn Sie in der Auswahlliste der Metadaten, die übereinstimmen sollen, den Eintrag "<Alle Sichtbaren>" auswählen, werden alle Metadaten, die in Ihrer Kollektionsliste angezeigt werden, durchsucht. </para> + +<para +>Die Auswahlliste der Art der Übereinstimmung können Sie verwenden um &juk; mitzuteilen, welche Suchmethode verwendet werden soll. Folgende Suchmethoden können ausgewählt werden: <variablelist> +<varlistentry> +<term +>Normale Übereinstimmung</term> +<listitem +><para +>Dies ist die Standardeinstellung. &juk; sucht nach dem zu suchenden Text überall in den ausgewählten Metadaten. Dabei ignoriert es Groß- und Kleinschreibung. Zum Beispiel würde eine Suche nach "mode" im Künstlernamen auch zu "Depeche Mode" als Ergebnis führen.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +>Groß-/Kleinschreibung beachten</term> +<listitem +><para +>Diese Suchmethode ähnelt der Standard-Methode, allerdings wird die Groß- und Kleinschreibung beachtet. Folglich müssten Sie, wenn Sie nach "Depeche Mode" suchen wollen, als Suchbegriff "Mode" eingeben. </para +></listitem> +</varlistentry> + +<varlistentry> +<term +>Übereinstimmende Muster</term> +<listitem +><para +>Dies ist die vielseitigste Suchmethode. Der eingegebene Suchtext wird einen regulären Ausdruck definieren, der benutzt wird um innerhalb der Metadaten zu suchen. Reguläre Ausdrücke sind außerhalb des Rahmens dieser Dokumentation, aber das Programm &kregexpeditor; kann Ihnen helfen einen regulären Ausdruck zu formen. &juk; verwendet reguläre Ausdrücke im Stil von Qt.</para +></listitem> +</varlistentry> + +</variablelist> + +</para> + +<para +>Erstellen Sie die Suchkriterien, die Sie für Ihre Suche verwenden wollen, und klicken Sie auf <guibutton +>Ok</guibutton +>, um Ihre Wiedergabeliste aus einer Suche zu erstellen. </para> +</sect1> + +<sect1 id="juk-cover-manager"> + +<title +>Der &juk;-Titelbildmanager</title> + +<para +>Seit Version 2.3 (in &kde; 3.5 enthalten) besitzt &juk; eine verbesserte Titelbildverwaltung, die ein paar neue Möglichkeiten für den Benutzer bietet, die es in &juk; 2.2 (in &kde; 3.4) nicht gab. Die Arbeitsweise kann zudem so angepasst werden, dass Titelbilder wie in &juk; 2.2 gehandhabt werden. Lassen Sie uns also zuerst schauen, wie es bisher funktionierte.</para> + +<sect2 id="covers-in-juk-2.2"> +<title +>Wie Titelbilder in &juk; 2.2 funktionierten</title> + +<para +>In &juk; 2.2 waren Titelbilder eines Stücks an dessen Informationen über <guilabel +>Interpret</guilabel +> und <guilabel +>Album</guilabel +> gebunden. Obwohl sich dies als brauchbar erwies und ein paar Vorteile hatte, war es nicht der beste Weg, Titelbilder zu organisieren. Wenn Sie ein Titelbild für ein anderes Stück verwenden wollten, mussten Sie entweder die Metadaten des Stücks ändern, oder das Titelbild doppelt vorhalten, was Speicherplatz verschwendet. Und wenn Ihr Stück weder Informationen über den <guilabel +>Interpreten</guilabel +>, noch über das <guilabel +>Album</guilabel +> enthielt, konnte &juk; das Titelbild nicht zuweisen, da es sich an keine Informationen halten konnte. Es funktionierte, aber es konnte besser sein.</para> + +</sect2> + +<sect2 id="covers-in-juk-2.3"> + +<title +>Wie Titelbilder in &juk; 2.3 funktionieren</title> + +<para +>Für &juk; 2.3 wurde dieser Teil des Programms neu entworfen, um eine Komponente zu integrieren, die für die Handhabung der Titelbilder verantwortlich ist. Anstatt auf der Festplatte nach einem Bild mit festgelegtem Namen zu suchen, wie es &juk; 2.2 tat, verbindet der Titelbild-Manager von &juk; 2.3 jedes Titelbild mit einem Identifikations-Tag und verwendet dieses Tag mit Ihrer Musiksammlung. Es ist noch nicht perfekt, aber es funktioniert und kann Ihnen etwas Zeit sparen, während Sie damit mehr tun können als bisher.</para> + +<sect3 id="examples-adding-covers"> + +<title +>Beispielhaftes Hinzufügen von Titelbildern</title> + +<para +>Ein Beispiel: Sie haben gerade Stücke von einer &CD; erstellt und möchten für diese nun ein Titelbild setzen. Hier: <quote +>Alabama - Greatest Hits III</quote +>. In &juk; 2.2 könnten Sie eines der Stücke auswählen und ein Titelbild aus dem Internet herunterladen, indem Sie mit der &RMBn; darauf klicken oder <menuchoice +><guimenu +>Metadaten</guimenu +><guisubmenu +>Titelbildmanager</guisubmenu +><guimenuitem +>Titelbild aus dem Internet</guimenuitem +></menuchoice +> aus dem Menü wählen. Bedingt durch die Arbeitsweise von &juk; würde dieses Titelbild nun <emphasis +>allen</emphasis +> Stücken von <quote +>Alabama - Greatest Hits III</quote +> zugewiesen, <emphasis +>ob Sie das wollten oder nicht</emphasis +>.</para> + +<para +>In &juk; 2,3 ist das Verfahren, mit einer Ausnahme, sehr ähnlich. Sie sollten zuerst alle Stücke auswählen, denen Sie das Titelbild zuweisen möchten. Sie wählen also zuerst alle Stücke von <quote +>Alabama - Greatest Hits III</quote +> aus und benutzen dann den Befehl <menuchoice +><guimenuitem +>Titelbild aus dem Internet ...</guimenuitem +></menuchoice +>. Wenn Sie nur der Hälfte der Stücke ein Titelbild zuweisen möchten, markieren Sie diese Hälfte der Stücke bevor Sie <menuchoice +><guimenuitem +>Titelbild aus dem Internet ...</guimenuitem +></menuchoice +> ausführen. Über doppelte Titelbilder brauchen Sie sich keine Sorgen machen. &juk; ist intelligent genug, das gleiche Bild mehrfach zu verwenden, so dass nicht doppelte <literal role="extension" +>.png</literal +>-Bilder ihre Festplatte füllen.</para> +</sect3> + +<sect3 id="reusing-old-covers"> + +<title +>Alte Titelbilder wiederverwenden</title> + +<para +>Aber was passiert, wenn Sie vergessen haben, alle Stücke zu markieren? Sie könnten sie auswählen und den Vorgang wiederholen. Das würde jedoch ein doppeltes Titelbild auf Ihrer Festplatte erzeugen, da &juk; nicht beurteilen kann, ob das Titelbild, das Sie gefunden haben, mit dem schon vorhandenen Titelbild identisch ist. Sie können &juk; aber sagen, dass Sie das Titelbild eines anderen Stückes verwenden möchten.</para> + +<para +>Es gibt zwei Wege, dies zu tun:</para> + +<para +>1. Öffnen Sie den Dialog <guilabel +>Titelbildmanager</guilabel +> über das Menü <guimenu +>Metadaten</guimenu +> (<menuchoice +><guimenu +>Metadaten</guimenu +><guisubmenu +>Titelbildmanager</guisubmenu +><guimenuitem +>Titelbildmanager anzeigen</guimenuitem +></menuchoice +>). Der Titelbildmanager zeigt rechts eine Liste der &juk; bekannten Titelbilder an. Sobald diese fertig geladen ist, können Sie mit der Schnellsuchleiste oben oder der Interpretenauswahl links die Menge der angezeigten Titelbilder einschränken. Sobald Sie das gesuchte Titelbild sehen, können Sie es auf das gewünschte Stück ziehen und ablegen. Dies sollte ohne Verzögerung angewandt werden, da &juk; dasselbe Titelbild wiederverwendet (und das Titelbild wird auch beim Ziehen angezeigt). Leider kann es eine Weile dauern, bis der Titelbildmanager alle Titelbilder geladen hat.</para> + +<para +>3. Doppelklicken Sie auf das Stück, welches das Titelbild zugewiesen hat, um dessenWiedergabe zu starten. Das Titelbild wird nun in der <interface +>Wird gespielt</interface +>-Leiste angezeigt, und Sie können es auf alle Stücke ziehen, denen Sie es zuweisen möchten, so wie Sie es im Titelbildmanager auch getan haben.</para> + +</sect3> + +<sect3 id="dragging-covers"> + +<title +>Titelbilder auf mehr als ein Stück auf einmal ziehen</title> + +<para +>Sie können ein Titelbild auch auf mehr als ein Stück ziehen. Wählen Sie dazu die Stücke, denen Sie das Titelbild zuweisen möchten, und ziehen Sie das Titelbild auf eines der ausgewählten Stücke.</para> +</sect3> + +<sect3 id="old-covers"> + +<title +>Was passiert mit meinen alten Titelbildern?</title> + +<para +>Sie fragen sich vielleicht, was &juk; mit Titelbildern macht, die Sich noch von &juk; 2.2 haben. &juk; konvertiert alte Titelbilder automatisch und fügt sie der Titelbildverwaltung hinzu.</para> + +<para +>Da dies lange dauern kann, wird nicht alles auf einmal abgearbeitet. Alte Titelbilder werden daher nur konvertiert, wenn sie angezeigt werden. Während der Konvertierung stellt &juk; fest, welche Stücke dieses Titelbild verwenden würden und weist es ihnen automatisch zu. Im Endeffekt sollte es keine sichtbaren Änderungen geben: &juk; behält die gleichen Titelbilder für jedes Ihrer Stücke bei. Aber Sie profitieren ab jetet von den Vorzügen des neuen Titelbildmanagers.</para> + +</sect3> +<sect3 id="removing-covers"> + +<title +>Titelbilder entfernen</title> + +<para +>Sie können jetzt auch ein Titelbild für ein Stück entfernen, ohne es gleichzeitig für alle Stücke mit gleichem <guilabel +>Interpret</guilabel +> und <guilabel +>Album</guilabel +> zu entfernen.</para> + +<para +>In &juk; 2.3 entfernt der Befehl "Titelbild entfernen" das Titelbild nur aus dem ausgewählten Stück. </para> + +</sect3> +<sect3 id="suggested-use"> + +<title +>Anwendungsbeispiele:</title> + +<para +>1. Sie können jetzt das gleiche Titelbild Alben zuweisen, die aus <quote +>CD 1</quote +>, <quote +>CD 2</quote +> &etc; bestehen, was in &juk; 2.2 nicht ohne doppelte Titelbilder möglich war.</para> + +<para +>2. Um Stücken, die nicht auf einem Album veröffentlicht wurden, ein generisches Titelbild zu geben, können Sie ein Titelbild entwerfen, und es diesen Stücken zuweisen.</para> + +</sect3> +</sect2> +</sect1> + +</chapter> + +<chapter id="toolbar-reference"> +<title +>Die &juk;-Werkzeugleiste</title> + +<sect1 id="main-toolbar"> +<title +>Die Hauptwerkzeugleiste</title> + +<screenshot> +<screeninfo +>Die &juk;-Werkzeugleiste</screeninfo> +<mediaobject> +<imageobject> +<imagedata format="PNG" fileref="toolbar.png"/> +</imageobject> +<textobject> +<phrase +>Die &juk;-Werkzeugleiste</phrase> +</textobject> +<caption +><para +>Die &juk;-Werkzeugleiste</para +></caption> +</mediaobject> +</screenshot> + +<para +>Von links nach rechts im Bildschirmphoto oben, sind folgende Symbole zu sehen:</para> + +<variablelist> +<varlistentry> +<term +><guiicon +>Neu</guiicon +></term> +<listitem +><para +>Erstellen einer neuen Wiedergabeliste. Wenn Sie die linke Maustaste beim klicken auf das Symbol gedrückt halten, erscheint ein Menü, in dem Sie zwischen den verschiedenen Arten von Wiedergabelisten wählen können. </para> + <variablelist> + <varlistentry +><term +><guimenuitem +>Leere Wiedergabeliste ...</guimenuitem +></term> + <listitem +><para +>Wenn Sie diese Option auswählen, wird eine vollkommen leere Wiedergabeliste zum Wiedergabelistenbereich hinzugefügt, nachdem Sie einen Namen für die neue Wiedergabeliste vergeben haben.</para +></listitem> + </varlistentry> + + <varlistentry +><term +><guimenuitem +>Wiedergabeliste aus Ordner ...</guimenuitem +></term> + <listitem +><para +>Wählen Sie zuerst einen Ordner aus, aus dem dann eine Wiedergabeliste erstellt wird, die alle Dateien des angegebenen Ordners und allen seinen Unterordnern enthält. Der Name der erstellten Wiedergabeliste stimmt mit dem Namen des ausgewählten Ordners überein.</para +></listitem> + </varlistentry> + + <varlistentry +><term +><guimenuitem +>Wiedergabeliste durchsuchen ...</guimenuitem +></term> + <listitem +><para +>Diese Option ruft den erweiterten Suchdialog auf, der es Ihnen erlaubt, eine <quote +>virtuelle Wiedergabeliste</quote +> zu erstellen. Alle Stücke die zu den angegebenen Suchkriterien passen, die Sie im erweiterteren Suchdialog angegeben haben, werden zur neuen Wiedergabeliste hinzugefügt. Wenn Sie später Stücke zu Ihrer Kollektionsliste hinzufügen, die zu den angegebenen Suchkriterien passen, werden diese automatisch zur virtuellen Wiedergabeliste hinzugefügt. Wenn Sie zum Beispiel eine Wiedergabeliste für alle Ihre "Depeche Mode"-Stücke erstellen, und Sie ein weiteres "Depeche Mode"-Stück zu Ihrer Kollektionsliste hinzufügen, wird dieses auch automatisch dieser Wiedergabeliste hinzugefügt. </para +></listitem> + </varlistentry> + + </variablelist> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guiicon +>Öffnen</guiicon +></term> +<listitem +><para +>Fügen Sie eine Datei zur Kollektionsliste oder zur gerade aktiven (im Fenster angezeigten) Wiedergabeliste hinzu. Das Hinzufügen einer Datei zu einer Wiedergabeliste wird diese auch automatisch zur Kollektionsliste hinzufügen; umgekehrt gilt das allerdings nicht.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><guiicon +>Speichern</guiicon +></term> +<listitem +><para +>Speichern der gerade aktiven Wiedergabeliste. Um geänderte Metadaten zu speichern, klicken Sie irgendwo in das &juk;-Programmfenster oder drücken Sie den Kurzbefehl <keycombo action="simul" +>&Strg;<keycap +>T</keycap +></keycombo +>.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><guiicon +>Ausschneiden</guiicon +></term> +<listitem +><para +>Wenn ein Stück in einer Wiedergabeliste ausgewählt ist, wird es dadurch aus der Wiedergabeliste entfernt. Wenn der Metadaten-Editor aktiv ist, funktioniert der Knopf wie in jedem anderem Editor auch, das heißt, er entfernt den ausgewählten Text und speichert ihn in der Zwischenablage.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><guiicon +>Kopieren</guiicon +></term> +<listitem +><para +>Wenn der Metadaten-Editor aktiv ist, funktioniert der Knopf wie in jedem anderem Editor auch, er kopiert den ausgewählten Text in die Zwischenablage.</para> +<para +>Wenn Sie die Funktion verwenden, während ein Stück in der Kollektionsliste ausgewählt ist, wird dessen URL in der Zwischenablage gespeichert, so dass Sie sie anderswo einfügen können. Zum Beispiel in einen Texteditor, &konqueror;, oder eine andere Wiedergabeliste.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><guiicon +>Einfügen</guiicon +></term> +<listitem +><para +>Wenn Sie bereits vorher eine URL in die Zwischenablage kopiert haben, können Sie diese mit dieser Funktion wieder in eine Wiedergabeliste einfügen. Natürlich können Sie auch eine URL einfügen, die Sie aus &konqueror; oder einem anderem Programm kopiert oder ausgeschnitten haben. Wenn der Metadaten-Editor aktiv ist wird diese Funktion den derzeitigen Inhalt der Zwischenablage in das ausgewählte Feld einfügen.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><guiicon +>Suchleiste anzeigen</guiicon +></term> +<listitem +><para +>Anzeigen oder Ausblenden der <link linkend="search-bar" +>Suchleiste</link +>.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><guiicon +>Metadaten-Editor anzeigen</guiicon +></term> +<listitem +><para +>Anzeigen oder Ausblenden <link linkend="tagging-a-single-file" +>des Metadaten-Editors</link +>.</para +></listitem> +</varlistentry> + +<varlistentry id="play-toolbar"> +<term +>Wiedergabe</term> +<listitem> +<para +>Dies funktioniert wie in jedem anderen Audio-Wiedergabeprogramm auch. Die Funktionen, die zur Verfügung stehen, sind <guiicon +>Wiedergabe</guiicon +>, <guiicon +>Pause</guiicon +>, <guiicon +>Stopp</guiicon +>, <guiicon +>Vorheriger Titel</guiicon +> und <guiicon +>Nächster Titel</guiicon +>.</para> +<para +>In die Programmoberfläche ist auch eine Fortschrittsanzeige in Form eines Schiebereglers integriert, die anzeigt, wie weit (relativ) Sie ein Stück schon gehört haben. Sie können den Schieberegler mit der Maus bewegen, um innerhalb des Stücks vorwärts oder rückwärts zu springen.</para> +<para +>Zu guter Letzt befindet sich in der Programmoberfläche auch ein Lautstärkeregler. Wie Sie bereits ahnen, können Sie damit die Lautstärke verändern, also lauter und leiser stellen. <quote +>Laut</quote +> befindet sich ganz rechts und <quote +>Leise</quote +> ganz links.</para +></listitem> +</varlistentry> +</variablelist> + +</sect1> + +<sect1 id="search-bar"> +<title +>Die Suchleiste</title> + +<para +>Mit der Suchleiste können Sie schnell und einfach nach einem Stück in der Kollektionsliste oder der gerade aktiven Wiedergabeliste suchen.</para> + +<para +>Die Eingabe eines Suchbegriffs in die Suchleiste wird die Liste der angezeigten Stücke auf jene reduzieren die den eingegebenen Suchbegriff in einer sichtbaren Spalte enthalten. Das Drücken der <keycap +>Eingabetaste</keycap +> wird das oberste Stück der reduzierten Liste abspielen.</para> + +<para +>Die Suche beginnt augenblicklich wenn Sie beginnen den Suchbegriff in das Suchfeld einzugeben. Die Suche ist inkrementell, das heißt mit jedem Zeichen das Sie eingeben, wird das Suchergebnis eingeengt. Dies ist praktisch wenn Sie sich zum Beispiel nur an den Teil eines Stücknamens erinnern.</para> + +<para +>Wenn Sie eine präzisere Suchanfrage stellen wollen, können Sie auf den Knopf des erweiterten Suchdialogs rechts neben der Suchleiste klicken, welcher es Ihnen ermöglicht eine virtuelle Wiedergabeliste zu erstellen. Wenn Sie die Suchanfrage abbrechen wollen, klicken Sie auf den Löschen-Knopf links neben der Suchleiste.</para> + +</sect1> + +</chapter> + +<chapter id="menu-and-command-reference"> +<title +>Menü- und Befehlsreferenz</title> + +<sect1 id="menus"> +<title +>Menüs</title> + +<sect2 id="menu-file"> +<title +>Das Menü <guimenu +>Datei</guimenu +></title> + +<variablelist> +<varlistentry> +<term +><menuchoice +><shortcut +><keycombo action="simul" +>&Strg;<keycap +>N</keycap +></keycombo +></shortcut +><guimenu +>Datei</guimenu +><guisubmenu +>Neu</guisubmenu +><guimenuitem +>Leere Wiedergabeliste ...</guimenuitem +> </menuchoice> +</term> +<listitem +><para +>Erstellt eine neue Wiedergabeliste.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><shortcut +><keycombo action="simul" +>&Strg;<keycap +>D</keycap +></keycombo +></shortcut +><guimenu +>Datei</guimenu +><guisubmenu +>Neu</guisubmenu +><guimenuitem +>Wiedergabeliste aus Ordner ...</guimenuitem +> </menuchoice> +</term> +<listitem +><para +>Erstellt eine neue Wiedergabeliste, die alle Musikdateien eines Ordners und seiner Unterordner enthält. Jedes Stück innerhalb einer Wiedergabeliste die &juk; im Ordner oder einem Unterordner findet, wird ebenfalls zur Kollektionsliste hinzugefügt.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><shortcut +><keycombo action="simul" +>&Strg;<keycap +>F</keycap +></keycombo +></shortcut +><guimenu +>Datei</guimenu +><guisubmenu +>Neu</guisubmenu +><guimenuitem +> Wiedergabeliste aus Suche erstellen ...</guimenuitem +> </menuchoice> +</term> +<listitem +><para +>Erstellt eine neue <link linkend="juk-search-playlists" +>Wiedergabeliste aus einer Suchanfrage</link +>.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Strg;<keycap +>O</keycap +></keycombo +> </shortcut +> <guimenu +>Datei</guimenu +> <guimenuitem +>Öffnen ...</guimenuitem +> </menuchoice> +</term> +<listitem +><para +>Wählen Sie eine oder mehrere Datei/en aus und fügen Sie sie zur Kollektionsliste hinzu. Wenn Sie eine Wiedergabeliste auswählen werden alle enthaltenen Stücke zur Kollektionsliste hinzugefügt.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Datei</guimenu +><guimenuitem +>Ordner öffnen ...</guimenuitem +> </menuchoice> +</term> +<listitem +><para +>Wählen Sie einen oder mehrere Ordner aus. Der oder die Ordner werden zur Kollektionsliste hinzugefügt und bei jedem Start von &juk; neu eingelesen und eventuelle Änderungen übernommen. Alternativ können Sie die Ordner auch während &juk; gestartet ist über den Menüpunkt <menuchoice +><guimenu +>Datei</guimenu +><guimenuitem +>Erneut laden</guimenuitem +> </menuchoice +> neu einlesen.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Datei</guimenu +><guimenuitem +>Umbenennen ...</guimenuitem +></menuchoice> +</term> +<listitem +><para +>Umbenennen einer Wiedergabeliste.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Datei</guimenu +><guimenuitem +>Duplizieren ...</guimenuitem +></menuchoice> +</term> +<listitem +><para +>Erzeugt ein Duplikat der ausgewählten Wiedergabeliste, und fragt nach einem neuen Namen für die neue Liste. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Datei</guimenu +><guimenuitem +>Erneut laden</guimenuitem +></menuchoice> +</term> +<listitem +><para +>Lädt alle Metadaten der in der ausgewählten Wiedergabeliste enthaltenen Stücke neu. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Datei</guimenu +><guimenuitem +>Entfernen</guimenuitem +></menuchoice +></term> +<listitem +><para +>Entfernt die ausgewählte Wiedergabeliste.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><shortcut +><keycombo action="simul" +>&Strg;<keycap +>S</keycap +></keycombo +> </shortcut +> <guimenu +>Datei</guimenu +><guimenuitem +>Speichern</guimenuitem +> </menuchoice> +</term> +<listitem +><para +>Speichert die ausgewählte Wiedergabeliste.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Datei</guimenu +><guimenuitem +>Speichern unter ...</guimenuitem +> </menuchoice> +</term> +<listitem +><para +>Speichert die ausgewählte Wiedergabeliste unter einem anderen Namen.</para> +</listitem> +</varlistentry> + +</variablelist> +</sect2> + +<sect2 id="menu-edit"> +<title +>Das Menü <guimenu +>Bearbeiten</guimenu +></title> + +<variablelist> + +<varlistentry> +<term +><menuchoice +><guimenu +>Bearbeiten</guimenu +><guimenuitem +>Löschen</guimenuitem +> </menuchoice> +</term> +<listitem +><para +>Entfernt die ausgewählten Stücke aus der Wiedergabeliste.</para> +</listitem> +</varlistentry> + +</variablelist> +</sect2> + +<sect2 id="menu-view"> +<title +>Das Menü <guimenu +>Ansicht</guimenu +></title> + +<variablelist> +<varlistentry> +<term +><menuchoice +><guimenu +>Ansicht</guimenu +><guimenuitem +>Suchleiste anzeigen</guimenuitem +> </menuchoice> +</term> +<listitem +><para +>Mit dieser Funktion können Sie die <link linkend="juk-history-playlists" +>Suchleiste</link +> ein- bzw. ausblenden.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Ansicht</guimenu +><guimenuitem +>Metadaten-Editor anzeigen</guimenuitem +> </menuchoice> +</term> +<listitem +><para +>Mit dieser Funktion können Sie den <interface +>Metadaten-Editor</interface +> ein- bzw ausblenden.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Ansicht</guimenu +><guimenuitem +>Verlauf anzeigen</guimenuitem +> </menuchoice> +</term> +<listitem +><para +>Mit dieser Funktion können Sie die<link linkend="juk-history-playlists" +>Verlauf-Wiedergabeliste</link +> ein- bzw. ausblenden.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Ansicht</guimenu +><guisubmenu +>Anzeigemodi</guisubmenu +><guimenuitem +>Standard</guimenuitem +> </menuchoice> +</term> +<listitem +><para +>Wechselt zur <link linkend="juk-viewmode-default" +>Standardansicht</link +>. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Ansicht</guimenu +><guisubmenu +>Anzeigemodi</guisubmenu +><guimenuitem +>Kompakt</guimenuitem +> </menuchoice> +</term> +<listitem +><para +>Wechselt zur <link linkend="juk-viewmode-compact" +>Kompaktansicht</link +>. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Ansicht</guimenu +><guisubmenu +>Anzeigemodi</guisubmenu +><guimenuitem +>Baum</guimenuitem +> </menuchoice> +</term> +<listitem +><para +>Wechselt zur <link linkend="juk-viewmode-tree" +>Baumansicht</link +>. </para> +</listitem> +</varlistentry> + +</variablelist> +</sect2> + +<sect2 id="menu-player"> +<title +>Das Menü <guimenu +>Wiedergabe</guimenu +></title> + +<variablelist> +<varlistentry> +<term +><menuchoice +><guimenu +>Wiedergabe</guimenu +><guimenuitem +>Zufallswiedergabe</guimenuitem +> </menuchoice> +</term> +<listitem +><para +>Mit dieser Funktion können Sie &juk; dazu bringen, nach dem Ende der Wiedergabe des aktuellen Stücks, zufällig ein Stück aus der ausgewählten Wiedergabeliste auszuwählen und dieses abzuspielen.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Wiedergabe</guimenu +><guimenuitem +>Wiedergabeliste wiederholen</guimenuitem +> </menuchoice> +</term> +<listitem +><para +>Wenn Sie diese Funktion aktivieren, wird &juk;, nachdem es das Ende einer Wiedergabeliste erreicht hat, diese wieder vom Beginn an abspielen.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Wiedergabe</guimenu +><guimenuitem +>Wiedergabe</guimenuitem +> </menuchoice> +</term> +<listitem +><para +>Dieses Kommando spielt entweder das gerade ausgewählte Stück ab oder setzt die Wiedergabe eines Stücks fort, wenn diese pausiert wurde.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Wiedergabe</guimenu +><guimenuitem +>Pause</guimenuitem +> </menuchoice> +</term> +<listitem +><para +>Mit diesem Kommando können Sie die Wiedergabe eines Stücks pausieren. Mit dem Wiedergabekommando können Sie selbige dann wieder fortsetzen.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Wiedergabe</guimenu +><guimenuitem +>Stopp</guimenuitem +> </menuchoice> +</term> +<listitem +><para +>Dieses Kommando stoppt die Wiedergabe des aktuellen Stücks. Sie können die Wiedergabe des Stücks nicht wieder an derselben Stelle fortsetzen.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Wiedergabe</guimenu +><guimenuitem +>Vorheriger Titel</guimenuitem +> </menuchoice> +</term> +<listitem +><para +>Dieses Kommando spielt das Stück ab das vor dem aktuellen Stück abgespielt wurde.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Wiedergabe</guimenu +><guimenuitem +>Nächster Titel</guimenuitem +> </menuchoice> +</term> +<listitem +><para +>Dieses Kommando springt zum nächsten Stück in der Wiedergabeliste.</para> +</listitem> +</varlistentry> + +</variablelist> +</sect2> + +<sect2 id="menu-tagger"> +<title +>Das Menü <guimenu +>Metadaten</guimenu +></title> + +<variablelist> + +<varlistentry> +<term +><menuchoice +><shortcut +><keycombo action="simul" +><keycap +>Strg</keycap +><keycap +>T</keycap +></keycombo +></shortcut +> <guimenu +>Metadaten</guimenu +><guimenuitem +>Speichern</guimenuitem +> </menuchoice> +</term> +<listitem +><para +>Dieses Kommando speichert alle Änderungen der Metadaten der Datei die Sie gerade bearbeiten. Normalerweise werden Änderungen nicht gespeichert bis Sie mit der Maus in einen anderen Teil des &juk;-Programmfensters klicken.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Metadaten</guimenu +><guimenuitem +>Löschen</guimenuitem +> </menuchoice> +</term> +<listitem +><para +>Dieses Kommando löscht das gerade ausgewählte Stück aus der Kollektionsliste und allen Wiedergabelisten in denen es enthalten ist. Danach wird die zum Stück gehörige Datei von der Festplatte gelöscht. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><shortcut +><keycombo action="simul" +><keycap +>Strg</keycap +><keycap +>F</keycap +></keycombo +></shortcut +> <guimenu +>Metadaten</guimenu +><guisubmenu +>Metadaten raten</guisubmenu +><guimenuitem +>Vom Dateinamen</guimenuitem +> </menuchoice> +</term> +<listitem +><para +>Diese Funktion versucht, die Metadaten eines Stücks anhand des Dateinamens zu erraten. Sie können die zu verwendenden Schemen über den Menüpunkt <menuchoice +><guimenu +>Einstellungen</guimenu +> <guimenuitem +>Metadaten raten ...</guimenuitem +></menuchoice +> bearbeiten, welcher den Dialog <link linkend="juk-tag-guesser-configuration" +>Einrichtung des Metadaten-Raters</link +> öffnet.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><shortcut +><keycombo action="simul" +><keycap +>Strg</keycap +><keycap +>I</keycap +></keycombo +></shortcut +> <guimenu +>Metadaten</guimenu +><guisubmenu +>Metadaten raten</guisubmenu +><guimenuitem +>Aus dem Internet</guimenuitem +> </menuchoice> +</term> +<listitem +><para +>Diese Funktion versucht die Metadaten einer Datei zu erraten, indem sie <application +>trm</application +> von <ulink url="http://www.musicbrainz.org/" +>MusicBrainz</ulink +> verwendet.</para> +</listitem> +</varlistentry> + +</variablelist> + +</sect2> + +<sect2 id="menu-settings"> +<title +>Das Menü <guimenu +>Einstellungen</guimenu +></title> + +<variablelist> + +<varlistentry> +<term +><menuchoice +><guimenu +>Einstellungen</guimenu +><guisubmenu +>Werkzeugleisten</guisubmenu +> <guimenuitem +>Haupt-Werkzeugleiste (JuK)</guimenuitem +> </menuchoice> +</term> +<listitem +><para +>Dieses Kommando blendet die <link linkend="main-toolbar" +>Haupt-Werkzeugleiste</link +> ein bzw. aus.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Einstellungen</guimenu +><guisubmenu +>Werkzeugleisten</guisubmenu +> <guimenuitem +>Wiedergabe-Werkzeugleiste (JuK)</guimenuitem +> </menuchoice> +</term> +<listitem +><para +>Dieses Kommando blendet die <link linkend="play-toolbar" +>Wiedergabe-Werkzeugleiste</link +>ein bzw. aus.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Einstellungen</guimenu +> <guimenuitem +>Begrüßungsbildschirm beim Starten anzeigen</guimenuitem +> </menuchoice> +</term> +<listitem +><para +>Wenn Sie diese Funktion aktivieren, wird &juk; bei jedem Programmstart, während es Ihre Musiksammlung lädt, einen Begrüßungsbildschirm anzeigen, auf dem Informationen über die Sammlung angezeigt werden.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Einstellungen</guimenu +> <guimenuitem +>Im Systembereich der Kontrollleiste andocken</guimenuitem +> </menuchoice> +</term> +<listitem +><para +>Diese Option wird, wenn sie aktiviert wurde, ein &juk;-Symbol im Systemabschnitt der Kontrollleiste anzeigen. Über dieses Symbol zeigt &juk; an, ob es gerade ein Stück wiedergibt. Außerdem können Sie durch das Symbol bequem auf die Wiedergabefunktion von &juk; zugreifen.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Einstellungen</guimenu +> <guimenuitem +>Nach dem Schließen in der Kontrollleiste bleiben</guimenuitem +> </menuchoice> +</term> +<listitem +><para +>Wenn Sie diese Option aktiviert haben, wird &juk; nicht beendet wenn Sie das Programmfenster schließen, sondern bleibt im Systemabschnitt der Kontrollleiste als &juk;-Symbol weiterhin aktiv. Um diese Funktion nutzen zu können, muss die Option "An der Kontrollleiste andocken" ebenfalls aktiviert sein. Um &juk; zu beenden, müssen Sie dann entweder das Kommando <menuchoice +><guimenu +>Datei</guimenu +> <guimenuitem +>Beenden</guimenuitem +></menuchoice +> im Programmfenster auswählen, oder Sie erledigen dies bequem über das Symbol im Systemabschnitt der Kontrollleiste. Dazu klicken Sie mit der rechten Maustaste auf das Symbol und wählen dann die Option <guimenuitem +>Beenden</guimenuitem +> aus.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Einstellungen</guimenu +> <guimenuitem +>Titelankündigung anzeigen</guimenuitem +> </menuchoice> +</term> +<listitem +><para +>Wenn diese Option aktiviert ist, wird &juk; ein kleines Fenster einblenden, das Informationen über den Künstler und das Stück enthält dessen Wiedergabe gerade begonnen hat und Knöpfe für das schnelle wechseln zu einem anderem Stück enthält. Die Option "An der Kontrollleiste andocken" muss ebenfalls aktiviert sein.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Einstellungen</guimenu +> <guimenuitem +>Metadaten raten ...</guimenuitem +> </menuchoice> +</term> +<listitem +><para +>Dieser Menüpunkt öffnet den Dialog <link linkend="juk-tag-guesser-configuration" +>Einrichtung des Metadaten-Raters</link +>. Dort können Sie alle Schemata bearbeiten, nach denen &juk; versucht die Metadaten aus Dateinamen zu erraten.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Einstellungen</guimenu +> <guimenuitem +>Dateien umbenennen ...</guimenuitem +> </menuchoice> +</term> +<listitem +><para +>Dieser Menüpunkt öffnet den Konfigurationsdialog <link linkend="juk-rename-dialog" +>Dateien umbenennen</link +>, in dem Sie einstellen können, nach welchen Schemata &juk; die Dateien umbenennen soll.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Einstellungen</guimenu +> <guimenuitem +>Kurzbefehle festlegen ...</guimenuitem +> </menuchoice> +</term> +<listitem +><para +>Öffnet den &kde;-Standarddialog zum Einrichten von Kurzbefehlen für &juk;. Einige vernünftige Kurzbefehle sind bereits voreingestellt, wie zum Beispiel Multimedia-Tasten für Besitzer einer Multimedia-Tastatur.</para> +</listitem> +</varlistentry> + +</variablelist> + +</sect2> + +</sect1> + +<sect1 id="keybindings"> +<title +>Tastenbelegung</title> + +<!-- +ctrl-a select all +ctrl-c copy +ctrl-r rename file +ctrl-i guess tag entries from internet +ctrl-f guess tag entries based on filename +ctrl-f new search playlist +ctrl-n new empty playlist +ctrl-d new playlist from folder +ctrl-o open file (add to the collection or a playlist) +ctrl-q quit +ctrl-s save +ctrl-t save edited tag information +ctrl-v paste +ctrl-x cut +f1 Show manual +shift-f1 what's this help + +--> +<informaltable> +<tgroup cols="2"> +<thead> +<row> +<entry +>Tastenkombinationen (Kurzbefehle)</entry> +<entry +>Aktion</entry> +</row> +</thead> +<tbody> +<row> +<entry +><keycombo +action="simul" +>&Strg;<keycap +>A</keycap +></keycombo +></entry> +<entry +>Alles auswählen</entry> +</row> +<row> +<entry +><keycombo action="simul" +>&Strg;<keycap +>C</keycap +></keycombo +></entry> +<entry +>Kopieren</entry> +</row> +<row> +<entry +><keycombo +action="simul" +>&Strg;<keycap +>R</keycap +></keycombo +></entry> +<entry +>Datei umbenennen</entry> +</row> +<row> +<entry +><keycombo +action="simul" +>&Strg;<keycap +>I</keycap +></keycombo +></entry> +<entry +>Metadaten aus dem Internet raten.</entry> +</row> +<row> +<entry +><keycombo +action="simul" +>&Strg;<keycap +>G</keycap +></keycombo +></entry> +<entry +>Metadaten aus dem Dateinamen raten.</entry> +</row> +<row> +<entry +><keycombo +action="simul" +>&Strg;<keycap +>F</keycap +></keycombo +></entry> +<entry +>Neue <link linkend="juk-search-playlists" +>Wiedergabeliste aus Suche</link +> erstellen.</entry> +</row> +<row> +<entry +><keycombo action="simul" +>&Strg;<keycap +>G</keycap +></keycombo +></entry> +<entry +>Metadaten aus dem Dateinamen erraten</entry> +</row> +<row> +<entry +><keycombo +action="simul" +>&Strg;<keycap +>N</keycap +></keycombo +></entry> +<entry +>Neue leere Wiedergabeliste</entry> +</row> +<row> +<entry +><keycombo +action="simul" +>&Strg;<keycap +>D</keycap +></keycombo +></entry> +<entry +>Neue Wiedergabeliste aus Ordner erstellen.</entry> +</row> +<row> +<entry +><keycombo +action="simul" +>&Strg;<keycap +>T</keycap +></keycombo +></entry> +<entry +>Geänderte Metadaten speichern.</entry> +</row> +</tbody> +</tgroup> +</informaltable> + +</sect1> +</chapter> + +<chapter id="credits-and-licenses"> +<title +>Mitwirkende und Lizenz</title> + +<para +>&juk; Copyright ©.2002, 2003, 2004 &Scott.Wheeler;</para> + +<para +>&juk; wird von &Scott.Wheeler; &Scott.Wheeler.mail; entwickelt und gepflegt.</para> + +<para +>Vielen Dank an die nachfolgenden Leute, die zu &juk; beigetragen haben:</para> + +<itemizedlist> +<listitem +><para +>&Daniel.Molkentin;&Daniel.Molkentin.mail; für das Systemabschnittsymbol, den <quote +>eingebetteten</quote +> Metadaten-Editor, Fehlerkorrekturen, Evangelismus und moralische Unterstützung.</para> +</listitem> +<listitem +><para +>Tim Jansen <email +>[email protected]</email +> für den<application +>GStreamer</application +>-Anschluss von &juk;.</para> +</listitem> + +<listitem +><para +>Stefan Asserhäll <email +>[email protected]</email +> für die Unterstützung globaler Tastenkürzel.</para> +</listitem> + +<listitem +><para +>Stephen Douglas <email +>[email protected]</email +> für das Titelankündigungsfenster.</para> +</listitem> + +<listitem +><para +>&Frerich.Raabe;&Frerich.Raabe.mail; für automatisches raten der Stückdaten und Fehlerkorrekturen.</para> +</listitem> + +<listitem +><para +>Zack Rusin <email +>[email protected]</email +> für mehrere automatische Dinge, auch MusicBrainz-Support.</para> +</listitem> + +<listitem +><para +>Adam Treat <email +>[email protected]</email +> für die Mitarbeit am MusicBrainz-Support.</para> +</listitem> + +<listitem +><para +>Matthias Kretz <email +>[email protected]</email +>, den freundlichen &arts;-Guru in der Nachbarschaft.</para> +</listitem> + +<listitem +><para +>Maks Orlovich <email +>[email protected]</email +> für Ideen, die Leuten mit Terabytes von Musik das Leben mit &juk; leichter machen.</para> +</listitem> + +<listitem +><para +>Antonio Larrosa Jimenez <email +>[email protected]</email +> für die &DCOP;-Schnittstelle.</para> +</listitem> + +</itemizedlist> + +<para +>Copyright der Dokumentation © 2003, &Lauri.Watts;, und © 2004 Michael Pyne.</para> + +<para +>Patrick Trettenbrein<email +>[email protected]</email +></para +> +&underFDL; &underGPL; </chapter> + +&documentation.index; + +</book> +<!-- +Local Variables: +mode: sgml +sgml-minimize-attributes:nil +sgml-general-insert-case:lower +sgml-indent-step:0 +sgml-indent-data:nil +End: +--> diff --git a/tde-i18n-de/docs/tdemultimedia/juk/juk-adv-search.png b/tde-i18n-de/docs/tdemultimedia/juk/juk-adv-search.png Binary files differnew file mode 100644 index 00000000000..6abfb399d67 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/juk/juk-adv-search.png diff --git a/tde-i18n-de/docs/tdemultimedia/juk/juk-file-renamer.png b/tde-i18n-de/docs/tdemultimedia/juk/juk-file-renamer.png Binary files differnew file mode 100644 index 00000000000..c07c0f075f6 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/juk/juk-file-renamer.png diff --git a/tde-i18n-de/docs/tdemultimedia/juk/juk-main.png b/tde-i18n-de/docs/tdemultimedia/juk/juk-main.png Binary files differnew file mode 100644 index 00000000000..cebec5360c8 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/juk/juk-main.png diff --git a/tde-i18n-de/docs/tdemultimedia/juk/juk-tag-guesser.png b/tde-i18n-de/docs/tdemultimedia/juk/juk-tag-guesser.png Binary files differnew file mode 100644 index 00000000000..2036049a3a6 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/juk/juk-tag-guesser.png diff --git a/tde-i18n-de/docs/tdemultimedia/juk/normal-playlist.png b/tde-i18n-de/docs/tdemultimedia/juk/normal-playlist.png Binary files differnew file mode 100644 index 00000000000..17d37250072 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/juk/normal-playlist.png diff --git a/tde-i18n-de/docs/tdemultimedia/juk/search-playlist.png b/tde-i18n-de/docs/tdemultimedia/juk/search-playlist.png Binary files differnew file mode 100644 index 00000000000..05e10e53298 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/juk/search-playlist.png diff --git a/tde-i18n-de/docs/tdemultimedia/juk/toolbar.png b/tde-i18n-de/docs/tdemultimedia/juk/toolbar.png Binary files differnew file mode 100644 index 00000000000..94d6c912907 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/juk/toolbar.png diff --git a/tde-i18n-de/docs/tdemultimedia/kaboodle/Makefile.am b/tde-i18n-de/docs/tdemultimedia/kaboodle/Makefile.am new file mode 100644 index 00000000000..df6332b8050 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/kaboodle/Makefile.am @@ -0,0 +1,4 @@ +KDE_LANG = de +SUBDIRS = $(AUTODIRS) +KDE_DOCS = AUTO +KDE_MANS = AUTO diff --git a/tde-i18n-de/docs/tdemultimedia/kaboodle/Makefile.in b/tde-i18n-de/docs/tdemultimedia/kaboodle/Makefile.in new file mode 100644 index 00000000000..8e06bad5010 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/kaboodle/Makefile.in @@ -0,0 +1,635 @@ +# Makefile.in generated by automake 1.10.1 from Makefile.am. +# KDE tags expanded automatically by am_edit - $Revision: 483858 $ +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = docs/tdemultimedia/kaboodle +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +#>- RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ +#>- html-recursive info-recursive install-data-recursive \ +#>- install-dvi-recursive install-exec-recursive \ +#>- install-html-recursive install-info-recursive \ +#>- install-pdf-recursive install-ps-recursive install-recursive \ +#>- installcheck-recursive installdirs-recursive pdf-recursive \ +#>- ps-recursive uninstall-recursive +#>+ 7 +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive nmcheck-recursive bcheck-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +#>- DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +#>+ 1 +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) $(KDE_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +ARTSCCONFIG = @ARTSCCONFIG@ +AUTOCONF = @AUTOCONF@ +AUTODIRS = @AUTODIRS@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CONF_FILES = @CONF_FILES@ +CYGPATH_W = @CYGPATH_W@ +DCOPIDL = @DCOPIDL@ +DCOPIDL2CPP = @DCOPIDL2CPP@ +DCOPIDLNG = @DCOPIDLNG@ +DCOP_DEPENDENCIES = @DCOP_DEPENDENCIES@ +DEFS = @DEFS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +GMSGFMT = @GMSGFMT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KCFG_DEPENDENCIES = @KCFG_DEPENDENCIES@ +KCONFIG_COMPILER = @KCONFIG_COMPILER@ +KDECONFIG = @KDECONFIG@ +KDE_EXTRA_RPATH = @KDE_EXTRA_RPATH@ +KDE_RPATH = @KDE_RPATH@ +KDE_XSL_STYLESHEET = @KDE_XSL_STYLESHEET@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MAKEKDEWIDGETS = @MAKEKDEWIDGETS@ +MCOPIDL = @MCOPIDL@ +MEINPROC = @MEINPROC@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TOPSUBDIRS = @TOPSUBDIRS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XMLLINT = @XMLLINT@ +X_RPATH = @X_RPATH@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +am__leading_dot = @am__leading_dot@ +am__tar = @am__tar@ +am__untar = @am__untar@ +#>- bindir = @bindir@ +#>+ 2 +DEPDIR = .deps +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +kde_appsdir = @kde_appsdir@ +kde_bindir = @kde_bindir@ +kde_confdir = @kde_confdir@ +kde_datadir = @kde_datadir@ +kde_htmldir = @kde_htmldir@ +kde_icondir = @kde_icondir@ +kde_kcfgdir = @kde_kcfgdir@ +kde_libs_htmldir = @kde_libs_htmldir@ +kde_libs_prefix = @kde_libs_prefix@ +kde_locale = @kde_locale@ +kde_mimedir = @kde_mimedir@ +kde_moduledir = @kde_moduledir@ +kde_servicesdir = @kde_servicesdir@ +kde_servicetypesdir = @kde_servicetypesdir@ +kde_sounddir = @kde_sounddir@ +kde_styledir = @kde_styledir@ +kde_templatesdir = @kde_templatesdir@ +kde_wallpaperdir = @kde_wallpaperdir@ +kde_widgetdir = @kde_widgetdir@ +tdeinitdir = @tdeinitdir@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +xdg_appsdir = @xdg_appsdir@ +xdg_directorydir = @xdg_directorydir@ +xdg_menudir = @xdg_menudir@ +KDE_LANG = de +#>- SUBDIRS = $(AUTODIRS) +#>+ 1 +SUBDIRS =. +KDE_DOCS = AUTO +KDE_MANS = AUTO +#>- all: all-recursive +#>+ 1 +all: docs-am all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) +#>- @for dep in $?; do \ +#>- case '$(am__configure_deps)' in \ +#>- *$$dep*) \ +#>- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ +#>- && exit 0; \ +#>- exit 1;; \ +#>- esac; \ +#>- done; \ +#>- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdemultimedia/kaboodle/Makefile'; \ +#>- cd $(top_srcdir) && \ +#>- $(AUTOMAKE) --gnu docs/tdemultimedia/kaboodle/Makefile +#>+ 12 + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdemultimedia/kaboodle/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/tdemultimedia/kaboodle/Makefile + cd $(top_srcdir) && perl ../scripts/admin/am_edit -p../scripts/admin docs/tdemultimedia/kaboodle/Makefile.in +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +#>- distdir: $(DISTFILES) +#>+ 1 +distdir: distdir-nls $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +#>- uninstall: uninstall-recursive +#>+ 1 +uninstall: uninstall-docs uninstall-nls uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +#>- clean: clean-recursive +#>+ 1 +clean: kde-rpo-clean clean-recursive + +#>- clean-am: clean-generic mostlyclean-am +#>+ 1 +clean-am: clean-docs clean-bcheck clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +#>- install-data-am: +#>+ 1 +install-data-am: install-docs install-nls + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic ctags \ + ctags-recursive distclean distclean-generic distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ + tags-recursive uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: + +#>+ 2 +KDE_DIST=index.docbook index.cache.bz2 Makefile.in Makefile.am + +#>+ 24 +index.cache.bz2: $(srcdir)/index.docbook $(KDE_XSL_STYLESHEET) index.docbook + @if test -n "$(MEINPROC)"; then echo $(MEINPROC) --check --cache index.cache.bz2 $(srcdir)/index.docbook; $(MEINPROC) --check --cache index.cache.bz2 $(srcdir)/index.docbook; fi + +docs-am: index.cache.bz2 + +install-docs: docs-am install-nls + $(mkinstalldirs) $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kaboodle + @if test -f index.cache.bz2; then \ + echo $(INSTALL_DATA) index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kaboodle/; \ + $(INSTALL_DATA) index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kaboodle/; \ + elif test -f $(srcdir)/index.cache.bz2; then \ + echo $(INSTALL_DATA) $(srcdir)/index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kaboodle/; \ + $(INSTALL_DATA) $(srcdir)/index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kaboodle/; \ + fi + -rm -f $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kaboodle/common + $(LN_S) $(kde_libs_htmldir)/$(KDE_LANG)/common $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kaboodle/common + +uninstall-docs: + -rm -rf $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kaboodle + +clean-docs: + -rm -f index.cache.bz2 + + +#>+ 13 +install-nls: + $(mkinstalldirs) $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kaboodle + @for base in index.docbook ; do \ + echo $(INSTALL_DATA) $$base $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kaboodle/$$base ;\ + $(INSTALL_DATA) $(srcdir)/$$base $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kaboodle/$$base ;\ + done + +uninstall-nls: + for base in index.docbook ; do \ + rm -f $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kaboodle/$$base ;\ + done + + +#>+ 5 +distdir-nls: + for file in index.docbook ; do \ + cp $(srcdir)/$$file $(distdir); \ + done + +#>+ 15 +force-reedit: + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdemultimedia/kaboodle/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/tdemultimedia/kaboodle/Makefile + cd $(top_srcdir) && perl ../scripts/admin/am_edit -p../scripts/admin docs/tdemultimedia/kaboodle/Makefile.in + + +#>+ 21 +clean-bcheck: + rm -f *.bchecktest.cc *.bchecktest.cc.class a.out + +bcheck: bcheck-recursive + +bcheck-am: + @for i in ; do \ + if test $(srcdir)/$$i -nt $$i.bchecktest.cc; then \ + echo "int main() {return 0;}" > $$i.bchecktest.cc ; \ + echo "#include \"$$i\"" >> $$i.bchecktest.cc ; \ + echo "$$i"; \ + if ! $(CXX) $(DEFS) -I. -I$(srcdir) -I$(top_builddir) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(KDE_CXXFLAGS) --dump-class-hierarchy -c $$i.bchecktest.cc; then \ + rm -f $$i.bchecktest.cc; exit 1; \ + fi ; \ + echo "" >> $$i.bchecktest.cc.class; \ + perl $(top_srcdir)/admin/bcheck.pl $$i.bchecktest.cc.class || { rm -f $$i.bchecktest.cc; exit 1; }; \ + rm -f a.out; \ + fi ; \ + done + + +#>+ 3 +final: + $(MAKE) all-am + +#>+ 3 +final-install: + $(MAKE) install-am + +#>+ 3 +no-final: + $(MAKE) all-am + +#>+ 3 +no-final-install: + $(MAKE) install-am + +#>+ 3 +kde-rpo-clean: + -rm -f *.rpo + +#>+ 3 +nmcheck: +nmcheck-am: nmcheck diff --git a/tde-i18n-de/docs/tdemultimedia/kaboodle/index.cache.bz2 b/tde-i18n-de/docs/tdemultimedia/kaboodle/index.cache.bz2 Binary files differnew file mode 100644 index 00000000000..9172a492671 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/kaboodle/index.cache.bz2 diff --git a/tde-i18n-de/docs/tdemultimedia/kaboodle/index.docbook b/tde-i18n-de/docs/tdemultimedia/kaboodle/index.docbook new file mode 100644 index 00000000000..677a07c4b34 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/kaboodle/index.docbook @@ -0,0 +1,110 @@ +<?xml version="1.0" ?> +<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [ + <!ENTITY kappname "<application +>kaboodle</application +>"> + <!ENTITY package "tdemultimedia"> + <!ENTITY % addindex "IGNORE"> + <!ENTITY % German "INCLUDE"> +]> + +<book lang="&language;"> + +<bookinfo> +<title +>Das Handbuch zu &kappname;</title> + +<authorgroup> +<author +><firstname +></firstname +> <othername +></othername +> <surname +></surname +> <affiliation +> <address +><email +></email +></address> +</affiliation> +</author> +<othercredit role="translator" +><firstname +>Marco</firstname +><surname +>Wegner</surname +><affiliation +><address +><email +>[email protected]</email +></address +></affiliation +><contrib +>Deutsche Übersetzung</contrib +></othercredit +> +</authorgroup> + +<legalnotice +>&FDLNotice;</legalnotice> + +<!-- Date and version information of the documentation +Don't forget to include this last date and this last revision number, we +need them for translation coordination ! +Please respect the format of the date (YYYY-MM-DD) and of the version +(Major.minor.lesser), it could be used by automation scripts --> + +<date +>2000-09-02</date> +<releaseinfo +>0.00.00</releaseinfo> + +<!-- Abstract about this handbook --> + +<abstract> +<para +>&kaboodle; ist ein einfacher Medienabspieler für &kde;. </para> +</abstract> + + +<keywordset> +<keyword +>KDE</keyword> +<keyword +>Kapp</keyword> +</keywordset> + +</bookinfo> + +<chapter id="introduction" +> <title +>Einleitung</title +> <para +>Leider war das Handbuch für &kappname; noch nicht fertiggestellt, als &kde; auf diesem Rechner installiert wurde.</para +> <para +>Für Hilfe besuchen Sie doch die <ulink url="http://www.kde.org" +>KDE Website</ulink +>. Möglicherweise gibt es dort auch bereits eine aktualisierte Hilfe. Sie können auch eine Frage an <ulink url="mailto:[email protected]" +>die Mailing-Liste für &kde;-Benutzer</ulink +> stellen.</para +> <para +><emphasis +>Das &kde;-Team</emphasis +></para +> &underFDL; </chapter> + +&documentation.index; +</book> + +<!-- +Local Variables: +mode: sgml +sgml-minimize-attributes:nil +sgml-general-insert-case:lower +sgml-indent-step:0 +sgml-indent-data:nil +End: + +// vim:ts=2:sw=2:tw=78:noet +--> diff --git a/tde-i18n-de/docs/tdemultimedia/kioslave/Makefile.am b/tde-i18n-de/docs/tdemultimedia/kioslave/Makefile.am new file mode 100644 index 00000000000..df6332b8050 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/kioslave/Makefile.am @@ -0,0 +1,4 @@ +KDE_LANG = de +SUBDIRS = $(AUTODIRS) +KDE_DOCS = AUTO +KDE_MANS = AUTO diff --git a/tde-i18n-de/docs/tdemultimedia/kioslave/Makefile.in b/tde-i18n-de/docs/tdemultimedia/kioslave/Makefile.in new file mode 100644 index 00000000000..5e509e81889 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/kioslave/Makefile.in @@ -0,0 +1,613 @@ +# Makefile.in generated by automake 1.10.1 from Makefile.am. +# KDE tags expanded automatically by am_edit - $Revision: 483858 $ +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = docs/tdemultimedia/kioslave +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +#>- RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ +#>- html-recursive info-recursive install-data-recursive \ +#>- install-dvi-recursive install-exec-recursive \ +#>- install-html-recursive install-info-recursive \ +#>- install-pdf-recursive install-ps-recursive install-recursive \ +#>- installcheck-recursive installdirs-recursive pdf-recursive \ +#>- ps-recursive uninstall-recursive +#>+ 7 +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive nmcheck-recursive bcheck-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +#>- DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +#>+ 1 +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) $(KDE_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +ARTSCCONFIG = @ARTSCCONFIG@ +AUTOCONF = @AUTOCONF@ +AUTODIRS = @AUTODIRS@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CONF_FILES = @CONF_FILES@ +CYGPATH_W = @CYGPATH_W@ +DCOPIDL = @DCOPIDL@ +DCOPIDL2CPP = @DCOPIDL2CPP@ +DCOPIDLNG = @DCOPIDLNG@ +DCOP_DEPENDENCIES = @DCOP_DEPENDENCIES@ +DEFS = @DEFS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +GMSGFMT = @GMSGFMT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KCFG_DEPENDENCIES = @KCFG_DEPENDENCIES@ +KCONFIG_COMPILER = @KCONFIG_COMPILER@ +KDECONFIG = @KDECONFIG@ +KDE_EXTRA_RPATH = @KDE_EXTRA_RPATH@ +KDE_RPATH = @KDE_RPATH@ +KDE_XSL_STYLESHEET = @KDE_XSL_STYLESHEET@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MAKEKDEWIDGETS = @MAKEKDEWIDGETS@ +MCOPIDL = @MCOPIDL@ +MEINPROC = @MEINPROC@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TOPSUBDIRS = @TOPSUBDIRS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XMLLINT = @XMLLINT@ +X_RPATH = @X_RPATH@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +am__leading_dot = @am__leading_dot@ +am__tar = @am__tar@ +am__untar = @am__untar@ +#>- bindir = @bindir@ +#>+ 2 +DEPDIR = .deps +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +kde_appsdir = @kde_appsdir@ +kde_bindir = @kde_bindir@ +kde_confdir = @kde_confdir@ +kde_datadir = @kde_datadir@ +kde_htmldir = @kde_htmldir@ +kde_icondir = @kde_icondir@ +kde_kcfgdir = @kde_kcfgdir@ +kde_libs_htmldir = @kde_libs_htmldir@ +kde_libs_prefix = @kde_libs_prefix@ +kde_locale = @kde_locale@ +kde_mimedir = @kde_mimedir@ +kde_moduledir = @kde_moduledir@ +kde_servicesdir = @kde_servicesdir@ +kde_servicetypesdir = @kde_servicetypesdir@ +kde_sounddir = @kde_sounddir@ +kde_styledir = @kde_styledir@ +kde_templatesdir = @kde_templatesdir@ +kde_wallpaperdir = @kde_wallpaperdir@ +kde_widgetdir = @kde_widgetdir@ +tdeinitdir = @tdeinitdir@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +xdg_appsdir = @xdg_appsdir@ +xdg_directorydir = @xdg_directorydir@ +xdg_menudir = @xdg_menudir@ +KDE_LANG = de +#>- SUBDIRS = $(AUTODIRS) +#>+ 1 +SUBDIRS =. +KDE_DOCS = AUTO +KDE_MANS = AUTO +#>- all: all-recursive +#>+ 1 +all: docs-am all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) +#>- @for dep in $?; do \ +#>- case '$(am__configure_deps)' in \ +#>- *$$dep*) \ +#>- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ +#>- && exit 0; \ +#>- exit 1;; \ +#>- esac; \ +#>- done; \ +#>- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdemultimedia/kioslave/Makefile'; \ +#>- cd $(top_srcdir) && \ +#>- $(AUTOMAKE) --gnu docs/tdemultimedia/kioslave/Makefile +#>+ 12 + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdemultimedia/kioslave/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/tdemultimedia/kioslave/Makefile + cd $(top_srcdir) && perl ../scripts/admin/am_edit -p../scripts/admin docs/tdemultimedia/kioslave/Makefile.in +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +#>- distdir: $(DISTFILES) +#>+ 1 +distdir: distdir-nls $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +#>- uninstall: uninstall-recursive +#>+ 1 +uninstall: uninstall-nls uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +#>- clean: clean-recursive +#>+ 1 +clean: kde-rpo-clean clean-recursive + +#>- clean-am: clean-generic mostlyclean-am +#>+ 1 +clean-am: clean-bcheck clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +#>- install-data-am: +#>+ 1 +install-data-am: install-nls + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic ctags \ + ctags-recursive distclean distclean-generic distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ + tags-recursive uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: + +#>+ 2 +KDE_DIST=audiocd.docbook Makefile.in Makefile.am + +#>+ 2 +docs-am: audiocd.docbook + +#>+ 13 +install-nls: + $(mkinstalldirs) $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kioslave + @for base in audiocd.docbook ; do \ + echo $(INSTALL_DATA) $$base $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kioslave/$$base ;\ + $(INSTALL_DATA) $(srcdir)/$$base $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kioslave/$$base ;\ + done + +uninstall-nls: + for base in audiocd.docbook ; do \ + rm -f $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kioslave/$$base ;\ + done + + +#>+ 5 +distdir-nls: + for file in audiocd.docbook ; do \ + cp $(srcdir)/$$file $(distdir); \ + done + +#>+ 15 +force-reedit: + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdemultimedia/kioslave/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/tdemultimedia/kioslave/Makefile + cd $(top_srcdir) && perl ../scripts/admin/am_edit -p../scripts/admin docs/tdemultimedia/kioslave/Makefile.in + + +#>+ 21 +clean-bcheck: + rm -f *.bchecktest.cc *.bchecktest.cc.class a.out + +bcheck: bcheck-recursive + +bcheck-am: + @for i in ; do \ + if test $(srcdir)/$$i -nt $$i.bchecktest.cc; then \ + echo "int main() {return 0;}" > $$i.bchecktest.cc ; \ + echo "#include \"$$i\"" >> $$i.bchecktest.cc ; \ + echo "$$i"; \ + if ! $(CXX) $(DEFS) -I. -I$(srcdir) -I$(top_builddir) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(KDE_CXXFLAGS) --dump-class-hierarchy -c $$i.bchecktest.cc; then \ + rm -f $$i.bchecktest.cc; exit 1; \ + fi ; \ + echo "" >> $$i.bchecktest.cc.class; \ + perl $(top_srcdir)/admin/bcheck.pl $$i.bchecktest.cc.class || { rm -f $$i.bchecktest.cc; exit 1; }; \ + rm -f a.out; \ + fi ; \ + done + + +#>+ 3 +final: + $(MAKE) all-am + +#>+ 3 +final-install: + $(MAKE) install-am + +#>+ 3 +no-final: + $(MAKE) all-am + +#>+ 3 +no-final-install: + $(MAKE) install-am + +#>+ 3 +kde-rpo-clean: + -rm -f *.rpo + +#>+ 3 +nmcheck: +nmcheck-am: nmcheck diff --git a/tde-i18n-de/docs/tdemultimedia/kioslave/audiocd.docbook b/tde-i18n-de/docs/tdemultimedia/kioslave/audiocd.docbook new file mode 100644 index 00000000000..e70b2b47c10 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/kioslave/audiocd.docbook @@ -0,0 +1,329 @@ +<article lang="&language;" id="audiocd"> +<title +>audiocd</title> +<articleinfo> +<authorgroup> +<author +>&Rik.Hemsley; &Rik.Hemsley.mail;</author> +<author +><personname +><firstname +>Benjamin</firstname +><surname +>Meyer</surname +></personname +></author> +<othercredit role="translator" +><firstname +>Marco</firstname +><surname +>Wegner</surname +><affiliation +><address +><email +>[email protected]</email +></address +></affiliation +><contrib +>Übersetzer</contrib +></othercredit +> +</authorgroup> + +<date +>2004-09-16</date> +<releaseinfo +>2.30.00</releaseinfo> + +</articleinfo> + +<para +>Erlaubt das Verwenden von Audio-<acronym +>CD</acronym +>s wie ein <quote +>richtiges</quote +> Dateisystem, wobei die Stücke als Dateien dargestellt und beim Kopieren aus dem Verzeichnis digital von der <acronym +>CD</acronym +> ausgelesen werden. Dies garantiert eine perfekte Kopie der Audiodaten.</para> + +<para +>Um zu sehen, wie dieses Modul arbeitet, legen Sie eine Audio-<acronym +>CD</acronym +> in Ihr &CD-ROM;-Laufwerk ein und geben <userinput +>audiocd:/</userinput +> im &konqueror; ein. Innerhalb weniger Sekunden sollten Sie eine Liste von Stücken und einige Ordner sehen.</para> + +<para +>Auf Audio-<acronym +>CD</acronym +>s gibt es eigentlich keine Ordner, aber das audiocd-Modul stellt diese nützliche Erweiterung bereit. Wenn Sie in diese Ordner schauen, werden Sie feststellen, dass sie alle die gleiche Anzahl Titel enthalten. Falls Sie mit dem Internet verbunden sind, werden in einigen Verzeichnissen sogar die Stück-Titel als Dateinamen angezeigt.</para> + +<para +>Diese separaten Ordner existieren, damit Sie auswählen können, in welchem Format Sie die Stücke auf der <acronym +>CD</acronym +> anhören (oder kopieren) wollen.</para> + +<para +>Wenn Sie einen Titel aus dem Ordner <filename class="directory" +>Ogg Vorbis</filename +> ziehen und ihn über einem anderen offenen &konqueror;-Fenster ablegen, sollten Sie ein Fenster sehen, das Ihnen anzeigt, dass der Titel von der <acronym +>CD</acronym +> ausgelesen und in einer Datei gespeichert wird. Beachten Sie, dass Ogg Vorbis ein komprimiertes Format ist, so dass die gespeicherte Datei erheblich kleiner sein wird als eine von den Rohdaten kopierte.</para> + +<para +>Der Mechanismus dahinter ist recht einfach. Wenn das audiocd-Modul aufgefordert wird, einen Titel aus dem Ordner <filename class="directory" +>Ogg Vorbis</filename +> zu erzeugen, liest es die digitalen Audiodaten von der <acronym +>CD</acronym +>. Während das Modul die Daten zur Speicherung in eine Datei ablegt, werden diese in das Format Ogg Vorbis umgewandelt (<acronym +>CD</acronym +>-Audio ist kein spezielles Format, es sind einfach binäre Daten).</para> + +<para +>Sie könnten auch versuchen, eine auf <literal role="extension" +>.wav</literal +> endende Datei auf die &kde;-Medienwiedergabe (&noatun;) zu ziehen. In diesem Fall ist der Vorgang, der dahinter steckt, ganz ähnlich, nur dass an Stelle einer Umwandlung der Audiodaten in das Format Ogg Vorbis hier eine sehr einfache Umwandlung stattfindet: von binären Rohdaten (repräsentiert von den <literal role="extension" +>.cda</literal +>-Dateien im Wurzelordner) ins Format <quote +>RIFF WAV</quote +>, ein unkomprimiertes Format, das von den meisten Medien-Abspielern verstanden wird.</para> + +<para +>&noatun; sollte problemlos die <literal role="extension" +>.wav</literal +>-Datei abspielen, aber wenn es Schwierigkeiten gibt, können sie versuchen, die Option <option +>paranoia_level</option +> zu verwenden, die später noch erklärt wird.</para> + +<variablelist> +<title +>Optionen</title> + +<varlistentry> +<term +><option +>device</option +></term> +<listitem> +<para +>Setzt den Pfad zum Audio-<acronym +>CD</acronym +>-Gerät, &zb; <userinput +>audiocd:/<option +>?device</option +>=<parameter +>/dev/sdc</parameter +></userinput +>. Normalerweise wird das Modul versuchen, ein <acronym +>CD</acronym +>-Laufwerk mit einer eingelegten Audio-<acronym +>CD</acronym +> zu finden, aber wenn das nicht funktioniert oder Sie mehr als ein <acronym +>CD</acronym +>-Laufwerk besitzen, können Sie es mit dieser Option versuchen. Beachten Sie, dass der Einrichtungsdialog es Ihnen erlaubt, eine Voreinstellung für diese Option zu setzen.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>fileNameTemplate</option +></term> +<listitem> +<para +>Setzt das Schema für Dateinamen, zum Beispiel <userinput +>audiocd:/<option +>?fileNameTemplate</option +>=<parameter +>Track %{number}</parameter +></userinput +>. Der Standardwert für diese Option kann im Konfigurationsdialog gesetzt werden. Warnung: Wenn Sie eine leere Zeichenkette angeben, werden keine Dateien erscheinen.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>albumNameTemplate</option +></term> +<listitem> +<para +>Setzt das Schema für Alben, zum Beispiel <userinput +>audiocd:/<option +>?albumNameTemplate</option +>=<parameter +>%{albumartist} %{albumtitle}</parameter +></userinput +>.Der Standardwert für diese Option kann im Konfigurationsdialog gesetzt werden.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>Nice-Ebene</option +></term> +<listitem> +<para +>Setzt die Nice-Ebene für die Kodierer, zum Beispiel <userinput +>audiocd:/<option +>?albumNameTemplate</option +>=<parameter +>niceLevel=10</parameter +></userinput +>. Im Konfigurationsdialog kann für diesen Parameter ein Standardwert eingegeben werden.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>paranoia_level</option +></term> +<listitem> +<para +>Setzt den Wert für Fehlererkennung und -korrektur beim Auslesen von Audiodaten.</para> + +<variablelist> +<varlistentry> +<term +>Stufe 0</term> +<listitem> +<para +>Keine Erkennung oder Korrektur. Das ist nur sinnvoll, falls Sie ein perfektes <acronym +>CD</acronym +>-Laufwerk haben (also eher unwahrscheinlich).</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>Stufe 1</term> +<listitem> +<para +>Ermöglicht grundlegende Fehlerkontrolle und -korrektur.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>Stufe 2</term> +<listitem> +<para +>Voreinstellung. Legt fest, dass nur ein fehlerfreies Auslesen akzeptiert wird.</para> +</listitem> +</varlistentry> +</variablelist> + +<para +>Beachten Sie, dass es einen Nachteil der Stufe 2 gibt: Das Auslesen kann sehr langsam sein, so dass das digitale Abspielen in Echtzeit möglicherweise nicht korrekt arbeitet. Falls Sie ein qualitativ hochwertiges <acronym +>CD</acronym +>-Laufwerk besitzen (dabei gilt, dass teurer nicht notwendigerweise auch bessere Qualität bedeutet), werden Sie ein langsames Auslesen wahrscheinlich nicht erleben, aber ein schlechtes Laufwerk kann Tage brauchen (!), um die Audiodaten einer einzigen <acronym +>CD</acronym +> auszulesen.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><option +>CDDB-Auswahl</option +></term> +<listitem> + +<para +>Legt fest, dass die Namen der Titel der eingelegten <acronym +>CD</acronym +> in einer Internet-<acronym +>CD</acronym +>-Datenbank nachgeschlagen werden. Auf Audio-<acronym +>CD</acronym +>s sind die Titel der Stücke nicht gespeichert, aber die Internet-<acronym +>CD</acronym +>-Datenbank ist ein raffiniertes System, das ein spezielles einzigartiges Identifizierungsmerkmal verwendet, das aus der Anzahl und Länge der Titel auf jeder <acronym +>CD</acronym +> erstellt wird, um auf eine dazugehörende Titel-Liste zu verweisen. Diese Titel-Listen werden von der Internetgemeinschaft bereitgestellt und für alle verfügbar gemacht. Ab und an können mehrere Einträge gefunden werden, aus denen dann ausgewählt werden muss.</para> + +<para +>Sie können Ihre eigenen Titel-Listen mittels &kscd; hinzufügen, dem <acronym +>CD</acronym +>-Spieler der &kde;.</para> + +<para +>Standardmäßig wählt audiocd den am besten passenden.</para> +</listitem> +</varlistentry> +</variablelist> + +<variablelist> +<title +>Beispiele</title> +<varlistentry> +<term +><userinput +>audiocd:/?device=/dev/scd0&paranoia_level=0&cddbChoice=0</userinput +></term> +<listitem> +<para +>Gibt eine Liste der Stücke auf der Audio-<acronym +>CD</acronym +> aus, die in <filename class="devicefile" +>/dev/scd0</filename +> eingelegt wurde. (Das steht unter &Linux; für das erste <acronym +>SCSI</acronym +>-&CD-ROM;-Gerät.) Falls Sie Titel von der <acronym +>CD</acronym +> kopieren, wird das digitale Auslesen ohne Fehlerkorrektur oder -erkennung ausgeführt. Die Internet-<acronym +>CD</acronym +>-Datenbank Eintrag 0 wird verwendet.</para> +</listitem> +</varlistentry> +</variablelist> + +<qandaset> +<title +>Eine oft gestellte Frage</title> +<qandaentry> +<question> +<para +>Ich bekomme die Fehlermeldung <errorname +>Die Datei oder der Ordner / existiert nicht</errorname +>. Was muss ich tun? Ich habe eine Audio-<acronym +>CD</acronym +> in meinem Laufwerk.</para> +</question> + +<answer> +<para +>Versuchen Sie es mit dem Befehl <userinput +><command +>cdparanoia</command +> <option +>-vsQ</option +></userinput +> (nicht als <systemitem class="username" +>root</systemitem +>). Sehen Sie eine Titel-Liste? Falls nicht, stellen Sie sicher, dass Sie die Berechtigung haben, auf das <acronym +>CD</acronym +>-Laufwerk zuzugreifen. Sollten Sie die <acronym +>SCSI</acronym +>-Emulation verwenden (z.B. wenn Sie einen <acronym +>IDE</acronym +>-<acronym +>CD</acronym +>-Brenner haben), prüfen Sie die Zugriffsrechte der <acronym +>SCSI</acronym +>-Geräte, also <filename class="devicefile" +>/dev/sg0</filename +>, <filename class="devicefile" +>/dev/sg1</filename +>, &etc;. Falls es immer noch nicht funktioniert, versuchen Sie es mit der Eingabe von <userinput +>audiocd:/?device=/dev/sg0</userinput +> (oder ähnlich), um dem audiocd-Modul mitzuteilen, welches Gerät Ihr &CD-ROM; ist.</para +> +</answer> +</qandaentry> +</qandaset> + + +</article> diff --git a/tde-i18n-de/docs/tdemultimedia/kmid/Makefile.am b/tde-i18n-de/docs/tdemultimedia/kmid/Makefile.am new file mode 100644 index 00000000000..df6332b8050 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/kmid/Makefile.am @@ -0,0 +1,4 @@ +KDE_LANG = de +SUBDIRS = $(AUTODIRS) +KDE_DOCS = AUTO +KDE_MANS = AUTO diff --git a/tde-i18n-de/docs/tdemultimedia/kmid/Makefile.in b/tde-i18n-de/docs/tdemultimedia/kmid/Makefile.in new file mode 100644 index 00000000000..1b7fbf3f1d8 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/kmid/Makefile.in @@ -0,0 +1,635 @@ +# Makefile.in generated by automake 1.10.1 from Makefile.am. +# KDE tags expanded automatically by am_edit - $Revision: 483858 $ +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = docs/tdemultimedia/kmid +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +#>- RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ +#>- html-recursive info-recursive install-data-recursive \ +#>- install-dvi-recursive install-exec-recursive \ +#>- install-html-recursive install-info-recursive \ +#>- install-pdf-recursive install-ps-recursive install-recursive \ +#>- installcheck-recursive installdirs-recursive pdf-recursive \ +#>- ps-recursive uninstall-recursive +#>+ 7 +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive nmcheck-recursive bcheck-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +#>- DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +#>+ 1 +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) $(KDE_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +ARTSCCONFIG = @ARTSCCONFIG@ +AUTOCONF = @AUTOCONF@ +AUTODIRS = @AUTODIRS@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CONF_FILES = @CONF_FILES@ +CYGPATH_W = @CYGPATH_W@ +DCOPIDL = @DCOPIDL@ +DCOPIDL2CPP = @DCOPIDL2CPP@ +DCOPIDLNG = @DCOPIDLNG@ +DCOP_DEPENDENCIES = @DCOP_DEPENDENCIES@ +DEFS = @DEFS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +GMSGFMT = @GMSGFMT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KCFG_DEPENDENCIES = @KCFG_DEPENDENCIES@ +KCONFIG_COMPILER = @KCONFIG_COMPILER@ +KDECONFIG = @KDECONFIG@ +KDE_EXTRA_RPATH = @KDE_EXTRA_RPATH@ +KDE_RPATH = @KDE_RPATH@ +KDE_XSL_STYLESHEET = @KDE_XSL_STYLESHEET@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MAKEKDEWIDGETS = @MAKEKDEWIDGETS@ +MCOPIDL = @MCOPIDL@ +MEINPROC = @MEINPROC@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TOPSUBDIRS = @TOPSUBDIRS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XMLLINT = @XMLLINT@ +X_RPATH = @X_RPATH@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +am__leading_dot = @am__leading_dot@ +am__tar = @am__tar@ +am__untar = @am__untar@ +#>- bindir = @bindir@ +#>+ 2 +DEPDIR = .deps +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +kde_appsdir = @kde_appsdir@ +kde_bindir = @kde_bindir@ +kde_confdir = @kde_confdir@ +kde_datadir = @kde_datadir@ +kde_htmldir = @kde_htmldir@ +kde_icondir = @kde_icondir@ +kde_kcfgdir = @kde_kcfgdir@ +kde_libs_htmldir = @kde_libs_htmldir@ +kde_libs_prefix = @kde_libs_prefix@ +kde_locale = @kde_locale@ +kde_mimedir = @kde_mimedir@ +kde_moduledir = @kde_moduledir@ +kde_servicesdir = @kde_servicesdir@ +kde_servicetypesdir = @kde_servicetypesdir@ +kde_sounddir = @kde_sounddir@ +kde_styledir = @kde_styledir@ +kde_templatesdir = @kde_templatesdir@ +kde_wallpaperdir = @kde_wallpaperdir@ +kde_widgetdir = @kde_widgetdir@ +tdeinitdir = @tdeinitdir@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +xdg_appsdir = @xdg_appsdir@ +xdg_directorydir = @xdg_directorydir@ +xdg_menudir = @xdg_menudir@ +KDE_LANG = de +#>- SUBDIRS = $(AUTODIRS) +#>+ 1 +SUBDIRS =. +KDE_DOCS = AUTO +KDE_MANS = AUTO +#>- all: all-recursive +#>+ 1 +all: docs-am all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) +#>- @for dep in $?; do \ +#>- case '$(am__configure_deps)' in \ +#>- *$$dep*) \ +#>- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ +#>- && exit 0; \ +#>- exit 1;; \ +#>- esac; \ +#>- done; \ +#>- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdemultimedia/kmid/Makefile'; \ +#>- cd $(top_srcdir) && \ +#>- $(AUTOMAKE) --gnu docs/tdemultimedia/kmid/Makefile +#>+ 12 + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdemultimedia/kmid/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/tdemultimedia/kmid/Makefile + cd $(top_srcdir) && perl ../scripts/admin/am_edit -p../scripts/admin docs/tdemultimedia/kmid/Makefile.in +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +#>- distdir: $(DISTFILES) +#>+ 1 +distdir: distdir-nls $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +#>- uninstall: uninstall-recursive +#>+ 1 +uninstall: uninstall-docs uninstall-nls uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +#>- clean: clean-recursive +#>+ 1 +clean: kde-rpo-clean clean-recursive + +#>- clean-am: clean-generic mostlyclean-am +#>+ 1 +clean-am: clean-docs clean-bcheck clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +#>- install-data-am: +#>+ 1 +install-data-am: install-docs install-nls + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic ctags \ + ctags-recursive distclean distclean-generic distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ + tags-recursive uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: + +#>+ 2 +KDE_DIST=index.docbook index.cache.bz2 Makefile.in Makefile.am + +#>+ 24 +index.cache.bz2: $(srcdir)/index.docbook $(KDE_XSL_STYLESHEET) index.docbook + @if test -n "$(MEINPROC)"; then echo $(MEINPROC) --check --cache index.cache.bz2 $(srcdir)/index.docbook; $(MEINPROC) --check --cache index.cache.bz2 $(srcdir)/index.docbook; fi + +docs-am: index.cache.bz2 + +install-docs: docs-am install-nls + $(mkinstalldirs) $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kmid + @if test -f index.cache.bz2; then \ + echo $(INSTALL_DATA) index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kmid/; \ + $(INSTALL_DATA) index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kmid/; \ + elif test -f $(srcdir)/index.cache.bz2; then \ + echo $(INSTALL_DATA) $(srcdir)/index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kmid/; \ + $(INSTALL_DATA) $(srcdir)/index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kmid/; \ + fi + -rm -f $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kmid/common + $(LN_S) $(kde_libs_htmldir)/$(KDE_LANG)/common $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kmid/common + +uninstall-docs: + -rm -rf $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kmid + +clean-docs: + -rm -f index.cache.bz2 + + +#>+ 13 +install-nls: + $(mkinstalldirs) $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kmid + @for base in index.docbook ; do \ + echo $(INSTALL_DATA) $$base $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kmid/$$base ;\ + $(INSTALL_DATA) $(srcdir)/$$base $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kmid/$$base ;\ + done + +uninstall-nls: + for base in index.docbook ; do \ + rm -f $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kmid/$$base ;\ + done + + +#>+ 5 +distdir-nls: + for file in index.docbook ; do \ + cp $(srcdir)/$$file $(distdir); \ + done + +#>+ 15 +force-reedit: + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdemultimedia/kmid/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/tdemultimedia/kmid/Makefile + cd $(top_srcdir) && perl ../scripts/admin/am_edit -p../scripts/admin docs/tdemultimedia/kmid/Makefile.in + + +#>+ 21 +clean-bcheck: + rm -f *.bchecktest.cc *.bchecktest.cc.class a.out + +bcheck: bcheck-recursive + +bcheck-am: + @for i in ; do \ + if test $(srcdir)/$$i -nt $$i.bchecktest.cc; then \ + echo "int main() {return 0;}" > $$i.bchecktest.cc ; \ + echo "#include \"$$i\"" >> $$i.bchecktest.cc ; \ + echo "$$i"; \ + if ! $(CXX) $(DEFS) -I. -I$(srcdir) -I$(top_builddir) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(KDE_CXXFLAGS) --dump-class-hierarchy -c $$i.bchecktest.cc; then \ + rm -f $$i.bchecktest.cc; exit 1; \ + fi ; \ + echo "" >> $$i.bchecktest.cc.class; \ + perl $(top_srcdir)/admin/bcheck.pl $$i.bchecktest.cc.class || { rm -f $$i.bchecktest.cc; exit 1; }; \ + rm -f a.out; \ + fi ; \ + done + + +#>+ 3 +final: + $(MAKE) all-am + +#>+ 3 +final-install: + $(MAKE) install-am + +#>+ 3 +no-final: + $(MAKE) all-am + +#>+ 3 +no-final-install: + $(MAKE) install-am + +#>+ 3 +kde-rpo-clean: + -rm -f *.rpo + +#>+ 3 +nmcheck: +nmcheck-am: nmcheck diff --git a/tde-i18n-de/docs/tdemultimedia/kmid/index.cache.bz2 b/tde-i18n-de/docs/tdemultimedia/kmid/index.cache.bz2 Binary files differnew file mode 100644 index 00000000000..753c73e0c08 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/kmid/index.cache.bz2 diff --git a/tde-i18n-de/docs/tdemultimedia/kmid/index.docbook b/tde-i18n-de/docs/tdemultimedia/kmid/index.docbook new file mode 100644 index 00000000000..a118e72d91b --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/kmid/index.docbook @@ -0,0 +1,1420 @@ +<?xml version="1.0" ?> +<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [ + <!ENTITY kappname "&kmid;"> + <!ENTITY package "tdemultimedia"> + <!ENTITY % German "INCLUDE" +> <!-- change language only here --> + <!ENTITY % addindex "IGNORE"> +]> + +<book lang="&language;"> + +<bookinfo> +<title +>Das Handbuch zu &kmid;</title> +<authorgroup> +<author +><firstname +>Antonio</firstname +> <surname +>Larrosa Jiménez</surname +> <affiliation +> <address +><email +>[email protected]</email +></address> +</affiliation> +</author> +<othercredit role="translator" +><firstname +>Gregor</firstname +><surname +>Zumstein</surname +><affiliation +><address +><email +>[email protected]</email +></address +></affiliation +><contrib +>Übersetzung</contrib +></othercredit +><othercredit role="translator" +><firstname +>Frank</firstname +><surname +>Schütte</surname +><affiliation +><address +><email +>[email protected]</email +></address +></affiliation +><contrib +>Übersetzung</contrib +></othercredit +> +</authorgroup> + +<copyright> +<year +>1999</year +><year +>2001</year> +<holder +>Antonio Larrosa Jiménez</holder> +</copyright> + +<date +>2002-02-05</date> +<releaseinfo +>2.00.00</releaseinfo> + +<abstract> +<para +>&kmid; ist ein MIDI-/Karaoke-Multimediaspieler </para> +</abstract> + +<keywordset> +<keyword +>KMid</keyword> +<keyword +>MIDI</keyword> +<keyword +>Karaoke</keyword> +<keyword +>Multimedia</keyword> +<keyword +>mid</keyword> +<keyword +>kar</keyword> +<keyword +>Spieler</keyword> +<keyword +>Musik</keyword> +<keyword +>Klang</keyword> +<keyword +>fm</keyword> +<keyword +>awe</keyword> +<keyword +>gus</keyword> +</keywordset> +</bookinfo> + +<chapter id="introduction"> +<title +>Einleitung</title> + +<para +>&kmid; ist der MIDI- und Karaokespieler von &kde;. Neben anderen hat er mit Echtzeitgraphik und Karaoke-Echtzeithervorhebung von Texten auch einige Eigenschaften, die andere &UNIX;-MIDI-Spieler nicht haben. </para> + +<para +>&kmid; läuft unter &Linux; und FreeBSD. Es baut auf dem <acronym +>OSS</acronym +>-System auf, sollte also auf allen Systemen mit <acronym +>OSS</acronym +>- und &kde;-Unterstützung funktionieren. &kmid; unterstützt ebenfalls den &Linux; Ultrasound-Projekttreiber, der für <acronym +>GUS</acronym +>-Karten benötigt wird. <acronym +>ALSA</acronym +> wird einbezogen, sobald es einen Sequenzer unterstützt. </para> + +<para +>&kmid; zeigt den Liedtext auf dem Bildschirm mit wechselnder Farbe an, so dass es einfach ist, dem Stück zu folgen. </para> + +<para +>Ich hoffe, dass Sie bei der Benutzung von &kmid; genau so viel Spaß haben, wie ich beim Entwickeln. </para> + +<para +>Antonio Larrosa Jiménez <email +>[email protected]</email +> </para> + +<sect1 id="kmids-features"> +<title +>Fähigkeiten von &kmid;</title> + +<para +>Einige der wichtigsten Fähigkeiten von &kmid;: </para> + +<itemizedlist> +<listitem> +<para +>Eine sehr <emphasis +>benutzerfreundliche Oberfläche</emphasis +> für die Darstellung von Karaoke-Text mit <emphasis +>Echtzeithervorhebung</emphasis +> des Stücktextes. </para> +</listitem> +<listitem> +<para +>Graphische Darstellung der Aktivität jedes MIDI-Kanals durch Hervorhebung der gedrückten Tasten auf der (virtuellen) Tastatur. </para> +</listitem> +<listitem> +<para +>Der mächtigste <emphasis +>MIDI-Mapper</emphasis +>, den Sie je auf einem Betriebssystem sehen werden. </para> +</listitem> +<listitem> +<para +><emphasis +>Drag & Drop</emphasis +> so dass Sie in &kde; jede MIDI-Datei von einem &konqueror;-Fenster auf KMid ziehen können. </para> +</listitem> +<listitem> +<para +>Sie können <emphasis +>das Tempo </emphasis +> von Liedern <emphasis +>ändern</emphasis +>, um diese schneller oder langsamer abzuspielen. </para> +</listitem> +<listitem> +<para +>Blinkende Lichter helfen Ihnen beim Verfolgen des Rhythmus. </para> +</listitem> +<listitem> +<para +><emphasis +>Einstellbare Schriftarten</emphasis +> für die Darstellung des Karaoke-Textes </para> +</listitem> +<listitem> +<para +>Unterstützt die beiden vorhandenen Standards, um Text in MIDI-Dateien zu speichern (Liedereignisse oder Textereignisse). KMid ermittelt automatisch das jeweils verwendete Verfahren. </para> +</listitem> +<listitem> +<para +>Sitzungsunterstützung. Wenn Sie &kde; während des Abspielens eines Liedes beenden, startet KMid beim nächsten Mal wieder mit dem gleichen Lied. </para> +</listitem> +<listitem> +<para +>In Echtzeit <emphasis +>einstellbare Lautstärke</emphasis +>. </para> +</listitem> +<listitem> +<para +>Spielt selbst defekte Dateien, die andere MIDI-Spieler zum Absturz bringen! </para> +</listitem> +<listitem> +<para +>Kann mit <emphasis +>gzip komprimierte MIDI/Karaoke-Dateien öffnen</emphasis +> wie unkomprimierte Dateien. </para> +</listitem> +<listitem> +<para +>Braucht nur etwa <emphasis +>0.1%</emphasis +> meiner <emphasis +>CPU-Zeit</emphasis +> (hängt von der Komplexität des Stückes ab). </para> +</listitem> +<listitem> +<para +>Unterstützt externe MIDI-Synthesizer, <acronym +>AWE</acronym +>, <acronym +>FM</acronym +> und <acronym +>GUS</acronym +>-Karten (für letztere brauchen Sie den <acronym +>LUP</acronym +>-Treiber und gusd). </para> +</listitem> +<listitem> +<para +>Läuft unter &Linux; und FreeBSD (und vielleicht auch anderen UNIX-Ablegern). </para> +</listitem> +</itemizedlist> + +</sect1> +</chapter> + +<chapter id="general-usage"> +<title +>Benutzung</title> + +<sect1 id="opening-songs"> +<title +>Öffnen von Liedern</title> + +<para +>Sie können ein Stück auf verschiedene Arten öffnen. </para> + +<para +>Erstens können Sie <guimenuitem +>Öffnen ...</guimenuitem +> aus dem Menü <guimenu +>Datei</guimenu +> auswählen. Es erscheint der übliche Datei-Dialog, mit dessen Hilfe Sie das gewünschte Lied auswählen können. </para> + +<para +>Sie können auch eine Datei von einem &konqueror;-Fenster in das &kmid;-Fenster fallen lassen. Dies funktioniert auch mit mehreren Liedern gleichzeitig. </para> + +<para +>Wenn Sie beim Starten von &kmid; ein Stück übergeben, wird dieses geöffnet. </para> + +<para +>Und letztlich können Sie auch ein Lied aus der Liste der aktuellen Sammlung auswählen. </para> + +</sect1> + +<sect1 id="playing-songs"> +<title +>Lieder abspielen</title> + +<para +>Um ein Musikstück abzuspielen, öffnen Sie es und betätigen Sie den Knopf <guiicon +>Abspielen</guiicon +> in der Werkzeugleiste, wählen Sie den Eintrag <guimenuitem +>Abspielen</guimenuitem +> aus dem Menü <guimenu +>Stück</guimenu +> aus oder betätigen Sie die <keycap +>Leertaste</keycap +>. </para> + +<para +>Bitte beachten Sie, dass &kmid; ein Stück automatisch startet, sobald Sie es auf das &kmid;-Fenster ziehen. (Bei mehreren Stücken werden sie zu einer Sammlung hinzugefügt und dann nacheinander abgespielt.) </para> + +<para +>Sobald &kmid; ein Stück abspielt, können Sie an eine beliebige Stelle springen, indem Sie die mittlere Maustaste benutzen und mit dem Regler hin und her fahren. </para> + +<para +>Wenn Sie finden, dass ein Lied zu schnell oder zu langsam abgespielt wird, können Sie auf die Pfeile links und rechts der Tempoanzeige klicken und so die Abspielgeschwindigkeit ändern. Um wieder das ursprüngliche Tempo zu erhalten, doppelklicken Sie auf die Tempo-<acronym +>LCD</acronym +>. </para> + +<para +>Die <keycap +>Leertaste</keycap +> hat zwei Aufgaben: Wenn ein Stück abgespielt wird, wirkt ein Druck auf die <keycap +>Leertaste</keycap +> wie ein Druck auf den Knopf <guiicon +>Pause</guiicon +> oder das Auswählen des Menüeintrags <guimenuitem +>Pause</guimenuitem +> im Menü <guimenu +>Stück</guimenu +>, unterbricht also die Wiedergabe. Betätigen Sie die <keycap +>Leertaste</keycap +> während kein Stück abgespielt wird, startet &kmid; die Wiedergabe. </para> + +</sect1> + +<sect1 id="displaying-lyrics"> +<title +>Liedtext anzeigen</title> + +<para +>Liedtexte können auf zwei Arten in einem Musikstück gespeichert werden. Einige Stücke verwenden <guimenuitem +>Textereignis</guimenuitem +>, andere verwenden <guimenuitem +>Liedtextereignis</guimenuitem +> und wieder andere beides. Einige Stücke haben gar keinen Text :-) </para> + +<para +>In &kmid; können Sie einstellen, welche Ereignisse dargestellt werden sollen und sogar noch besser: Der Ereignistyp wird automatisch ermittelt, den ein Lied benutzt, sodass Sie nichts manuell einstellen müssen. Wenn Sie also im Menü <guimenu +>Einstellungen</guimenu +> den Eintrag <guimenuitem +>automatische Textauswahl</guimenuitem +> aktivieren, wird automatisch der Karaoke-Text ausgewählt. Sie haben aber immer noch die Möglichkeit, dies zu ändern, wenn Sie die andere Art sehen wollen. </para> + +<para +>Falls Sie einen Ereignistyp fest einstellen wollen, wählen Sie aus dem Menü <guimenu +>Einstellungen</guimenu +> die Einträge <guimenuitem +>Textereignisse</guimenuitem +> bzw. <guimenuitem +>Liedereignisse</guimenuitem +>. Die gleiche Funktion haben auch die Tasten <keycap +>1</keycap +> und <keycap +>2</keycap +>. </para> + +</sect1> + +</chapter> + +<chapter id="collections"> +<title +>Sammlungen</title> + +<para +>Eine Sammlung ist eine Liste von MIDI-Dateien, welche Sie zusammenfassen. Diese werden der Reihe nach abgespielt. In diesem Abschnitt steht, wie Sie Sammlungen effizient nutzen können. </para> + +<sect1 id="creating-a-collection"> +<title +>Anlegen einer Sammlung</title> + +<para +>Um eine Sammlung anzulegen, öffnen Sie zuerst den <guilabel +>Sammlungsmanager</guilabel +>. Diesen finden Sie im Menü <guimenu +>Sammlung</guimenu +> unter dem Punkt <guimenuitem +>Organisieren ...</guimenuitem +>. Klicken Sie dort auf <guibutton +>Neu</guibutton +> und geben den Namen für die Sammlung an. </para> + +<para +>Sie können auch eine bestehende Sammlung kopieren, indem Sie auf <guibutton +>Kopieren</guibutton +> klicken und anschließend den Namen für die neue Sammlung angeben. Diese Sammlung wird am Anfang die gleichen Lieder enthalten wie die ursprüngliche. </para> + +<para +>Wenn Sie mehr als eine Sammlung haben, können Sie die jeweils Gewünschte im <guilabel +>Sammlungsmanager</guilabel +> einstellen. </para> + +</sect1> +<sect1 id="the-temporary-collection"> +<title +>Die temporäre Sammlung (Temporary Collection)</title> + +<para +>In die temporäre Sammlung gelangen alle Lieder, die Sie zu keiner anderen Sammlung hinzufügen wollen. </para> + +<para +>Beim Verlassen der Anwendung wird diese Sammlung <emphasis +>nicht gespeichert</emphasis +>. Bedenken Sie das, wenn Sie viele Stücke hinzufügen. </para> + +<para +>Lesen Sie auch noch den Rest dieses Abschnitts zum besseren Verständnis der temporären Sammlung. </para> + +</sect1> + +<sect1 id="adding-songs-to-a-collection"> +<title +>Hinzufügen von Liedern zu einer Sammlung</title> +<subtitle +>Wie Sie <guimenuitem +>Automatisches Hinzufügen zur Sammlung</guimenuitem +> benutzen</subtitle> + +<para +>Es gibt verschiedene Methoden, ein Lied zu einer Sammlung hinzuzufügen. </para> + +<para +>Um Lieder zu einer Sammlung hinzuzufügen, muss sie im <guilabel +>Sammlungsmanager</guilabel +> ausgewählt sein. Dort können Sie mit dem Knopf <guibutton +>Hinzufügen</guibutton +> ein Lied hinzufügen. Es erscheint wiederum der Datei-Dialog, mit dessen Hilfe Sie das gewünschte Lied auswählen können. </para> + +<para +>Eine zweite Methode, um ein Lied hinzuzufügen, hängt von der Einstellung <guimenuitem +>Automatisches Hinzufügen zur Sammlung</guimenuitem +> ab. </para> + +<para +>Wenn <guimenuitem +>Automatisches Hinzufügen zur Sammlung</guimenuitem +> aktiviert ist, wird ein Stück beim Öffnen (unter Verwendung von <menuchoice +><guimenu +>Datei</guimenu +><guimenuitem +>Öffnen</guimenuitem +></menuchoice +> oder Drag & Drop) automatisch zur aktiven Sammlung hinzugefügt. </para> + +<para +>Wenn <guimenuitem +>Automatisch hinzufügen zur Sammlung</guimenuitem +> nicht aktiviert ist, wird beim Öffnen eines Stückes die temporäre Sammlung aktiviert und geleert. Dieser Sammlung werden dann die weiterhin geöffneten Stücke hinzugefügt. </para> + +</sect1> + +<sect1 id="removing-songs-from-collections"> +<title +>Entfernen von Liedern aus einer Sammlung</title> + +<para +>Um ein Lied aus einer Sammlung zu entfernen, müssen Sie den <guilabel +>Sammlungsmanager</guilabel +> öffnen, die Sammlung und das gewünschte Lied auswählen und dann auf <guibutton +>Entfernen</guibutton +> klicken. </para> + +</sect1> + +<sect1 id="playing-order"> +<title +>Abspielreihenfolge</title> + +<para +>Sie können die Reihenfolge auswählen, in der die Lieder abgespielt werden. Wenn Sie <guimenuitem +>Der Reihe nach</guimenuitem +> aus dem Untermenü <guisubmenu +>Abspielreihenfolge</guisubmenu +> des Menüs <guimenu +>Sammlung</guimenu +> auswählen, werden die Lieder in der Reihenfolge abgespielt, wie sie zur Sammlung hinzugefügt wurden. </para> + +<para +>Wenn Sie aber <guimenuitem +>zufällige Reihenfolge</guimenuitem +> wählen, erzeugt &kmid; eine Zufallsvariable und die Lieder werden auch in wirklich zufälliger Reihenfolge abgespielt. Kein Lied wird zweimal abgespielt, und wenn Sie auf den Knopf für <guibutton +>Vorheriges Lied</guibutton +> klicken, kommt wirklich das zuletzt abgespielte. </para> + +<para +>Wenn Sie Lieder hinzufügen oder entfernen oder <guibutton +>zufällige Reihenfolge</guibutton +> im Menü anwählen, wird die Reihenfolge neu festgelegt. </para> + +</sect1> + +<sect1 id="selecting-from-a-collection"> +<title +>Ein Lied aus einer Sammlung auswählen</title> + +<para +>Um ein Lied abzuspielen, wählen Sie es im <guilabel +>Sammlungsmanager</guilabel +> aus, oder benutzen die Auswahlliste über dem Karaoke-Text. </para> + +<para +>Um ein Lied weiter zu springen, wählen Sie den Knopf <guibutton +>Nächstes Lied</guibutton +>, den Eintrag <guimenuitem +>nächstes Lied</guimenuitem +> aus dem Menü <guimenu +>Stück</guimenu +> oder drücken die Taste <keycap +>Pfeil rechts</keycap +>. </para> + +<para +>Um umgekehrt ein Lied zurück zu springen, wählen Sie den Knopf <guiicon +>Vorheriges Stück</guiicon +>, den Eintrag <guimenuitem +>Vorheriges Stück</guimenuitem +> aus dem Menü <guimenu +>Stück</guimenu +> oder drücken die Taste <keycap +>Pfeil links</keycap +>. </para> + +</sect1> + +<sect1 id="deleting-a-collection"> +<title +>Löschen einer Sammlung</title> + +<para +>Um eine Sammlung zu löschen, öffnen Sie den <guilabel +>Sammlungsmanager</guilabel +>, wählen dort die zu löschende Sammlung und klicken auf den Knopf <guibutton +>Löschen</guibutton +>. </para> + +<para +>Die temporäre Sammlung kann nicht gelöscht werden. Das spielt allerdings keine Rolle, da sie beim Verlassen von &kmid; nicht gespeichert wird. </para> + +</sect1> + +</chapter> + +<chapter id="midi-maps"> +<title +>MIDI-Maps</title> + +<sect1 id="what-is-a-midimap"> +<title +>Was ist eine MIDI-Map?</title> + +<para +>Eine MIDI-Map wandelt MIDI-Ereignisse in andere MIDI-Ereignisse um. </para> + +<para +>Dies ist unbedingt nötig für Synthesizer, die nicht General-MIDI-fähig sind. In diesem Fall übersetzt die MIDI-Map General-MIDI-Ereignisse in Ereignisse, die der Synthesizer versteht. </para> + +<para +>Zum Beispiel können Sie eine MIDI-Map erstellen, die alle Ereignisse des Typs <literal +>Change patch to Bright Piano</literal +> in Ereignisse des Typs <literal +>Change patch to Trumpet</literal +> umwandelt und somit immer eine Trompete erklingen lässt , wenn ursprünglich ein Klavier spielen sollte. </para> + +<para +>Dies mag merkwürdig klingen (wieso eine Trompete anstelle eines Klaviers nehmen?), aber es ist äußerst nützlich. Der <acronym +>GM</acronym +>-Standard definiert zum Beispiel, dass ein MIDI-Keyboard Patch <literal +>0</literal +> als <literal +>akustischer Flügel</literal +> interpretiert wird, aber ein älterer Synthesizer interpretiert Patch <literal +>0</literal +> z.B. als <literal +>Elektrische Gitarre</literal +> und hat den <literal +>akustischen Flügel</literal +> z.B. auf Patch <literal +>3</literal +>. Hierin liegt nun die Aufgabe der MIDI-Map. Sie muss alle Ereignisse des Typs <literal +>Change patch to 0</literal +> in Ereignisse des Typs <literal +>change patch to 3</literal +> umwandeln und so auch wirklich das richtige Instrument spielen lassen. </para> + +</sect1> + +<sect1 id="do-i-need-a-midi-map"> +<title +>Brauche ich eine MIDI-Map?</title> + +<para +>Kurz gesagt, wenn Sie keinen externen Synthesizer haben: <emphasis +>Nein</emphasis +>. </para> + +<para +>Wenn Sie nur eine Soundkarte haben, brauchen Sie keine MIDI-Map, weil alle Soundkarten <acronym +>GM</acronym +>-kompatibel sind (inkl. <acronym +>AWE</acronym +>- und <acronym +>GUS</acronym +>-Karten, <acronym +>FM</acronym +>-Geräten und so weiter). </para> + +<para +>Wenn Sie Musik von einem externen Synthesizer abspielen lassen, welcher nicht <acronym +>GM</acronym +>-kompatibel ist, müssen Sie eine MIDI-Map erstellen. Obwohl Sie vielleicht einen ganzen Nachmittag damit verbringen, Ihre MIDI-Map zu erstellen und verschiedene Werte auszuprobieren für die verschiedenen Einstellungen, werden Sie schließlich dafür entschädigt, weil Sie viele verborgene Fähigkeiten Ihres Keyboards entdecken. Ich habe zum Beispiel ein billiges Yamaha PSS-790, welches nicht <acronym +>GM</acronym +>-kompatibel ist und auch nicht soviele Instrumente hat wie ein <acronym +>GM</acronym +>-Gerät. Mit der MIDI-Map von &kmid; tönt es aber dank der Klangqualität eines externen Synthesizers besser als die meisten Soundkarten (inkl. AWE). </para> + +</sect1> + +<sect1 id="creating-a-midi-map"> +<title +>Erstellen einer MIDI-Map</title> + +<para +>Es gibt leider keine Programme, um MIDI-Maps zu erstellen. Sie müssen also die entsprechende Datei von Hand (mit Ihrem Lieblingseditor) bearbeiten. </para> + +<para +>Eine MIDI-Map ist eine Textdatei, die alle benötigten Umsetzungen für das Abspielen eines Stückes speichert. </para> + +<para +>Die Datei besteht aus vier Abschnitten: <literal +>PATCHMAP</literal +>, <literal +>KEYMAP</literal +>, <literal +>CHANNELMAP</literal +> und <literal +>OPTIONS</literal +>. </para> + +<para +>Jeder Abschnitt darf nur einmal erscheinen, außer dem <literal +>KEYMAP</literal +>-Abschnitt, der so oft erscheinen darf wie gewünscht. Voraussetzung dafür ist aber, dass jedes Auftreten eine unterschiedliche TextID besitzt (siehe unten). </para> + +<para +>Der allgemeine Aufbau einer MIDI-Map ist wie folgt: </para> + +<screen +>DEFINE PATCHMAP +... +END + +DEFINE KEYMAP "Name der Keymap" +... +END + +DEFINE KEYMAP "Eine weitere Keymap" +... +END + +DEFINE CHANNELMAP +... +END + +OPTIONS +... +END +</screen> + +<para +>Sie sehen, dass <literal +>DEFINE</literal +> gebraucht wird, um anzuzeigen, dass ein Abschnitt beginnt (außer für <literal +>OPTIONS</literal +>) und <literal +>END</literal +>, dass das Ende eines Abschnittes erreicht ist. </para> + +<para +>Sie können Kommentare einfügen, indem Sie am Anfang der Zeile ein <literal +>#</literal +>-Zeichen setzen. </para> + +<para +>Bitte schicken Sie mir Ihre Map-Datei als E-Mail, damit ich in zukünftigen Versionen von &kmid; Unterstützung bieten kann für Geräte, die nicht General-MIDI-kompatibel sind. </para> + +<sect2 id="the-patchmap-section"> +<title +>Der <literal +>PATCHMAP</literal +> Abschnitt</title> + +<para +>In diesem Abschnitt wird angegeben, wie die Patches von General MIDI auf Ihr spezifisches Keyboard abgebildet werden. Der allgemeine Gebrauch sieht wie folgt aus: </para> + +<screen +>(Name des GM Patch)=(<replaceable +>N</replaceable +>) [AllKeysTo M] +</screen> + +<para +>Wobei <replaceable +>N</replaceable +> die Nummer ist, die Ihr Keyboard braucht, um Patches empfangen zu können. </para> + +<para +>Bitte beachten Sie, dass die linke Seite des Gleichheitszeichens ignoriert wird. Es wird angenommen, dass die <acronym +>GM</acronym +>-Patches in der richtigen Reihenfolge vorliegen (von 0 bis 127), Sie dürfen die Reihenfolge also nicht ändern und auch keine Zeile für eines der 128 Instrumente weglassen. </para> + +<para +>Das optionale <literal +>AllKeysTo M</literal +> wird gebraucht, um alle Töne, die dieses Instrument brauchen, auf den Ton mit der Nummer M zu legen. Wenn Ihr Keyboard zum Beispiel keinen <literal +>Gewehrschuss</literal +> unterstützt (GM-Patch 127), können Sie eine Trommel (z.B. mit Ton 60) nehmen, die ähnlich wie ein Gewehrschuss tönt. Dazu tragen Sie folgendes in den <literal +>PATCHMAP</literal +>-Abschnitt ein: </para> + +<screen +>Gewehrschuß =100 AllKeysTo 60</screen> + + +<para +>Wenn jetzt also eine MIDI-Datei eine Note mit Patch 127 (Gewehrschuss) spielen soll, nimmt es Patch 100 (die Trommel auf Ihrem Keyboard) und spielt den Ton 60, unabhängig davon, welcher Ton in der MIDI-Datei steht. </para> + +<para +>Bitte beachten Sie, dass hier mit dem Begriff <quote +>Trommel-Patch</quote +> der Patch gemeint ist, bei dem jeder Ton ein anderes Perkussionsinstrument (Trommel, Becken, Maracas &etc;) darstellt und nicht derjenige, bei dem der Ton die Tonhöhe der immer gleichen Trommel bedeutet (wie ihn manche Keyboards besitzen). </para> + +</sect2> + +<sect2 id="The-keymap-section"> +<title +>Der <literal +>KEYMAP</literal +> Abschnitt</title> + +<para +>Der <literal +>KEYMAP</literal +> Abschnitt wird gebraucht, um anzugeben, wie Töne auf einem bestimmten Kanal oder Instrument abgebildet werden. Der Gebrauch ist: </para> + +<screen +>DEFINE KEYMAP "Name der Keymap" +C 0 =0 +C#0 =1 +D 0 =2 +... +END +</screen> + +<para +>Wie beim <literal +>PATCHMAP</literal +>-Abschnitt ist die Reihenfolge der Zeilen sehr wichtig, ebenso deren Vorhandensein. Sie müssen also 128 Einträge erstellen. </para> + +<para +>Sie können für jeden Kanal und jedes Instrument mehrere Keymaps definieren. Sie müssen nur in der ersten Zeile verschiedene Namen verwenden. </para> + +<para +>Keymaps werden vor allem gebraucht, um Töne auf den Perkussions-Kanal abzubilden. Schauen Sie sich als Beispiel die mitgelieferten Keymaps an. </para> + +</sect2> + +<sect2 id="the-channelmap-section"> +<title +>Der <literal +>CHANNELMAP</literal +>-Abschnitt</title> + +<para +>Dieser Abschnitt kann gebraucht werden, um einige Kanäle auf andere abzubilden. Wenn Sie zum Beispiel den ersten und den zweiten Kanal vertauschen wollen, machen Sie das ganz einfach im <literal +>CHANNELMAP</literal +>-Abschnitt. </para> + +<para +>Allerdings sind diese Einstellungen nützlicher für Keyboards, welche die Perkussion auf einem bestimmten Kanal haben (General MIDI auf Kanal 10, andere brauchen die Kanäle 16 oder 9). </para> + +<para +>MIDI-Geräte brauchen 16 Kanäle, der <literal +>CHANNELMAP</literal +> Abschnitt hat also 16 Zeilen, nummeriert von 0 bis 15, aufgebaut nach folgendem Muster: </para> + +<screen +>(N) = (M) [Keymap "Name"] [ForcePatch x] +</screen> + +<para +><literal +>N</literal +> ist dabei der Kanal, welcher auf den Kanal <literal +>N</literal +> abgebildet wird. Wenn Sie die <literal +>Keymap</literal +> Option benutzen, wird die Keymap mit dem Namen <literal +>Name</literal +> für diesen Kanal gebraucht. Die entsprechende Keymap muss natürlich weiter vorne in der Datei definiert sein! Wenn Sie die <guimenu +>ForcePatch</guimenu +> Option benutzen, werden alle Ereignisse ignoriert, die den Patch auf diesem Kanal zu ändern versuchen. In diesem Fall wird dann immer Patch <guimenu +>x</guimenu +> benutzt. </para> + +<para +>Die Option <literal +>ForcePatch</literal +> kann zum Beispiel nützlich sein, um immer den Perkussions-Patch auf dem Perkussions-Kanal zu benutzen. </para> + +</sect2> + +<sect2 id="the-options-section"> +<title +>Der Abschnitt <literal +>OPTIONS</literal +></title> + +<para +>Im Abschnitt <literal +>OPTIONS</literal +> können Sie einige ganz nützliche Einstellungen vornehmen: </para> + +<screen +>OPTIONS +PitchBenderRatio = r +MapExpressionToVolumeEvents +END +</screen> + +<para +>Sie können eine, keine oder beide Einstellungen angeben. </para> + +<para +>Der Wert für <literal +>PitchBenderRatio</literal +> gibt an, in welchem Verhältnis Pitch-Bender-Ereignisse multipliziert werden. Wenn also eine MIDI-Datei ein Pitch-Bender-Ereignis sendet mit dem Wert <literal +>n</literal +>, wird dieses mit der Formel <literal +>n*(r/4096)</literal +> umgerechnet und dann erst weitergeleitet. Der Wert <literal +>4096</literal +> wird benutzt, damit in der Map-Datei keine Dezimalkommas stehen). </para> + +<para +>Diese Einstellung wird gebraucht, weil <acronym +>GM</acronym +> vorgibt, dass ein Keyboard, das ein Pitch-Bender-Ereignis erhält mit dem Wert 4096, einen Ton höher spielen soll. Leider versuchen aber einige Keyboards um zwei Töne bis zu einer Oktave höher zu spielen. Um den richtigen Wert auf Ihrem Keyboard zu finden, müssen Sie ein bisschen mit &kmid; herumprobieren. </para> + +<para +>Wenn die Einstellung <literal +>MapExpressionToVolumeEvents</literal +> gebraucht wird und eine MIDI-Datei ein Ausdruckereignis schickt, wird dieses in ein Lautstärkeereignis umgewandelt. Dieses hat den gleichen Effekt, wird aber von mehr Keyboards verstanden. Viele MIDI-Dateien brauchen Ausdrucksereignisse, um am Schluß eines Liedes auszublenden. Wenn Sie also wollen, dass die Musik immer leiser und leiser wird, können Sie diese Einstellung ausprobieren. Vielleicht funktioniert es auch mit Ihrem Synthesizer. </para> + +</sect2> + +</sect1> + +<sect1 id="using-midimaps"> +<title +>Der Gebrauch von MIDI-Maps</title> + +<para +>Um eine MIDI-Map zu benutzen, öffnen Sie einfach den Dialog <guilabel +>MIDI-Einstellungen</guilabel +>. Diesen finden Sie im Menü unter <guimenu +>Einstellungen</guimenu +>, Punkt <guimenuitem +>MIDI-Einstellungen</guimenuitem +> </para> + +<para +>Dort klicken Sie auf <guilabel +>Durchsuchen ...</guilabel +>, wählen die Map-Datei und freuen sich an der Musik! </para> +</sect1> +</chapter> + +<chapter id="advanced-features"> +<title +>Weitergehende Möglichkeiten</title> + +<sect1 id="the-channel-view"> +<title +>Die Kanalansicht</title> + +<para +>Die Kanalansicht ist ein Fenster mit einer ganzen Reihe Klaviaturen (eine für jeden MIDI-Kanal). Auf diesen Klaviaturen sehen Sie, welche Töne gerade gespielt werden. </para> + +<sect2 id="changing-instruments"> +<title +>Instrumente ändern</title> + +<para +>Sie können die Kanalansicht auch benutzen, um das Instrument auf einem bestimmten Kanal zu ändern. Für jeden Kanal gibt es eine Auswahlliste, wo Sie ein Instrument auswählen können. Wenn Sie ein Instrument geändert haben, leuchtet der Knopf nicht mehr grün sondern rot, um anzuzeigen, dass nicht mehr das ursprüngliche Instrument benutzt wird. </para> + +<para +>Um wieder zum ursprünglichen Instrument zurückzugehen, klicken Sie auf den roten Knopf. </para> + +</sect2> + +<sect2 id="changing-the-look"> +<title +>Das Aussehen ändern</title> + +<para +>Die Kanalansicht hat (bis jetzt) zwei verschiedene Ansichten, um die gespielten Töne anzuzeigen. Die Ansicht wählen Sie im Menü <guimenu +>Einstellungen</guimenu +> unter dem Punkt <guimenuitem +>Kanalansicht: Einstellungen</guimenuitem +> </para> + +<para +>Im Modus <guilabel +>3D-Ansicht</guilabel +> werden die Tasten niedergedrückt, wie bei einem normalen Klavier. Beim Modus <guilabel +>3D-gefüllt</guilabel +> werden die gedrückten Tasten auch noch rot eingefärbt, so dass sie leicht gesehen werden. Wenn Sie Klavier oder ein anderes Musikinstrument spielen, können Sie diese Ansicht benutzen, um selbst ein Lied spielen zu lernen. Ich habe diese Technik benutzt (zusammen mit einer Geschwindigkeitsreduktion), und sie ist großartig, um neue Stücke zu lernen. </para> + +</sect2> + +</sect1> + +<sect1 id="the-tempo-lcd"> +<title +>Die Tempo-<acronym +>LCD</acronym +></title> + +<para +>Die Tempo-LCD zeigt die Geschwindigkeit an, mit der ein Lied abgespielt wird. Je höher die Zahl, desto größer die Geschwindigkeit. </para> + +<para +>Sie können das Tempo eines Liedes verändern. Wenn Sie also z.B. finden, ein Lied sei zu schnell, um dem Text zu folgen, können Sie es verlangsamen. Um das Tempo zu ändern, benutzen Sie die Pfeile links und rechts von der <acronym +>LCD</acronym +>. </para> + +<para +>Mit einem Doppelklick auf die <acronym +>LCD</acronym +> stellen Sie wieder das ursprüngliche Tempo ein. </para> + +</sect1> + +</chapter> + +<chapter id="key-bindings"> +<title +>Tastenbelegung</title> + +<informaltable> +<tgroup cols="2"> +<thead> +<row> +<entry +>Taste</entry> +<entry +>Aktion</entry> +</row> +</thead> +<tbody> +<row> +<entry +><keycap +>Leertaste</keycap +></entry> +<entry +>Das geladene Lied abspielen bzw. anhalten, wenn es bereits läuft.</entry> +</row> +<row> +<entry +><keycap +>Rücktaste</keycap +></entry> +<entry +>Wiedergabe anhalten</entry> +</row> +<row> +<entry +><keycap +>Pfeil rechts</keycap +></entry> +<entry +>Nächstes Stück in der aktuellen Sammlung</entry> +</row> +<row> +<entry +><keycap +>Pfeil links</keycap +></entry> +<entry +>Vorheriges Stück in der aktuellen Sammlung</entry> +</row> +<row> +<entry +><keycap +>Pfeil hoch</keycap +></entry> +<entry +>Liedtext eine Zeile nach oben rollen</entry> +</row> +<row> +<entry +><keycap +>Pfeil runter</keycap +></entry> +<entry +>Liedtext eine Zeile nach unten rollen</entry> +</row> +<row> +<entry +><keycap +>Bild auf</keycap +></entry> +<entry +>Liedtext eine Seite nach oben rollen</entry> +</row> +<row> +<entry +><keycap +>Bild ab</keycap +></entry> +<entry +>Liedtext eine Seite nach unten rollen</entry> +</row> +<row> +<entry +><keycap +>1</keycap +></entry> +<entry +>Textereignisse anzeigen</entry> +</row> +<row> +<entry +><keycap +>2</keycap +></entry> +<entry +>Liedtextereignisse anzeigen</entry> +</row> +<row> +<entry +><keycombo action="simul" +>&Strg;<keycap +>O</keycap +></keycombo +></entry> +<entry +>Öffnen eines Stückes</entry> +</row> +<row> +<entry +><keycombo action="simul" +>&Strg;<keycap +>Q</keycap +></keycombo +></entry> +<entry +>&kmid; beenden</entry> +</row> +<row> +<entry +><keycap +>F1</keycap +></entry> +<entry +>Dieses Dokument öffnen</entry> +</row> +</tbody> +</tgroup> +</informaltable> + +</chapter> + +<chapter id="frequently-asked-questions"> +<title +>Bei Problemen wenden Sie sich an eine der KDE-Mailinglisten, eine Newsgruppe oder direkt an mich. Beachten Sie auch die FAQ auf der nächsten Seite, und durchsuchen Sie die Newsgruppen oder Archive der Mailinglisten, bevor Sie weitere Fragen stellen.</title> + +<qandaset> +<qandaentry> +<question> +<para +>Was ist eine MIDI-Datei? </para> +</question> + +<answer> +<para +>Eine MIDI-Datei ist eine Datei, die Informationen darüber enthält, wie ein Musikstück gespielt werden muss. Es enthält die Noten, den Rhythmus, die Geschwindigkeit, &etc;. Damit kann dieselbe MIDI-Datei auf zwei verschiedenen Geräten zu sehr unterschiedlichen Ergebnissen führen, genauso wie zwei verschiedene Musiker die selben Noten auf sehr unterschiedliche Weise spielen können. </para> +</answer> +</qandaentry> + +<qandaentry> +<question> +<para +>Ich erhalte bessere Resultate mit einem mp3/wav-Spieler, warum sollte ich also &kmid; verwenden? </para> +</question> +<answer> +<para +>Gut, ich kann niemanden zwingen, &kmid; zu benutzen. Aber eine typische MIDI-Datei braucht etwa 50 KB, während eine mp3-Datei 4 MB braucht (ein Kompressionsverhältnis von 1:80) und mit einem guten Synthesizer erhalten Sie eine ähnliche Klangqualität. Bei einer MIDI-Datei können Sie darüber hinaus auch die einzelnen Instrumente ändern, die Geschwindigkeit &etc; Sie haben die Kontrolle über alles. </para> +</answer> +</qandaentry> + +<qandaentry> +<question> +<para +>Meine AWE-Karte funktioniert nicht mit KMid. Was kann ich tun? </para> +</question> +<answer> +<para +>Das kann passieren, wenn Sie eine Binärdistribution (rpm,deb) von &kmid; haben. Das passiert, weil &kmid; ohne AWE-Unterstützung kompiliert wurde. Um das Problem zu beseitigen müssen Sie eine Quelldistribution herunterladen und installieren (zum Beispiel von <ulink url="http://www.arrakis.es/~rlarrosa/kmid.html" +>&kmid;'s Startseite</ulink +>) </para> +</answer> +</qandaentry> + +<qandaentry> +<question> +<para +>Ich möchte ein ganzen Ordner zu einer Sammlung hinzufügen, aber ich habe keine Lust, alle Dateien einzeln hinzuzufügen. </para> +</question> + +<answer> +<para +>Einverstanden, darum unterstützt &kmid; Drag & Drop. Öffnen Sie einfach den Ordner, das Sie hinzufügen wollen in &konqueror;, wählen alle Dateien aus, und ziehen Sie sie auf das &kmid;-Fenster. </para> +<para +>Aktivieren Sie vorher unbedingt die Einstellung <guimenuitem +>Automatisches Hinzufügen zur Sammlung</guimenuitem +>. Sonst werden die Dateien zur temporären Sammlung hinzugefügt. </para> +</answer> +</qandaentry> + +<qandaentry> +<question> +<para +>Ich kann dem Liedtext nicht folgen, er wird zu schnell wiedergegeben! </para> +</question> +<answer> +<para +>Sie können die Pfeiltaste links von der Tempo-<acronym +>LCD</acronym +> betätigen, um die Wiedergabe zu verlangsamen. Um das Standardtempo wiederherzustellen können Sie auf die <acronym +>LCD</acronym +> doppelklicken. </para +> +</answer> +</qandaentry> +</qandaset> + +</chapter> + +<chapter id="final-notes"> +<title +>Schlussbemerkungen</title> + +<sect1 id="some-tips-and-tricks"> +<title +>Einige Tipps und Tricks</title> + +<para +>Hier noch ein paar Tipps, um alle Vorteile von &kmid; zu benutzen: </para> + +<variablelist> +<varlistentry> +<term +>Öffnen von Liedern</term> +<listitem> +<para +>Ich habe auf einer &kde;-Arbeitsfläche ein &konqueror;-Fenster mit meinem MIDI-Ordner und &kmid; auf dieser Arbeitsfläche (wenn ich eine MIDI-Datei abspiele) oder angeheftet (wenn ich eine Karaoke-Datei abspiele ) offen. Auf diese Weise muss ich, wenn die Sammlung zu Ende abgespielt ist oder ich eine Datei abspielen möchte, lediglich in das &konqueror;-Fenster wechseln und die gewünschte Datei in das Fenster von &kmid; ziehen. </para> + +<para +>Wenn Sie nur mal schnell eine Datei anhören wollen, ohne sie gleich zu einer Sammlung hinzuzufügen, schalten Sie die Einstellung <guimenuitem +>Automatisches Hinzufügen zur Sammlung</guimenuitem +> ab, und die neue; Datei wird zur temporären Sammlung hinzugefügt.Öffnen von Dateien </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>Eine weitere Methode, um eine neue Sammlung anzulegen</term> +<listitem> +<para +>Nehmen wir an, Sie haben die MIDI-Dateien <filename +>A.mid</filename +>, <filename +>B.mid</filename +> und <filename +>C.mid</filename +>. Zuerst wollen Sie nur mal die erste Datei abspielen. Also stellen Sie die Einstellung <guimenuitem +>Automatisches Hinzufügen zur Sammlung</guimenuitem +> ab und öffnen <filename +>A.mid</filename +>. Ihre temporäre Sammlung enthält dann genau diese eine MIDI-Datei. </para> +<para +>Dann entschließen Sie sich, auch B.mid und C.mid abzuspielen und eine Sammlung mit allen drei Dateien zu erstellen. Wie machen Sie das? </para> +<para +>Ganz einfach: Stellen Sie die Einstellung <guimenuitem +>Automatisches Hinzufügen zur Sammlung</guimenuitem +> an und öffnen Sie <filename +>B.mid</filename +> und <filename +>C.mid</filename +>. Sie haben dann in der temporären Sammlung <filename +>A.mid</filename +>, <filename +>B.mid</filename +> und <filename +>C.mid</filename +>. Hier öffnen Sie nun den Dialog <guilabel +>Sammlungsmanager</guilabel +> und wählen die temporäre Sammlung aus. Dann klicken Sie auf <literal +>Kopieren</literal +>, geben den Namen der neuen Sammlung an und sind fertig. Sie haben jetzt eine Sammlung mit den MIDI-Dateien A, B.und C, die beim Beenden von &kmid; nicht gelöscht wird. </para> +</listitem> +</varlistentry> +</variablelist> + +</sect1> + +<sect1 id="hall-of-kmids-friends"> +<title +>Freunde von &kmid;</title> + +<para +>Diese Leute haben mir MIDI-Dateien oder Postkarten gesendet. Allen herzlichen Dank! Wenn ich diese Lieder höre oder die Postkarte sehe, animiert mich das, weiter an &kmid; zu programmieren. </para> + +<itemizedlist> +<listitem> +<para +>Ola Sigurdson - <literal +>Taking Care of Business</literal +> (Bachman Turner Overdrive)</para> +</listitem> +<listitem> +<para +>EG Lim - Eine wirklich sehr schöne Postkarte von Penang.</para> +</listitem> +<listitem> +<para +>Günther Starnberger - <literal +>Amadeus</literal +> (Falco) und <literal +>Schrei Nach Liebe</literal +> (Die Ärzte)</para> +</listitem> +<listitem> +<para +>Leandro Terrés - <guimenu +>All That She Wants</guimenu +> und <guimenu +>The Sign</guimenu +> (Ace of Base)</para> +</listitem> +<listitem> +<para +>Nick Stoic - Zwei MIDI-Dateien</para> +</listitem> +</itemizedlist> + +</sect1> + +<sect1 id="about-the-author"> +<title +>Über den Autor</title> + +<para +>&kmid; wurde von Antonio Larrosa Jiménez aus Málaga (Spanien) geschrieben. Ich studiere Mathematik an der Universität von Málaga. Im Moment bin ich im dritten Jahr, so dass ich nicht viel Freizeit habe für meine Hobbies, aber ich versuche doch, mir ein bisschen Zeit zu nehmen. Als Hobbies habe ich Programmieren, MIDI-Dateien sammeln, Musik machen und Sätze beweisen. </para> + +<para +>Wenn Sie wissen möchten, wo sie MIDI/Karaoke-Dateien herunterladen können, wenn Sie eine Frage, einen Fehler oder eine Idee für eine Erweiterung von &kmid; haben, oder auch, wenn Sie mich einfach glücklich machen wollen, schreiben Sie mir eine E-Mail: <email +>[email protected]</email +> oder <email +>[email protected]</email +> </para> + +<para +>Sie können mir auch mit Schneckenpost schreiben: </para> + +<literallayout +>Antonio Larrosa Jimenez +Rio Arnoya 10 5B +Malaga (Spanien) +</literallayout> + +<para +>Sie machen mir wirklich eine Riesenfreude, wenn Sie mir eine Postkarte von Ihrem Wohnort oder eine MIDI-/Karaoke-Datei von einer lokalen Gruppe schicken. Alle die mir eine Postkarte oder eine MIDI-Datei schicken, werde ich unter Freunde von &kmid; aufzählen (wenn Sie das wollen). Bevor Sie eine MIDI-Datei schicken, sollten Sie aber mit mir Kontakt aufnehmen, da ich die Datei vielleicht schon habe. </para> + +<para +>Ich habe &kmid; vollständig in meiner Freizeit geschrieben und von niemandem dafür Geld gekriegt. Ich möchte daher betonen, dass ich nur darum weiter programmiere, weil/wenn ich Rückmeldungen von Benutzern bekomme (Postkarten oder E-Mails). </para> + +<para +>Folgenden Personen möchte ich danken, dass Sie mitgeholfen haben, &kmid; zu entwickeln: </para> + +<itemizedlist> +<listitem> +<para +>Paul J. Leonard <email +>[email protected]</email +> - Unterstützung für AWE Karten </para> +</listitem> +<listitem> +<para +>Sebestyen Zoltan <email +>[email protected]</email +> - FreeBSD-Portierung und AWE-Test </para> +</listitem> +<listitem> +<para +>Christian Esken <email +>[email protected]</email +> - Für die Organisation von Multimedia in KDE </para> +</listitem> +<listitem> +<para +>Stephan Kulow <email +>[email protected]</email +> - Configure-Skripte und Hilfe mit <command +>automake</command +> und <command +>CVS</command +> </para> +</listitem> +<listitem> +<para +>Jaroslav Kysela - Hilfe beim Erstellen der &Linux; Ultrasound Project Treiber-Unterstützung </para> +</listitem> +<listitem> +<para +>Takashi Iwai und Joseph H. Bühler - Behebung des Fehlers, dass die Tonhöhe bei AWE-Karten zu hoch war. </para> +</listitem> +<listitem> +<para +>Adrian Knoth - Für viele Neuigkeiten und gute Tips. </para> +</listitem> +<listitem> +<para +>Kevin Street - Patch zur Unterstützung von FreeBSD 3.0 </para> +</listitem> +<listitem> +<para +>Mein Dank gilt auch Jose Lus Sanchez für das Testen der GUS-Unterstützung, Ignacio Garcia für das Testen der AWE-Unterstützung, Has Petter Bieker, Ola Sigurdson, Marc Diefenbruch, Peter Gritsch, Magnus Pfeffer, Urko Lusa, Peter-Paul Witta, Thorsten Westheider, Ulrich Cordes und jedem, der mir einen Patch, eine Fehlerbenachrichtigung oder auch nur eine unterstützende E-Mail geschickt hat. </para> +</listitem> +<listitem> +<para +>Und natürlich gilt mein Dank auch all diesen hervorragenden Musikern im Netz, die uns diese wundervollen MIDI- und Karaoke-Dateien schenken. </para> +</listitem> +</itemizedlist> + +<para +>Übersetzung: Gregor Zumstein <email +>[email protected]</email +></para +><para +>Überarbeitung der Übersetzung: Frank Schütte <email +>[email protected]</email +></para +> + +</sect1> + +<sect1 id="copyright-and-license"> +<title +>Copyright und Lizenz</title> + +<para +>&kmid; steht unter dem Copyright von Antonio Larrosa Jiménez, 1999-2001</para> + +<para +>Die Dokumentation steht unter dem Copyright von Antonio Larrosa Jiménez 1999, 2001</para> +&underFDL; &underGPL; </sect1> + +</chapter> + +<appendix id="installation"> +<title +>Installation</title> + +<sect1 id="how-to-obtain-kmid"> +<title +>Wo bekomme ich &kmid;?</title> +&install.intro.documentation; <para +>Zusätzlich hierzu kann &kmid; auch auf seiner Homepage gefunden werden, welche sich unter <ulink url="http://www.arrakis.es/~rlarrosa/kmid.html" +>http://www.arrakis.es/~rlarrosa/kmid.html</ulink +> befindet. Auf der Homepage können Sie die Entwicklung mitverfolgen, Informationen suchen und Bilder betrachten. Sie finden dort auch Links zu Seiten mit weiteren Karaoke-Liedern, &etc; </para> + +</sect1> + +<sect1 id="requirements"> +<title +>Voraussetzungen</title> + +<para +>Um &kmid; benutzen zu können, brauchen Sie:</para> + +<itemizedlist> +<listitem> +<para +>&kde; (das ja wahrscheinlich bereits installiert ist) </para> +</listitem> +<listitem> +<para +>Eine Soundkarte. Ich empfehle Ihnen eine gute Soundkarte oder einen externen Synthesizer, da die Klangqualität wesentlich von Ihrer Soundkarte abhängt. Es ist nicht das gleiche, ob Sie ein FM-Gerät oder eine AWE-Karte benutzen. </para> + +<para +>Wenn Sie keine Soundkarte haben, müssen Sie &kmid; mit dem Parameter <literal +>MODE_DEMO_ONLYVISUAL</literal +> kompilieren. Es läuft dann, als ob Sie eine Soundkarte hätten, außer dass Sie natürlich keine Musik hören können. </para> +</listitem> +</itemizedlist> + +</sect1> + +<sect1 id="compilation-and-installation"> +<title +>Kompilierung und Installation</title> +&install.compile.documentation; <para +>Einige Beispieldateien finden sich nach der Installation unter <filename +>$<envar +>KDEDIR</envar +>/share/apps/kmid</filename +> </para> + +<para +>Falls Probleme auftreten, kontaktieren Sie eine der &kde;-Mailinglisten oder senden Sie eine Fehlerbenachrichtigung direkt an mich. </para> + +</sect1> + +</appendix> + +</book> +<!-- +Local Variables: +mode: sgml +sgml-omittag: nil +sgml-shorttag: t +End: +--> diff --git a/tde-i18n-de/docs/tdemultimedia/kmix/Makefile.am b/tde-i18n-de/docs/tdemultimedia/kmix/Makefile.am new file mode 100644 index 00000000000..df6332b8050 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/kmix/Makefile.am @@ -0,0 +1,4 @@ +KDE_LANG = de +SUBDIRS = $(AUTODIRS) +KDE_DOCS = AUTO +KDE_MANS = AUTO diff --git a/tde-i18n-de/docs/tdemultimedia/kmix/Makefile.in b/tde-i18n-de/docs/tdemultimedia/kmix/Makefile.in new file mode 100644 index 00000000000..218c5127b33 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/kmix/Makefile.in @@ -0,0 +1,635 @@ +# Makefile.in generated by automake 1.10.1 from Makefile.am. +# KDE tags expanded automatically by am_edit - $Revision: 483858 $ +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = docs/tdemultimedia/kmix +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +#>- RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ +#>- html-recursive info-recursive install-data-recursive \ +#>- install-dvi-recursive install-exec-recursive \ +#>- install-html-recursive install-info-recursive \ +#>- install-pdf-recursive install-ps-recursive install-recursive \ +#>- installcheck-recursive installdirs-recursive pdf-recursive \ +#>- ps-recursive uninstall-recursive +#>+ 7 +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive nmcheck-recursive bcheck-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +#>- DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +#>+ 1 +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) $(KDE_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +ARTSCCONFIG = @ARTSCCONFIG@ +AUTOCONF = @AUTOCONF@ +AUTODIRS = @AUTODIRS@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CONF_FILES = @CONF_FILES@ +CYGPATH_W = @CYGPATH_W@ +DCOPIDL = @DCOPIDL@ +DCOPIDL2CPP = @DCOPIDL2CPP@ +DCOPIDLNG = @DCOPIDLNG@ +DCOP_DEPENDENCIES = @DCOP_DEPENDENCIES@ +DEFS = @DEFS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +GMSGFMT = @GMSGFMT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KCFG_DEPENDENCIES = @KCFG_DEPENDENCIES@ +KCONFIG_COMPILER = @KCONFIG_COMPILER@ +KDECONFIG = @KDECONFIG@ +KDE_EXTRA_RPATH = @KDE_EXTRA_RPATH@ +KDE_RPATH = @KDE_RPATH@ +KDE_XSL_STYLESHEET = @KDE_XSL_STYLESHEET@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MAKEKDEWIDGETS = @MAKEKDEWIDGETS@ +MCOPIDL = @MCOPIDL@ +MEINPROC = @MEINPROC@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TOPSUBDIRS = @TOPSUBDIRS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XMLLINT = @XMLLINT@ +X_RPATH = @X_RPATH@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +am__leading_dot = @am__leading_dot@ +am__tar = @am__tar@ +am__untar = @am__untar@ +#>- bindir = @bindir@ +#>+ 2 +DEPDIR = .deps +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +kde_appsdir = @kde_appsdir@ +kde_bindir = @kde_bindir@ +kde_confdir = @kde_confdir@ +kde_datadir = @kde_datadir@ +kde_htmldir = @kde_htmldir@ +kde_icondir = @kde_icondir@ +kde_kcfgdir = @kde_kcfgdir@ +kde_libs_htmldir = @kde_libs_htmldir@ +kde_libs_prefix = @kde_libs_prefix@ +kde_locale = @kde_locale@ +kde_mimedir = @kde_mimedir@ +kde_moduledir = @kde_moduledir@ +kde_servicesdir = @kde_servicesdir@ +kde_servicetypesdir = @kde_servicetypesdir@ +kde_sounddir = @kde_sounddir@ +kde_styledir = @kde_styledir@ +kde_templatesdir = @kde_templatesdir@ +kde_wallpaperdir = @kde_wallpaperdir@ +kde_widgetdir = @kde_widgetdir@ +tdeinitdir = @tdeinitdir@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +xdg_appsdir = @xdg_appsdir@ +xdg_directorydir = @xdg_directorydir@ +xdg_menudir = @xdg_menudir@ +KDE_LANG = de +#>- SUBDIRS = $(AUTODIRS) +#>+ 1 +SUBDIRS =. +KDE_DOCS = AUTO +KDE_MANS = AUTO +#>- all: all-recursive +#>+ 1 +all: docs-am all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) +#>- @for dep in $?; do \ +#>- case '$(am__configure_deps)' in \ +#>- *$$dep*) \ +#>- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ +#>- && exit 0; \ +#>- exit 1;; \ +#>- esac; \ +#>- done; \ +#>- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdemultimedia/kmix/Makefile'; \ +#>- cd $(top_srcdir) && \ +#>- $(AUTOMAKE) --gnu docs/tdemultimedia/kmix/Makefile +#>+ 12 + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdemultimedia/kmix/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/tdemultimedia/kmix/Makefile + cd $(top_srcdir) && perl ../scripts/admin/am_edit -p../scripts/admin docs/tdemultimedia/kmix/Makefile.in +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +#>- distdir: $(DISTFILES) +#>+ 1 +distdir: distdir-nls $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +#>- uninstall: uninstall-recursive +#>+ 1 +uninstall: uninstall-docs uninstall-nls uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +#>- clean: clean-recursive +#>+ 1 +clean: kde-rpo-clean clean-recursive + +#>- clean-am: clean-generic mostlyclean-am +#>+ 1 +clean-am: clean-docs clean-bcheck clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +#>- install-data-am: +#>+ 1 +install-data-am: install-docs install-nls + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic ctags \ + ctags-recursive distclean distclean-generic distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ + tags-recursive uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: + +#>+ 2 +KDE_DIST=index.docbook kmix-window.png index.cache.bz2 kmix-channel-record.png Makefile.in kmix-channel-playback.png Makefile.am + +#>+ 24 +index.cache.bz2: $(srcdir)/index.docbook $(KDE_XSL_STYLESHEET) kmix-channel-record.png kmix-window.png index.docbook kmix-channel-playback.png + @if test -n "$(MEINPROC)"; then echo $(MEINPROC) --check --cache index.cache.bz2 $(srcdir)/index.docbook; $(MEINPROC) --check --cache index.cache.bz2 $(srcdir)/index.docbook; fi + +docs-am: index.cache.bz2 + +install-docs: docs-am install-nls + $(mkinstalldirs) $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kmix + @if test -f index.cache.bz2; then \ + echo $(INSTALL_DATA) index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kmix/; \ + $(INSTALL_DATA) index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kmix/; \ + elif test -f $(srcdir)/index.cache.bz2; then \ + echo $(INSTALL_DATA) $(srcdir)/index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kmix/; \ + $(INSTALL_DATA) $(srcdir)/index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kmix/; \ + fi + -rm -f $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kmix/common + $(LN_S) $(kde_libs_htmldir)/$(KDE_LANG)/common $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kmix/common + +uninstall-docs: + -rm -rf $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kmix + +clean-docs: + -rm -f index.cache.bz2 + + +#>+ 13 +install-nls: + $(mkinstalldirs) $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kmix + @for base in kmix-channel-record.png kmix-window.png index.docbook kmix-channel-playback.png ; do \ + echo $(INSTALL_DATA) $$base $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kmix/$$base ;\ + $(INSTALL_DATA) $(srcdir)/$$base $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kmix/$$base ;\ + done + +uninstall-nls: + for base in kmix-channel-record.png kmix-window.png index.docbook kmix-channel-playback.png ; do \ + rm -f $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kmix/$$base ;\ + done + + +#>+ 5 +distdir-nls: + for file in kmix-channel-record.png kmix-window.png index.docbook kmix-channel-playback.png ; do \ + cp $(srcdir)/$$file $(distdir); \ + done + +#>+ 15 +force-reedit: + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdemultimedia/kmix/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/tdemultimedia/kmix/Makefile + cd $(top_srcdir) && perl ../scripts/admin/am_edit -p../scripts/admin docs/tdemultimedia/kmix/Makefile.in + + +#>+ 21 +clean-bcheck: + rm -f *.bchecktest.cc *.bchecktest.cc.class a.out + +bcheck: bcheck-recursive + +bcheck-am: + @for i in ; do \ + if test $(srcdir)/$$i -nt $$i.bchecktest.cc; then \ + echo "int main() {return 0;}" > $$i.bchecktest.cc ; \ + echo "#include \"$$i\"" >> $$i.bchecktest.cc ; \ + echo "$$i"; \ + if ! $(CXX) $(DEFS) -I. -I$(srcdir) -I$(top_builddir) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(KDE_CXXFLAGS) --dump-class-hierarchy -c $$i.bchecktest.cc; then \ + rm -f $$i.bchecktest.cc; exit 1; \ + fi ; \ + echo "" >> $$i.bchecktest.cc.class; \ + perl $(top_srcdir)/admin/bcheck.pl $$i.bchecktest.cc.class || { rm -f $$i.bchecktest.cc; exit 1; }; \ + rm -f a.out; \ + fi ; \ + done + + +#>+ 3 +final: + $(MAKE) all-am + +#>+ 3 +final-install: + $(MAKE) install-am + +#>+ 3 +no-final: + $(MAKE) all-am + +#>+ 3 +no-final-install: + $(MAKE) install-am + +#>+ 3 +kde-rpo-clean: + -rm -f *.rpo + +#>+ 3 +nmcheck: +nmcheck-am: nmcheck diff --git a/tde-i18n-de/docs/tdemultimedia/kmix/index.cache.bz2 b/tde-i18n-de/docs/tdemultimedia/kmix/index.cache.bz2 Binary files differnew file mode 100644 index 00000000000..c098d16fd15 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/kmix/index.cache.bz2 diff --git a/tde-i18n-de/docs/tdemultimedia/kmix/index.docbook b/tde-i18n-de/docs/tdemultimedia/kmix/index.docbook new file mode 100644 index 00000000000..8ae0bd68dfd --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/kmix/index.docbook @@ -0,0 +1,984 @@ +<?xml version="1.0" ?> +<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [ + <!ENTITY kappname "&kmix;"> + <!ENTITY package "tdemultimedia"> + <!ENTITY % German "INCLUDE" +> <!-- change language only here --> + <!ENTITY % addindex "IGNORE"> +]> + +<book lang="&language;"> + +<bookinfo> +<title +>Das Handbuch zu &kmix;</title> + +<authorgroup> +<author +><firstname +>Matt</firstname +><surname +>Johnston</surname +> <affiliation +> <address +>&Matt.Johnston.mail;</address> +</affiliation> +</author> + +<othercredit role="developer" +><firstname +>Christian</firstname +><surname +>Esken</surname +> <affiliation +><address +><email +>[email protected]</email +></address +></affiliation> +<contrib +>Entwickler</contrib> +</othercredit> + +<othercredit role="developer" +><firstname +>Helio</firstname +> <surname +>Chissini de Castro</surname +> <affiliation +><address +><email +>[email protected]</email +></address +></affiliation> +<contrib +>Entwickler</contrib> +</othercredit> + + +<othercredit role="developer" +><firstname +>Stefan</firstname +> <surname +>Schimanski</surname +> <affiliation +><address +><email +>[email protected]</email +></address +></affiliation> +<contrib +>Entwickler</contrib> +</othercredit> + +<othercredit role="reviewer" +><firstname +>Lauri</firstname +> <surname +>Watts</surname +> <affiliation +><address +>&Lauri.Watts.mail;</address +></affiliation> +<contrib +>Korrektur</contrib> +</othercredit> +<othercredit role="translator" +><firstname +>Gregor</firstname +><surname +>Zumstein</surname +><affiliation +><address +><email +>[email protected]</email +></address +></affiliation +><contrib +>Übersetzung</contrib +></othercredit +><othercredit role="translator" +><firstname +>Frank</firstname +><surname +>Schütte</surname +><affiliation +><address +><email +>[email protected]</email +></address +></affiliation +><contrib +>Überarbeitung der Übersetzung</contrib +></othercredit +><othercredit role="translator" +><firstname +>Arnold</firstname +><surname +>Krille</surname +><affiliation +><address +><email +>[email protected]</email +></address +></affiliation +><contrib +>Überarbeitung der Übersetzung</contrib +></othercredit +> +</authorgroup> + +<copyright> +<year +>1996</year +><year +>2005</year> +<holder +>Christian Esken & &Matt.Johnston;</holder> +</copyright> + +<legalnotice +>&FDLNotice;</legalnotice> + +<date +>2007-01-05</date> +<releaseinfo +>2.6.1</releaseinfo> + +<abstract +><para +>&kmix; ist eine Anwendung, die es Ihnen erlaubt, die Lautstärkeeinstellungen Ihrer Soundkarte zu verändern.</para +></abstract> + +<keywordset> +<keyword +>KDE</keyword> +<keyword +>KMix</keyword> +<keyword +>tdemultimedia</keyword> +<keyword +>Sound</keyword> +<keyword +>Mixer</keyword> +<keyword +>Lautstärkeregelung</keyword> +</keywordset> + +</bookinfo> + +<chapter id="introduction"> +<title +>Einleitung</title> + +<para +>&kmix; ist das Mixer-Programm von &kde;. Obwohl es klein ist, besitzt es alle nötigen Fähigkeiten. Für jedes Gerät gibt es einen separaten Regler.</para> + +<para +>&kmix; unterstützt verschiedene Betriebssysteme und Sound-Treiber.</para> + +<itemizedlist> +<listitem +><para +>Der ALSA-Soundkartentreiber.</para +></listitem> +<listitem +><para +>Alle Open-Sound-System-Plattformen. Explizit getestet sind &Linux;, FreeBSD, NetBSD und BSDI.</para +></listitem> +<listitem +><para +>Rechner mit &Solaris;.</para +></listitem> +<listitem +><para +>Rechner mit &IRIX;.</para +></listitem> +<listitem +><para +>Rechner mit &HP-UX;.</para +></listitem> +</itemizedlist> + +<para +>Wenn sowohl ALSA als auch das Open Sound System installiert sind, benutzt &kmix; standardmäßig ALSA.</para> + +</chapter> + +<chapter id="working-with-kmix"> +<title +>Arbeiten mit &kmix;</title> + +<sect1 id="basic-usage"> +<title +>Grundlagen</title> + +<para +>Die Benutzung von &kmix; ist einfach. Jedes Mixer-Gerät Ihrer Soundkarte wird durch einen Lautstärkeregler dargestellt. Mono-Geräte haben nur einen Regler, Stereo-Geräte je nach Wahl einen oder zwei. Zusätzlich gibt es einen Schieberegler am unteren Rand des &kmix;-Fensters für die Lautstärkeverteilung auf linken und rechten Audioausgang. Wenn mehrere Soundkarten vorhanden sind, wird oben eine Liste zur Auswahl der Soundkarte angezeigt. <screenshot> +<screeninfo +>Das &kmix;-Hauptfenster</screeninfo> +<mediaobject> +<imageobject> +<imagedata fileref="kmix-window.png" format="PNG"/></imageobject> +<textobject +><phrase +>Das &kmix;-Hauptfenster</phrase +></textobject> +</mediaobject> +</screenshot> + +</para> + + +<para +>Das Fenster kann bis zu drei Abschnitte für die verschiedenen Soundkartenregler anzeigen: <guilabel +>Ausgänge</guilabel +>, <guilabel +>Eingänge</guilabel +> und <guilabel +>Schalter</guilabel +>. Diese Abschnitte enthalten Lautstärkeregler, Schalter zum Ein- bzw. Ausschalten von Aufnahme und Abspielen, und Auswahlfelder mit mehreren Möglichkeiten. <simplelist> +<member +><guilabel +>Ausgänge</guilabel +>: Enthält die Regler, die sehr wahrscheinlich die Wiedergabe beeinflussen, wie zum Beispiel den <guilabel +>Master</guilabel +>-Regler.</member> +<member +><guilabel +>Eingänge</guilabel +>: Enthält Regler, die sehr wahrscheinlich mit Aufnahmen zu tun haben, zum Beispiel <guilabel +>Capture</guilabel +>.</member> +<member +><guilabel +>Schalter</guilabel +>: Enthält alle Kontrollelemente, wo etwas ein- oder ausgeschaltet wird (zum Beispiel "Mic Boost (+20dB)"), oder aus einer Liste auszuwählen ist ( zum Beispiel <guilabel +>Mic Select</guilabel +>: <guilabel +>Mic1</guilabel +> oder <guilabel +>Mic2</guilabel +>).</member> +</simplelist> +</para> + +<para +>Neben den Reglern enthält &kmix; auch LEDs. Die Farben bedeuten:</para> +<simplelist> +<member +>Grün: Eine LED für Wiedergabeoptionen.</member> +<member +>Rot: Eine LED für Aufnahmeoptionen.</member> +<member +>Gelb: Eine LED für spezielle Soundkarteneinstellungen.</member> +</simplelist> +<para +>Diese drei Farben gibt es in zwei Stärken: eine beleuchtete LED bedeutet "AN", eine nicht beleuchtete LED bedeutet "AUS".</para> +</sect1> + +<sect1 id="volume-sliders"> +<title +>Lautstärkeregler</title> + +<para +>Die Lautstärkeregler in den Bereichen <guilabel +>Ausgänge</guilabel +> und <guilabel +>Eingänge</guilabel +> bestehen aus den folgenden Elementen (von oben nach unten): <screenshot> +<screeninfo +>Lautstärkeregler (<guilabel +>Eingänge</guilabel +>)</screeninfo> +<mediaobject> +<imageobject> +<imagedata fileref="kmix-channel-playback.png" format="PNG"/></imageobject> +<textobject +><phrase +>Lautstärkeregler (<guilabel +>Eingänge</guilabel +>)</phrase +></textobject> +</mediaobject> +</screenshot> + +<simplelist> +<member +>Ein Symbol, das die Funktion des Elements repräsentieren soll.</member> +<member +>Eine Anzeige für die Lautstärke (optional).</member> +<member +>Eine grüne LED für Stummschaltung (LED aus/dunkel bedeutet Stumm, LED an/hell bedeutet, der Kanal ist eingeschaltet).</member> +<member +>Ein Regler, um die Lautstärke einzustellen. Tipp: Die Bezeichnung an der Seite kann ausgeblendet werden, falls sie zu viel Platz wegnimmt.</member> +<member +>Wenn ein Element Aufnahmen unterstützt, besitzt es eine rote LED, wenn diese hell leuchtet, ist der Kanal für Aufnahmen ausgewählt. Wenn die LED dunkel ist, ist der Kanal nicht für Aufnahmen ausgewählt.</member> +</simplelist> + +<screenshot> +<screeninfo +>Lautstärkeregler mit Aufnahmeschalter (<guilabel +>Ausgang</guilabel +>)</screeninfo> +<mediaobject> +<imageobject> +<imagedata fileref="kmix-channel-record.png" format="PNG"/></imageobject> +<textobject +><phrase +>Lautstärkeregler mit Aufnahmeschalter (<guilabel +>Ausgang</guilabel +>)</phrase +></textobject> +</mediaobject> +</screenshot> + +</para> + + +<para +>Die meisten der Regler haben ein Kontextmenü, das Sie durch Klicken mit der &RMBn; auf den Regler oder das oberhalb stehende Gerätesymbol aktivieren können. Das Menü hat verschiedene Einträge, wobei jeweils nur die für das Gerät passenden angezeigt werden. </para> + +<variablelist> +<varlistentry> +<term +><guimenuitem +>Kanäle trennen</guimenuitem +></term> +<listitem +><para +>Einen oder zwei Lautstärkeregler für das Gerät anzeigen. Das gilt nur für Stereogeräte. Der rechte Regler kontrolliert die Lautstärke rechts und der linke Regler die Lautstärke links.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><guimenuitem +>Stumm</guimenuitem +></term> +<listitem +><para +>Das Gerät stummschalten.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><guimenuitem +>Ausblenden</guimenuitem +></term> +<listitem +><para +>Kanäle, die nicht geändert werden sollen, können mit dieser Option ausgeblendet werden. Wenn diese wieder gezeigt werden sollen, geht dies nur über die Option <guilabel +>Kanäle</guilabel +> (siehe weiter unten).</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><guimenuitem +>Kurzbefehle festlegen ...</guimenuitem +></term> +<listitem +><para +>Sie können Regler auch mit der Tastatur steuern. Mit diesem Menüeintrag können Sie den Dialog <guilabel +>Kurzbefehle festlegen</guilabel +> aufrufen. Hier können Sie Tasten festlegen, mit denen Lautstärken erhöht oder erniedrigt, oder Kanäle stummgeschaltet werden. Diese Tastenkombinationen sind global und funktionieren auch, wenn &kmix; minimiert oder angedockt ist.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><guimenuitem +>Kanäle</guimenuitem +></term> +<listitem +><para +>Zeigt einen Dialog, in dem für jeden der Bereiche (<guilabel +>Ausgang</guilabel +>, <guilabel +>Eingang</guilabel +> und <guilabel +>Schalter</guilabel +>) festgelegt werden kann, welche Kanäle angezeigt werden sollen.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><guimenuitem +>Menüleiste anzeigen/ausblenden</guimenuitem +></term> +<listitem +><para +>Diese Option ist nicht abhängig von den Geräten, sondern betrifft das Fenster von &kmix;. Hiermit kann die Menüleiste angezeigt bzw. ausgeblendet werden. Dies geht auch mit dem üblichen Kurzbefehl (normalerweise <keycombo action="simul" +>&Ctrl;<keycap +>M</keycap +></keycombo +>).</para +></listitem> +</varlistentry> + +</variablelist> +</sect1> + +<sect1 id="switches"> +<title +>Schalter und Mehrfachauswahlen</title> + +<para +>Die Regler im Abschnitt <guilabel +>Schalter</guilabel +> bestehen aus einer LED und einer kurzen Beschreibung der Funktion. Der Abschnitt <guilabel +>Schalter</guilabel +> kann zudem Mehrfachauswahlen enthalten. Beachten Sie, dass diese Einstellungen oft sehr speziell sind und eigentlich keiner Anpassung durch den durchschnittlichen Benutzer bedürfen. Das Kontextmenü enthält die Einträge <guimenuitem +>Kanäle</guimenuitem +> und <guimenuitem +>Menüleiste anzeigen/ausblenden</guimenuitem +>, die bereits beschrieben wurden. <screenshot +><screeninfo +>Schalter und Mehrfachauswahlen (Abschnitt <guilabel +>Schalter</guilabel +>)</screeninfo +><mediaobject +><imageobject +><imagedata fileref="kmix-channel-switches.png" format="PNG"/></imageobject +><textobject +><phrase +>Schalter und Mehrfachauswahlen (Abschnitt <guilabel +>Schalter</guilabel +>)</phrase +></textobject +></mediaobject +></screenshot +> Rote LEDs sind mit Aufnahmen verbunden; gelbe LEDs steuern besondere Fähigkeiten der Soundkarte. Das obige Bildschirmphoto zeigt von links nach rechts eine unbeleuchtete LDE für <guilabel +>IEC958 Output</guilabel +> (gelb = besonderer Regler), eine beleuchtete LED für <guilabel +>Mix</guilabel +> (rot = Aufnahme), eine unbeleuchtete Aufnahme-LED, eine beleuchtete besondere LED und ein Auswahlfeld (<guilabel +>PCM Out Path & Mute</guilabel +>). Wenn Sie sich über die Bedeutung eines Reglers nicht sicher sind, fragen Sie den Hersteller Ihres Soundkartentreibers (unter &Linux; ist dies meistens <ulink url="http://www.alsa-project.org" +>ALSA</ulink +>). </para> + +</sect1> + +<sect1 id="panning-slider"> +<title +>Verteilung der Lautstärke auf links und rechts</title> + +<para +>Mit diesem Regler können Sie die Verteilung der Lautstärke zwischen linkem und rechtem Lautsprecher einstellen. Dieser Regler betrifft alle Geräte gleichermaßen. Standard ist die Mittelstellung. Wenn Sie den Regler nach links ziehen, vermindert dies die Lautstärke des rechten Lautsprechers und umgekehrt. Natürlich kann diese Zuordnung vertauscht sein, falls Ihre Lautsprecher falsch herum angeschlossen sind.</para> +<para +>Für Surroundsysteme sei folgende Tatsache erwähnt: Meist regelt der <guilabel +>Master</guilabel +>-Regler nur die vorderen Lautsprecher. Das ist eine Beschränkung Ihres Soundkartentreiber.</para +> +<para +>Wenn Ihre Soundkarte keinen <guilabel +>Master</guilabel +>-Regler besitzt, wählt &kmix; ein anderes Gerät. Meistens ist dies <guilabel +>Wave</guilabel +> oder <guilabel +>PCM</guilabel +>.</para> + +</sect1> + +<sect1 id="configuration-options"> +<title +>Einstellungen</title> + +<para +>Über das Menü <menuchoice +><guimenu +>Einstellungen</guimenu +><guimenuitem +>&kmix; einrichten ...</guimenuitem +></menuchoice +> können diverse Einstellungen vorgenommen werden:</para> + +<variablelist> +<varlistentry> +<term +><guilabel +>An Kontrollleiste andocken</guilabel +></term> +<listitem +><para +>Wenn diese Option angewählt ist, zeigt &kmix; ein kleines Symbol in der Kontrollleiste an, wenn das Fenster von &kmix; geschlossen wird. Ansonsten wird &kmix; beim Schließen des Fensters beendet. Achtung: Nach dem Beenden von &kmix; funktionieren auch die Tastaturkurzbefehle nicht mehr.</para +></listitem> +</varlistentry> +<varlistentry> +<term +><guilabel +>Lautstärkeregler der Kontrollleiste aktivieren</guilabel +></term> +<listitem +><para +>Ist diese Einstellung aktiviert, kann durch normales Klicken auf das &kmix;-Symbol der primäre Lautstärkeregler bedient werden. Dieser Regler wird derzeit von &kmix; automatisch festgelegt. Ansonsten öffnet ein Klick das Fenster von &kmix;.</para +></listitem> +</varlistentry> +<varlistentry> +<term +><guilabel +>Skalenstriche anzeigen</guilabel +></term> +<listitem +><para +>Kurze Striche anzeigen, um die Position der Regler zu markieren.</para +></listitem> +</varlistentry> +<varlistentry> +<term +><guilabel +>Bezeichnungen anzeigen</guilabel +></term> +<listitem +><para +>Zeigt die Bezeichnungen der Lautstärkeregler an. Auch wenn Sie dieses Ankreuzfeld nicht markiert haben, wird die Bezeichnung angezeigt, wenn Sie mit dem Mauszeiger über dem Symbol verweilen.</para +></listitem> +</varlistentry> +<varlistentry> +<term +><guilabel +>Lautstärkeeinstellungen beim Anmelden laden</guilabel +></term> +<listitem +><para +>Ist diese Einstellung aktiviert, stellt &kde; die Lautstärkeeinstellungen wieder her, die beim letzten Beenden von &kde; gespeichert wurden. Wenn Ihr System dies bereits tut, werden Sie diese Option wahrscheinlich nicht benötigen. Bei einem Rechner mit mehreren Benutzern werden Sie diese Option aber verwenden.</para +></listitem> +</varlistentry> +<varlistentry> +<term +><guilabel +>Lautstärkewerte:</guilabel +></term> +<listitem +><para +>Wählen Sie, ob und wie die Lautstärke angezeigt wird: <guilabel +>Keine</guilabel +>, <guilabel +>Absolut</guilabel +> oder <guilabel +>Relativ</guilabel +>.</para +></listitem> +</varlistentry> +<varlistentry> +<term +><guilabel +>Regler-Ausrichtung:</guilabel +></term> +<listitem +><para +>Mit dieser Einstellung können Sie den Inhalt des &kmix;-Hauptfensters um 90 Grad drehen/ Schieberegler, Texte und vieles mehr wird gedreht. Davon ausgeschlossen sind ⪚ die Menüleiste, die Mixerauswahl (wenn vorhanden), der Rechts-Links-Abgleich und die Mehrfachauswahlen.</para +></listitem> +</varlistentry> +</variablelist> + +</sect1> + + +</chapter> + + +<chapter id="working-with-kmixapplet"> +<title +>Das &kmix;-Miniprogramm</title> + +<para +>Das Miniprogramm von &kmix; ist eine alternative Schnittstelle zu &kmix;. Es kann der &kde;-Kontrollleiste durch Auswahl von <guimenuitem +>Zur Kontrollleiste hinzufügen ...</guimenuitem +> im <guimenu +>Kontrollleistenmenü</guimenu +> oder über das Kontextmenü hinzugefügt werden. Wählen Sie <guilabel +>Sound-Mixer</guilabel +> und klicken Sie auf <guibutton +>Hinzufügen</guibutton +>, oder doppelklicken Sie <guilabel +>Sound-Mixer</guilabel +>. </para> + +<para +>Sie können mit dem Miniprogramm genauso wie mit dem <link linkend="working-with-kmix" +>Hauptfenster</link +> inklusive des Kontextmenüs arbeiten. Allerdings ergeben sich aufgrund des beschränkten Platzes ein paar Änderungen: <simplelist> +<member +>Es ist kein Hauptmenü verfügbar.</member> +<member +>Wenn Sie mehrere Soundkarten eingebaut haben, können Sie lediglich beim ersten Starten die zu steuernde Karte auswählen.</member> +<member +>Es gibt kein Symbol im Systemabschnitt der Kontrollleiste. Wenn Sie dieses Symbol brauchen, müssen Sie zusätzlich &kmix; über <menuchoice +><guimenu +>K-Menü</guimenu +><guisubmenu +>Multimedia</guisubmenu +><guimenuitem +>&kmix;</guimenuitem +></menuchoice +> starten.</member> +<member +>Die Symbole sind nur verfügbar, wenn die Kontrollleiste groß genug ist.</member> +<member +>Es sind keine Bezeichnungen für die Regler verfügbar.</member> +<member +>Die Einstellungen werden über das Kontrollleistenmenü vorgenommen. Es können sowohl die Farben, als auch die Richtung der Regler eingestellt werden.</member> +<member +>Es gibt kein automatisches Speichern der Lautstärken. Wenn Sie dies wünschen müssen Sie &kmix; aus dem K-Menü starten.</member> +</simplelist> + +</para> +</chapter> + + +<chapter id="advanced-kmix"> +<title +>Forgeschrittene Eigenschaften von &kmix;</title> + +<warning +><para +>Dieses Kapitel beschreibt Möglichkeiten in &kmix;, die eher fortgeschrittene Benutzer interessieren. Die meisten werden diese Funktionen nicht benötigen und können dies Kapitel überspringen.</para +></warning> + +<sect1 id="dcop-overview"> +<title +>Die &DCOP;-Schnittstelle</title> + +<para +>Manchmal werden spezielle Funktionen gebraucht. Dinge wie zum Beispiel, den Lautstärkeregler von einem anderen Programm aus zu steuern oder den "Master"-Regler jeden Tag um 22 Uhr stumm schalten. Für diese Funktionen hat &kmix; eine &DCOP;-Schnittstelle. In einer Konsole können Sie mit dem Kommando <guilabel +>dcop kmix</guilabel +> beginnen, die &DCOP;-Schnittstelle von &kmix; zu erforschen. Die speziellen Schnittstellen in &kmix; sind:</para> + +<variablelist> +<varlistentry> +<term +><userinput +><command +>Mixer0</command +></userinput +></term> +<listitem +><para +>Dies erlaubt Änderungen des ersten Lautstärkereglers. Es können die Lautstärken geändert, Kanäle stummgeschaltet, die Balance geändert, der Name der Regler abgefragt werden und vieles mehr. Mit <userinput +><command +>dcop kmix Mixer0</command +></userinput +> können all diese Möglichkeiten erforscht werden. Es gibt weitere Einträge wie <userinput +><command +>Mixer1</command +></userinput +>, sofern weitere Soundkarten installiert sind.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +><command +>kmix-mainwindow#1</command +></userinput +></term> +<listitem +><para +>Das Hauptfenster von &kmix; kann hiermit kontrolliert werden. Sie können es ausblenden und anzeigen, die Größe ändern, und vieles mehr. Geben Sie <userinput +><command +>dcop kmix kmix-mainwindow#1</command +></userinput +> ein, um die Möglichkeiten zu erforschen.</para +></listitem> +</varlistentry> +</variablelist> + +</sect1> + + +<sect1 id="dcop-examples"> +<title +>&DCOP;-Beispiele</title> + +<variablelist> +<varlistentry> +<term +><userinput +><command +>dcop kmix kmix-mainwindow#1 hide</command +></userinput +></term> +<listitem +><para +>Blendet das Fenster von &kmix; aus. <userinput +><command +>dcop kmix kmix-mainwindow#1 show</command +></userinput +> zeigt es wieder an.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +><command +>dcop kmix kmix-mainwindow#1 resize 1 1</command +></userinput +></term> +<listitem +><para +>Ändert die Größe des Fensters auf die kleinste mögliche Größe, so das alle Elemente gerade so in das Fenster passen.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +><command +>dcop kmix Mixer0 mixerName</command +></userinput +></term> +<listitem +><para +>Zeigt den Namen des ersten Gerätes, zum Beispiel <computeroutput +>Sound Fusion CS46xx</computeroutput +>.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +><command +>dcop kmix Mixer1 setVolume 0 10</command +></userinput +></term> +<listitem +><para +>Setzt die Lautstärke der zweiten Soundkarte, Gerät 0 auf 10%. Gerät 0 ist oft der Hauptregler, allerdings nicht immer. Wenn der erste Hauptregler der zweiten Soundkarte heruntergeregelt werden soll, verwenden Sie <userinput +><command +>dcop kmix Mixer1 setMasterVolume 0</command +></userinput +>.</para +></listitem> +</varlistentry> +</variablelist> + +<para +>Sie können diese Kommandos direkt in einer Konsole innerhalb von &kde; ausführen. Wenn Sie &DCOP;-Kommandos irgendwo anders, zum Beispiel in einem Cron-Skript ausführen wollen, müssen Sie die Umgebungsvariable <envar +>DCOPSERVER</envar +> setzen (genauso, wie in der ersten Zeile der Datei ~/.DCOPServer_hostname_:0). Zum Beispiel mit:</para> + +<programlisting +>#!/bin/sh +DCOPSERVER=`cat /home/yourhome/.DCOPserver_yourhostname_:0 | grep local` +export DCOPSERVER +dcop kmix Mixer0 setMasterVolume 0 +</programlisting> +</sect1> + +<sect1 id="tips-and-tricks"> +<title +>Tipps und Tricks</title> +<sect2> +<title +>ALSA und OSS gleichzeitig verwenden</title> +<para +>&kmix; kann unter &Linux; nur entweder ALSA oder OSS verwenden. Wenn Sie wirklich beide Treiber gleichzeitig benutzen müssen (was sehr selten vorkommt), können Sie folgendes machen: Beenden Sie &kmix; und fügen Sie die folgende Zeile in Ihre <guilabel +>kmixrc</guilabel +>-Datei in der Sektion der globalen Konfiguration ein.</para> +<programlisting +>MultiDriver=true</programlisting> +<para +>Starten Sie &kmix; erneut. Wenn Sie <menuchoice +><guimenu +>Hilfe</guimenu +><guimenuitem +>Hardware Informationen</guimenuitem +></menuchoice +> anwählen, sollten Sie "<guilabel +>Benutzte Soundtreiber: ALSA0.9 + OSS</guilabel +>" und "<guilabel +>Experimenteller Multitreibermodus aktiviert</guilabel +>" sehen.</para> + +<warning +><para +>Warnung: Wahrscheinlich werden Sie nun alle Lautstärkeregler doppelt angezeigt bekommen.</para> +<para +>Es gibt für diese Art der Konfiguration keinerlei Unterstützung.</para +></warning> +</sect2> + +</sect1> + +</chapter> + +<chapter id="credits"> +<title +>Mitwirkende und Lizenz</title> + +<para +>Hauptentwickler</para> + +<itemizedlist> +<listitem +><para +>Copyright 1996-2000 Christian Esken</para +></listitem> +<listitem +><para +>Copyright 2000-2003 Christian Esken & Stefan Schimanski</para +></listitem> +<listitem +><para +>Copyright 2003-2005 Christian Esken & Helio Chissini de Castro</para +></listitem> +</itemizedlist> + +<para +>Mitwirkende:</para> + +<itemizedlist> +<listitem +><para +>Christian Esken <email +>[email protected]</email +></para +></listitem> +<listitem +><para +>Stefan Schimanski <email +>[email protected]</email +></para +></listitem> +<listitem +><para +>Paul Kendall <email +>[email protected]</email +> - &SGI;-Portierung</para +></listitem> +<listitem +><para +>Sebestyen Zoltan <email +>[email protected]</email +> - FreeBSD-Anpassungen</para +></listitem> +<listitem +><para +>Faraut Jean-Louis <email +>[email protected]</email +> - &Solaris;-Anpassungen</para +></listitem> +<listitem +><para +>Nick Lopez <email +>[email protected]</email +> - ALSA-Portierung</para +></listitem> +<listitem +><para +>Helge Deller <email +>[email protected]</email +> - &HP;-UX-Portierung</para +></listitem> +<listitem +><para +>Lennart Augustsson <email +>[email protected]</email +> - *BSD-Anpassungen</para +></listitem> +</itemizedlist> + +<para +>Dokumentation Copyright 2000 &Matt.Johnston;&Matt.Johnston.mail;</para> + +<para +>2003 von Christian Esken <email +>[email protected]</email +> aktualisiert, um zu &kmix; V1.91 zu passen.</para> + +<para +>2005 von Christian Esken <email +>[email protected]</email +> aktualisiert, um zu &kmix; V2.2 zu passen.</para> + +<para +>7/2005 von Christian Esken <email +>[email protected]</email +> aktualisiert, um zu &kmix; V2.2 zu passen.</para> + +<para +>Basierend auf der Dokumentation von Christian Esken <email +>[email protected]</email +></para> +<para +>Übersetzung Gregor Zumstein <email +>[email protected]</email +></para +> <para +>Überarbeitung der Übersetzung Frank Schütte <email +>[email protected]</email +></para +><para +>Arnold Krille<email +>[email protected]</email +></para +> +&underFDL; &underGPL; </chapter> + +<appendix id="installation"> +<title +>Installation</title> + +<sect1 id="getting-kmix"> +<title +>Wie erhalte ich &kmix;?</title> +&install.intro.documentation; </sect1> + +<sect1 id="requirements"> +<title +>Voraussetzungen</title> + +<para +>&kmix; ist nur dann sinnvoll zu benutzen, wenn Sie eine Soundkarte in Ihrem System installiert haben. &kmix; unterstützt verschiedene Soundkarten und Sound-Treiber:</para> + +<itemizedlist> +<listitem +><para +>Alle Open-Sound-System-Plattformen. Explizit getestet sind &Linux;, FreeBSD, NetBSD und BSDI.</para +></listitem> +<listitem +><para +>Rechner mit &Solaris;.</para +></listitem> +<listitem +><para +>Rechner mit &IRIX;.</para +></listitem> +<listitem +><para +>Der ALSA-Soundkartentreiber.</para +></listitem> +<listitem +><para +>Rechner mit &HP-UX;.</para +></listitem> +</itemizedlist> + +</sect1> + +<sect1 id="compilation"> +<title +>Kompilierung und Installation</title> +&install.compile.documentation; </sect1> + +</appendix> + +</book> +<!-- +Local Variables: +mode: sgml +sgml-omittag: nil +sgml-shorttag: t +End: +--> + diff --git a/tde-i18n-de/docs/tdemultimedia/kmix/kmix-channel-playback.png b/tde-i18n-de/docs/tdemultimedia/kmix/kmix-channel-playback.png Binary files differnew file mode 100644 index 00000000000..8ab547bdd7e --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/kmix/kmix-channel-playback.png diff --git a/tde-i18n-de/docs/tdemultimedia/kmix/kmix-channel-record.png b/tde-i18n-de/docs/tdemultimedia/kmix/kmix-channel-record.png Binary files differnew file mode 100644 index 00000000000..16a456ca90c --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/kmix/kmix-channel-record.png diff --git a/tde-i18n-de/docs/tdemultimedia/kmix/kmix-window.png b/tde-i18n-de/docs/tdemultimedia/kmix/kmix-window.png Binary files differnew file mode 100644 index 00000000000..1c10d490b20 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/kmix/kmix-window.png diff --git a/tde-i18n-de/docs/tdemultimedia/krec/Makefile.am b/tde-i18n-de/docs/tdemultimedia/krec/Makefile.am new file mode 100644 index 00000000000..df6332b8050 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/krec/Makefile.am @@ -0,0 +1,4 @@ +KDE_LANG = de +SUBDIRS = $(AUTODIRS) +KDE_DOCS = AUTO +KDE_MANS = AUTO diff --git a/tde-i18n-de/docs/tdemultimedia/krec/Makefile.in b/tde-i18n-de/docs/tdemultimedia/krec/Makefile.in new file mode 100644 index 00000000000..2605d46c8b7 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/krec/Makefile.in @@ -0,0 +1,635 @@ +# Makefile.in generated by automake 1.10.1 from Makefile.am. +# KDE tags expanded automatically by am_edit - $Revision: 483858 $ +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = docs/tdemultimedia/krec +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +#>- RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ +#>- html-recursive info-recursive install-data-recursive \ +#>- install-dvi-recursive install-exec-recursive \ +#>- install-html-recursive install-info-recursive \ +#>- install-pdf-recursive install-ps-recursive install-recursive \ +#>- installcheck-recursive installdirs-recursive pdf-recursive \ +#>- ps-recursive uninstall-recursive +#>+ 7 +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive nmcheck-recursive bcheck-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +#>- DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +#>+ 1 +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) $(KDE_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +ARTSCCONFIG = @ARTSCCONFIG@ +AUTOCONF = @AUTOCONF@ +AUTODIRS = @AUTODIRS@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CONF_FILES = @CONF_FILES@ +CYGPATH_W = @CYGPATH_W@ +DCOPIDL = @DCOPIDL@ +DCOPIDL2CPP = @DCOPIDL2CPP@ +DCOPIDLNG = @DCOPIDLNG@ +DCOP_DEPENDENCIES = @DCOP_DEPENDENCIES@ +DEFS = @DEFS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +GMSGFMT = @GMSGFMT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KCFG_DEPENDENCIES = @KCFG_DEPENDENCIES@ +KCONFIG_COMPILER = @KCONFIG_COMPILER@ +KDECONFIG = @KDECONFIG@ +KDE_EXTRA_RPATH = @KDE_EXTRA_RPATH@ +KDE_RPATH = @KDE_RPATH@ +KDE_XSL_STYLESHEET = @KDE_XSL_STYLESHEET@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MAKEKDEWIDGETS = @MAKEKDEWIDGETS@ +MCOPIDL = @MCOPIDL@ +MEINPROC = @MEINPROC@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TOPSUBDIRS = @TOPSUBDIRS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XMLLINT = @XMLLINT@ +X_RPATH = @X_RPATH@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +am__leading_dot = @am__leading_dot@ +am__tar = @am__tar@ +am__untar = @am__untar@ +#>- bindir = @bindir@ +#>+ 2 +DEPDIR = .deps +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +kde_appsdir = @kde_appsdir@ +kde_bindir = @kde_bindir@ +kde_confdir = @kde_confdir@ +kde_datadir = @kde_datadir@ +kde_htmldir = @kde_htmldir@ +kde_icondir = @kde_icondir@ +kde_kcfgdir = @kde_kcfgdir@ +kde_libs_htmldir = @kde_libs_htmldir@ +kde_libs_prefix = @kde_libs_prefix@ +kde_locale = @kde_locale@ +kde_mimedir = @kde_mimedir@ +kde_moduledir = @kde_moduledir@ +kde_servicesdir = @kde_servicesdir@ +kde_servicetypesdir = @kde_servicetypesdir@ +kde_sounddir = @kde_sounddir@ +kde_styledir = @kde_styledir@ +kde_templatesdir = @kde_templatesdir@ +kde_wallpaperdir = @kde_wallpaperdir@ +kde_widgetdir = @kde_widgetdir@ +tdeinitdir = @tdeinitdir@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +xdg_appsdir = @xdg_appsdir@ +xdg_directorydir = @xdg_directorydir@ +xdg_menudir = @xdg_menudir@ +KDE_LANG = de +#>- SUBDIRS = $(AUTODIRS) +#>+ 1 +SUBDIRS =. +KDE_DOCS = AUTO +KDE_MANS = AUTO +#>- all: all-recursive +#>+ 1 +all: docs-am all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) +#>- @for dep in $?; do \ +#>- case '$(am__configure_deps)' in \ +#>- *$$dep*) \ +#>- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ +#>- && exit 0; \ +#>- exit 1;; \ +#>- esac; \ +#>- done; \ +#>- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdemultimedia/krec/Makefile'; \ +#>- cd $(top_srcdir) && \ +#>- $(AUTOMAKE) --gnu docs/tdemultimedia/krec/Makefile +#>+ 12 + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdemultimedia/krec/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/tdemultimedia/krec/Makefile + cd $(top_srcdir) && perl ../scripts/admin/am_edit -p../scripts/admin docs/tdemultimedia/krec/Makefile.in +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +#>- distdir: $(DISTFILES) +#>+ 1 +distdir: distdir-nls $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +#>- uninstall: uninstall-recursive +#>+ 1 +uninstall: uninstall-docs uninstall-nls uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +#>- clean: clean-recursive +#>+ 1 +clean: kde-rpo-clean clean-recursive + +#>- clean-am: clean-generic mostlyclean-am +#>+ 1 +clean-am: clean-docs clean-bcheck clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +#>- install-data-am: +#>+ 1 +install-data-am: install-docs install-nls + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic ctags \ + ctags-recursive distclean distclean-generic distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ + tags-recursive uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: + +#>+ 2 +KDE_DIST=krec-keramik.png index.docbook krec-configuration.png krec-hicolor.png index.cache.bz2 Makefile.in krec-new_file_properties.png Makefile.am + +#>+ 24 +index.cache.bz2: $(srcdir)/index.docbook $(KDE_XSL_STYLESHEET) krec-hicolor.png krec-configuration.png index.docbook krec-keramik.png krec-new_file_properties.png + @if test -n "$(MEINPROC)"; then echo $(MEINPROC) --check --cache index.cache.bz2 $(srcdir)/index.docbook; $(MEINPROC) --check --cache index.cache.bz2 $(srcdir)/index.docbook; fi + +docs-am: index.cache.bz2 + +install-docs: docs-am install-nls + $(mkinstalldirs) $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/krec + @if test -f index.cache.bz2; then \ + echo $(INSTALL_DATA) index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/krec/; \ + $(INSTALL_DATA) index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/krec/; \ + elif test -f $(srcdir)/index.cache.bz2; then \ + echo $(INSTALL_DATA) $(srcdir)/index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/krec/; \ + $(INSTALL_DATA) $(srcdir)/index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/krec/; \ + fi + -rm -f $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/krec/common + $(LN_S) $(kde_libs_htmldir)/$(KDE_LANG)/common $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/krec/common + +uninstall-docs: + -rm -rf $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/krec + +clean-docs: + -rm -f index.cache.bz2 + + +#>+ 13 +install-nls: + $(mkinstalldirs) $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/krec + @for base in krec-hicolor.png krec-configuration.png index.docbook krec-keramik.png krec-new_file_properties.png ; do \ + echo $(INSTALL_DATA) $$base $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/krec/$$base ;\ + $(INSTALL_DATA) $(srcdir)/$$base $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/krec/$$base ;\ + done + +uninstall-nls: + for base in krec-hicolor.png krec-configuration.png index.docbook krec-keramik.png krec-new_file_properties.png ; do \ + rm -f $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/krec/$$base ;\ + done + + +#>+ 5 +distdir-nls: + for file in krec-hicolor.png krec-configuration.png index.docbook krec-keramik.png krec-new_file_properties.png ; do \ + cp $(srcdir)/$$file $(distdir); \ + done + +#>+ 15 +force-reedit: + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdemultimedia/krec/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/tdemultimedia/krec/Makefile + cd $(top_srcdir) && perl ../scripts/admin/am_edit -p../scripts/admin docs/tdemultimedia/krec/Makefile.in + + +#>+ 21 +clean-bcheck: + rm -f *.bchecktest.cc *.bchecktest.cc.class a.out + +bcheck: bcheck-recursive + +bcheck-am: + @for i in ; do \ + if test $(srcdir)/$$i -nt $$i.bchecktest.cc; then \ + echo "int main() {return 0;}" > $$i.bchecktest.cc ; \ + echo "#include \"$$i\"" >> $$i.bchecktest.cc ; \ + echo "$$i"; \ + if ! $(CXX) $(DEFS) -I. -I$(srcdir) -I$(top_builddir) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(KDE_CXXFLAGS) --dump-class-hierarchy -c $$i.bchecktest.cc; then \ + rm -f $$i.bchecktest.cc; exit 1; \ + fi ; \ + echo "" >> $$i.bchecktest.cc.class; \ + perl $(top_srcdir)/admin/bcheck.pl $$i.bchecktest.cc.class || { rm -f $$i.bchecktest.cc; exit 1; }; \ + rm -f a.out; \ + fi ; \ + done + + +#>+ 3 +final: + $(MAKE) all-am + +#>+ 3 +final-install: + $(MAKE) install-am + +#>+ 3 +no-final: + $(MAKE) all-am + +#>+ 3 +no-final-install: + $(MAKE) install-am + +#>+ 3 +kde-rpo-clean: + -rm -f *.rpo + +#>+ 3 +nmcheck: +nmcheck-am: nmcheck diff --git a/tde-i18n-de/docs/tdemultimedia/krec/index.cache.bz2 b/tde-i18n-de/docs/tdemultimedia/krec/index.cache.bz2 Binary files differnew file mode 100644 index 00000000000..10d07fb9576 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/krec/index.cache.bz2 diff --git a/tde-i18n-de/docs/tdemultimedia/krec/index.docbook b/tde-i18n-de/docs/tdemultimedia/krec/index.docbook new file mode 100644 index 00000000000..ef540c81b12 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/krec/index.docbook @@ -0,0 +1,669 @@ +<?xml version="1.0" ?> +<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [ + <!ENTITY kappname "&krec;"> + <!ENTITY package "tdemultimedia"> + <!ENTITY % addindex "IGNORE"> + <!ENTITY % German "INCLUDE"> +]> + +<book lang="&language;"> +<bookinfo> +<title +>Das Handbuch zu &krec;</title> + +<authorgroup> +<author +><firstname +>Arnold</firstname +> <surname +>Krille</surname +> <affiliation +> <address +><email +>[email protected]</email +></address> +</affiliation> +</author> +</authorgroup> + +<othercredit role="translator" +> <firstname +>Frank</firstname +><surname +>Schütte</surname +> <affiliation +><address +><email +>[email protected]</email +></address +> </affiliation +><contrib +>Deutsche Übersetzung</contrib +></othercredit +><othercredit role="translator" +><firstname +>Arnold</firstname +><surname +>Krille</surname +><affiliation +><address +><email +>[email protected]</email +></address +></affiliation +><contrib +>Deutsche Übersetzung 0.5.1</contrib +></othercredit +> + +<copyright> +<year +>2002</year> +<year +>2003</year> +<year +>2004</year> +<holder +>Arnold Krille</holder> +</copyright> +<legalnotice +>&FDLNotice;</legalnotice> + +<date +>2004-03-01</date> +<releaseinfo +>0.5.1</releaseinfo> + +<!-- + vim: tw=80 et sw=2 ts=2 +--> +<abstract> +<para +>&krec; ist ein Aufnahmeprogramm für &arts;. Es kann verwendet werden, um jeden möglichen Klang, der aus dem Computer heraus oder herein kommt, aufzunehmen. Es verfügt über einige dynamische Effekte sowie eine Möglichkeit der Wiedergabe von aufgenommenen Stücken. </para> +</abstract> + +<keywordset> +<keyword +>KDE</keyword> +<keyword +>tdemultimedia</keyword> +<keyword +>KRec</keyword> +<keyword +>aRts</keyword> +<keyword +>Aufnahme</keyword> +<keyword +>Oberfläche</keyword> +</keywordset> + +</bookinfo> + +<!-- + TODO: (ordered by priority) + - Explained: + - Mainwidget + - more on exports + + Quality settings + + possible more examples for the compressors + + Configuration + + Recording from line-in +--> + +<chapter id="introduction"> +<title +>Einführung</title> + +<sect1 id="why-krec"> +<title +>Warum &krec; programmiert wurde</title> + +<para +>Nach einiger Zeit der Arbeit mit &arts; stellte ich fest, das es außer dem Befehlszeilenprogramm <command +>artsrec</command +> keine Oberfläche zur Aufnahme gibt. Ich sollte jedoch für ein paar Freunde ein Hörspiel aufnehmen, mischen und mastern und ich wollte dafür &Linux; verwenden. Darum fing ich an &krec; zu schreiben. </para> +</sect1> + +<sect1 id="what-krec-does"> +<title +>Was &krec; kann</title> + +<para +>&krec; ist ein einfaches Programm. Es stellt eine Verbindung zum &arts;-Server her und leitet die empfangenen Daten in Dateien um. Diese Dateien sind in einem speziellen &krec;-Format, aber die Möglichkeit des wav-, ogg- oder mp3-Exports ist eingebaut. </para> +<para +>Aber &krec; hat noch viel mehr Möglichkeiten. Zum Beispiel können mehrfache Aufnahmen in der selben Datei gemacht werden und sogar übereinander gelegt werden. </para> +</sect1> + +<sect1 id="bugs_and_info"> +<title +>Mehr Informationen bekommen</title> +&reporting.bugs; &updating.documentation; </sect1> + +</chapter> + +<chapter id="first_glance"> +<title +>Ein erster Blick auf &krec;</title> + +<!--<para> +Let`s take a first glance at &krec; right after startup and I will try to give +some explainations what the different items are. +</para +>--> + +<screenshot> +<screeninfo +>Bildschirmfoto von &krec;</screeninfo> +<mediaobject> +<imageobject> +<imagedata fileref="krec-keramik.png" format="PNG"/> +</imageobject> +<textobject> +<phrase +>Bildschirmfoto von &krec; direkt nach dem Start.</phrase> +</textobject> +</mediaobject> +</screenshot> + +<sect1 id="first_glance_items"> +<title +>Das Hauptfenster von &krec; im Detail</title> + +<itemizedlist> +<listitem +><para +>Oben befinden sich eine <emphasis +>Menüleiste</emphasis +> und zwei <emphasis +>Werkzeugleisten</emphasis +>. Die erste der Leisten enthält einige nützliche Einträge aus dem <guimenu +>Datei</guimenu +>menü, die zweite enthält die wichtigsten Funktionen des <guimenu +>Abspielen</guimenu +>menüs.</para +></listitem> +<listitem +><para +>Die Mitte enthält die wichtigen Teile. An der linken Seite befindet sich ein VU-Meter, das die Lautstärke des derzeit aufzunehmenden oder abzuspielenden Audiosignals anzeigt. Kombiniert ist dies mit einem Lautstärkeregler, um direkt den Pegel zu beeinflussen.</para +></listitem> +<listitem +><para +>Der Hauptteil zeigt die aktuelle Datei und besteht aus vier Teilen. Oben wird der Name der Datei angezeigt, darunter die Aufnahmesegmente in chronologischer Reihe und entsprechend skalierter Länge. Darunter befindet sich die Zeitleiste, wo die aktuelle Position angezeigt wird und durch klicken auch geändert werden kann. Als viertes sind unten zwei Elemente, die die aktuelle Position und die Länge der gesamten Datei in einem einstellbaren Format anzeigen.</para +></listitem> +<listitem +><para +>Unten über das gesamte Fenster verteilt befindet sich noch eine Werkzeugleiste, die den Kompressor enthält, um die Dynamik der Aufnahme zu bearbeiten, und eine Statuszeile, die alle möglichen Nachrichten anzeigt.</para +></listitem> +</itemizedlist> + +<para +>Siehe <xref linkend="krec_explained"/> für weitere Informationen. </para> + +</sect1> +</chapter> + +<chapter id="recording_howtos"> +<title +>Wie nehme ich auf?</title> + +<para +>Dieses Kapitel enthält einige Schritt-für-Schritt Anleitungen, die Ihnen den Weg zu guten Aufnahmen mit &krec; ebnen sollen. </para> + +<sect1 id="recording_from_music"> +<title +>Interne Musik aufnehmen</title> + +<orderedlist> +<listitem +><para +>Der erste Schritt ist eine Aufnahme aus Ihrem beliebtesten &kde;-Medienspieler. Also starten Sie bitte &noatun;, JuK oder &kaboodle;. Es könnten auch andere Abspieler sein, allerdings müssen diese &arts; für die Ausgabe unterstützen, sonst wird das Aufnehmen etwas schwieriger. Also springen Sie bitte über Ihren Schatten und wählen Sie einen Titel, der in einem dieser drei Abspieler laufen soll. Alle drei werden übrigens bei tdemultimedia mitgeliefert, wo auch &krec; enthalten ist. </para +></listitem> +<listitem +><para +>In &krec; wählen Sie nun den <guimenuitem +>Audio-Manager</guimenuitem +> aus dem Menü <guimenu +>Extras</guimenu +>. Dort sehen Sie nun mindestens eine Zeile mit &krec;::In und eine Zeile mit &krec;::Out. Die zweite Spalte zeigt, was der Eintrag für ein Typ ist, entweder <emphasis +>Wiedergabe</emphasis +> oder <emphasis +>Aufnahme</emphasis +>. Die letzte Spalte gibt an, wo der Sound für diesen Eintrag hin geht oder herkommt. Derzeit ist (sollte?) der &krec;::In mit <emphasis +>in_soundcard</emphasis +> verbunden, was den Eingang Ihrer Soundkarte darstellt. Da die Aufnahme aber von einem Wiedergabeprogramm erfolgen soll und dieses nach <emphasis +>out_soundcard</emphasis +> ausgibt, klicken wir auf &krec;::In, um es auf eine andere Quelle um zu schalten. Wählen Sie <emphasis +>out_soundcard</emphasis +> in dem nun erscheinenden Fenster und klicken Sie <guibutton +>Ok</guibutton +>. Um mehr über den Audio-Manager zu erfahren sehen sie bitte in <xref linkend="audio_manager"/> nach. </para +></listitem> +<listitem +><para +>Nun sollte das VU-Meter in &krec; im Takt der Musik, die Sie hören, auf und ab wackeln. Wenn Sie nichts hören, sollte das VU-Meter nicht ausschlagen. </para +></listitem> +<listitem +><para +>Öffnen Sie nun eine neue Datei entweder indem Sie das erste Symbol der Werkzeugleiste klicken oder indem Sie <guimenuitem +>Neu</guimenuitem +> aus dem Menü <guimenu +>Datei</guimenu +> wählen. Bestätigen Sie die Qualitätseinstellungen für diesen ersten Versuch oder lesen Sie <xref linkend="quality"/> um mehr darüber zu erfahren. </para +></listitem> +<listitem +><para +>Wählen Sie <guimenuitem +>Aufnahme</guimenuitem +> aus dem Abspielen <guimenu +>Abspielen</guimenu +> oder drücken Sie die <keycap +>R</keycap +>-Taste. Wenn die Aufnahme fertig ist, wählen Sie <guimenuitem +>Stopp</guimenuitem +> aus dem selben Menü oder nutzen Sie die <keycap +>S</keycap +>-Taste. </para +></listitem> +<listitem +><para +>Das Speichern funktioniert auf die gewohnte Weise, siehe <xref linkend="exporting"/>, wenn Sie sich für die Exportfunktionen interessieren.</para +></listitem> +</orderedlist> + +<para +>Das war es schon! Nun können Sie die Aufnahme nocheinmal anhören oder Exportieren, vergessen Sie aber nicht, zum Anfang der Aufnahme zurück zu gehen. </para> + +</sect1> + +<sect1 id="recording_from_line_in"> +<title +>Aufnahmen vom Line-In oder dem Mikrofoneingang</title> + +<para +>Das Aufnehmen von Quellen außerhalb des PC's ist ein bisschen komplizierter und betrifft mehr Programme und Geräte. Für das weitere Vorgehen wird angenommen, dass die Hardware korrekt installiert ist, die Treiber so arbeiten, wie sie sollen und dass Sie mit Hilfe von &kmix; in der Lage sind, die Gerätelautstärken zu kontrollieren. In &kmix; können auch Kanäle zum Aufnehmen ausgewählt werden, was bedeutet, dass deren Signal an den Analog-Digital-Konverter (kurz DAC) gesendet wird und dann vom Treiber ausgelesen werden kann. Das funktioniert leider bei allen Soundkarten ein wenig anders, so dass Sie wohl nicht am Probieren und Experimentieren vorbei kommen ... </para> +<para +>Die zweite wichtige Grundlage ist, dass &arts; im Fullduplexmodus laufen muss. Das bedeutet, dass &arts; gleichzeitig von der Soundkarte liest und auf sie schreibt. Starten Sie also &kcontrol; und ändern Sie gegebenenfalls die Einstellungen des Soundsystems (oder Sie drücken Alt+F2 und geben <command +>kcmshell arts</command +> ein). Stellen Sie auf der zweiten Registerkarte sicher, dass das Häkchen bei Fullduplex aktiviert ist. Drücken des <guibutton +>Ok</guibutton +>-Buttons startet &arts; mit den neuen Einstellungen neu, Sie müssen nun auch &krec; neu starten. </para> +<para +>Nach diesen Vorbereitungen sollte das VU-Meter (siehe <xref linkend="vu-meter"/>) entsprechend des Signals, das Sie Aufnehmen wollen und in &kmix; ausgewählt haben, flackern. Nun den Pegel anzupassen ist entscheidend für die Qualität der Aufnahmen. Wenn die Verstärkung innerhalb der Soundkarte zu groß ist, entstehen digitale Verzerrungen, da der <glossterm +>ADAC</glossterm +> nur Werte zwischen einem Minimum und einem Maximum verarbeiten kann und ein Signal, das zu laut ist, wird digital abgeschnitten, was die Aufnahme ruiniert. Auf der anderen Seite aber kommt zu viel Rauschen mit in die Aufnahme, wenn die Lautstärke zu niedrig ist. Sie müssen so also einen Mittelweg wählen, so dass das Signal nicht zu laut ist und verzerrt wird, aber auch nicht zu leise ist, dass es im Rauschen der Geräte verloren geht. Meistens ist es von Vorteil, etwas Luft nach oben zu lassen. </para> +<para +>Nun kann der Pegel in &krec; ein weiteres Mal angepasst werden, was dann eine Softwareverstärkung ist. Hier ist es angebracht, den Kompressor zum Ausgleichen der Unterschiede zwischen ruhigen und lauteren Passagen zu verringern. Mehr Informationen können in <xref linkend="compressor"/> gefunden werden. </para> +<para +>Die verbleibenden Schritte sind die selben, wie in <xref linkend="recording_from_music"/> von Schritt vier an. Wenn Sie mit dem betreffenden Kapitel begonnen haben, sollten Sie den Rest also schon können. </para> + +</sect1> +</chapter> + +<chapter id="krec_explained"> +<title +>&krec; erklärt</title> + +<para +>Dieses Kapitel beschreibt einige Teile und Funktionen von &krec; im Detail und gibt einige Tipps zur Benutzung. Die Einträge sind im englischen Original alphabetisch (also in der Übersetzung zufällig) sortiert, nicht nach Wichtigkeit. </para> + +<sect1 id="audio_manager"> +<title +>Der Audio-Manager</title> +<para +>Der Audio-Manager wird benötigt um die Ausgänge verschiedener Programme mit existierenden oder neuen Bussen zu verbinden. Ein Bus ist eine Art virtueller Signalverteiler. Jeder Wiedergabe- und Aufnahmeeintrag kann mit genau einem Bus verbunden werden, jedoch können auf einem Bus mehrere Programme liegen. Ein Beispiel: Die Ausgabe von &noatun; kann auf den Hauptausgangsbus <emphasis +>oder</emphasis +> jeden anderen Bus gelegt sein. Aber mehrere &noatun;s können alle auf den Hauptausgang gelegt sein. </para> + +<sect2 id="audio_manager_mw"> +<title +>Das Hauptfenster des Audio-Managers</title> +<para +>Es enthält drei Spalten: </para> +<orderedlist> +<listitem +><para +>Der Name des Eintrags, der da Klänge von sich gibt oder aufnimmt.</para +></listitem> +<listitem +><para +>Der Typ des Eintrags, entweder <emphasis +>Wiedergabe</emphasis +> oder <emphasis +>Aufnahme</emphasis +>.</para +></listitem> +<listitem +><para +>Der Bus, an den der Eintrag angeschlossen ist.</para +></listitem> +</orderedlist> +<para +>Klicken auf einen Eintrag öffnet den Busdialog für diesen Eintrag. </para> +</sect2> +<sect2 id="audio_manager_dialog"> +<title +>Der Busdialog</title> +<para +>Der Hauptteil zeigt alle derzeit existierenden Busse. Wählen Sie einen davon um Audiodaten auf ihn zu schicken oder von ihm zu bekommen. Unten können Sie neue Busse erstellen um diese dann für Verbindungen zu nutzen. </para> +<tip +><para +>Um von einem &arts;-fähigen Wiedergabeprogramm aufzunehmen und gleichzeitig zu hören, was aufgenommen wird, erstellen Sie einen neuen Bus (zum Beispiel <emphasis +>Test</emphasis +>), verbinden das Wiedergabeprogramm mit diesem Bus (nun werden Sie vermutlich nichts mehr hören), verbinden des &krec;::In mit dem neuen Bus und schalten <guimenuitem +>Durchspielen</guimenuitem +> ein. </para +></tip> +</sect2> + +</sect1> + +<sect1 id="compressor"> +<title +>Der Kompressor</title> +<para +>Wenn Sie mit einem Mikrofon aufnehmen, werden Sie wahrscheinlich bemerkt haben, dass die Lautstärke starken Schwankungen von sehr leise bis fast verzerrt unterworfen ist, speziell Gesang oder Sprache. Um dies auszugleichen werden Kompressoren eingesetzt. Einfach gesagt, macht der Kompressor alles, was lauter als ein eingestellter <emphasis +>Schwellenwert</emphasis +> (threshold) ist, um einen gegebenen Faktor <emphasis +>Verhältnis</emphasis +> (ratio) leiser. Beachten Sie, dass der Schwellenwert logarithmisch geregelt wird, eine mittlere Einstellung des Reglers entspricht einer ziemlich niedrigen Schwelle, aber das ist in der Anwendung ziemlich nützlich. Bemerkt sei außerdem, dass der Verhältnisregler seinen größten Wert ganz nach links gedreht hat, die ganz rechte Stellung des Potis bedeutet keine Kompression. Da dieser Vorgang die Lautstärke des Signals herabsenkt, gibt es einen <emphasis +>Ausgabe</emphasis +>-Regler, um das Signal wieder lauter zu machen. <emphasis +>Anstieg</emphasis +> und <emphasis +>Abfall</emphasis +> regeln die Zeit, nach der der Kompressor reagiert (die Zeit, nachdem das Signal den Schwellenwert überschreitet) und die Zeit, die der Kompressor noch arbeitet nachdem das Signal wieder unter dem Schwellenwert ist. </para> +<tip +><para +>Man kann einen Test durchführen, indem man mit <guimenuitem +>Durchspielen</guimenuitem +> in das Mikrofon spricht. Die Unterschiede sind klar zu hören.</para +></tip> +<sect2 id="compressor_tips"> +<title +>Tipps zum Umgang mit dem Kompressor</title> +<para +>Dies sind <emphasis +>wirklich</emphasis +> nur Tipps. Am Ende zählt nur, wie es klingt. Wenn es also so klingt, wie Sie sich das vorstellen, ist es wohl die richtige Einstellung. Und zögern Sie nicht, ein wenig zu experimentieren. </para> +<glosslist> +<glossentry +><glossterm +>Normale Sprache</glossterm +><glossdef +><para +>Eine Stimme in Radio oder Fernsehen ist meist sehr heftig komprimiert, denn das Problem bei Sprache ist, dass zwar vielleicht der Pegel am Anfang des Satzes gut ist, aber dann nicht am Ende. Zusätzlich sind die Wortenden meist leiser als die Anfänge der Wörter. Das macht es für die meisten Anwendungen unmöglich eine unkomprimierte Stimme zu verwenden. Beispieleinstellungen: Kurzer Anstieg, mittlere Abfallzeit, niedriger Schwellenwert, sehr großes Verhältnis.</para +></glossdef +></glossentry> +<glossentry +><glossterm +>Mastering 1: Den Pegel begrenzen (Limiter)</glossterm +><glossdef +><para +>Um lediglich Spitzen zu vermeiden ohne die gesamte Dynamik zu komprimieren, nutzen Sie einen hohen Schwellenwert, ein hohes Verhältnis, eine kurze Anstiegszeit und eine kurze bis mittleres Abfallzeit. Das schützt die Aufnahmen von einigen internen digitalen Verzerrungen und, wenn der Schwellenwert ein wenig weiter unten ist, beseitigt es seltene (und wahrscheinlich unerwünschte) Spitzen und gibt mehr Raum für das Aufnahmesignal.</para +></glossdef +></glossentry> +<glossentry +><glossterm +>Mastering 2: Wirkliche Endbearbeitung</glossterm +><glossdef +><para +>Echte Endbearbeitung von Musik ist sehr kompliziert und hängt total von Ihren Hörgewohnheiten und der zu bearbeitenden Musik ab. Meistens wird eine schnelle Anstiegszeit genutzt, damit der Pegel mit dem Bassdrumschlag reduziert wird. Auf der anderen Seite ist ein ständiges Auf- und Abpumpen des Pegel bei jedem Bassdrumschlag unerwünscht, also sollte eine längere Abfallzeit gewählt werden. Das Kompressionsverhältnis sollte nicht zu groß sein. Idealerweise würde man hinter den Kompressor noch einen Limiter einschleifen, um Verzerrungen und Übersteuern zu vermeiden.</para +></glossdef +></glossentry> +<glossentry +><glossterm +>Einzelne Instrumente</glossterm +><glossdef +><para +>Die nötigen Einstellungen variieren je nach Instrument. Während der Aufnahmen ist es ratsam, eine Limiter-Einstellung zu wählen.</para +></glossdef +></glossentry> +<glossentry +><glossterm +>Endgültiger Tipp</glossterm +><glossdef +><para +>Benutzen Sie Ihre Ohren und üben und probieren Sie. Alles ist erlaubt, wenn es gut klingt.</para +></glossdef +></glossentry> +<!--<glossentry +><glossterm +>Term</glossterm +><glossdef +><para +>Definition</para +></glossdef +></glossentry +>--> +</glosslist> +</sect2> +</sect1> + +<sect1 id="configuration"> +<title +>Konfiguration</title> +<para +>Zwei Seiten werden in der Konfiguration angezeigt. Die erste enthält allgemeine Einstellungen und wird hier erklärt. Die Zweite ist für die Standardqualitätseinstellungen und ist gleich der in <xref linkend="quality"/> beschriebenen. </para> +<screenshot> +<screeninfo +>Generelle Einstellungen</screeninfo> +<mediaobject> +<imageobject> +<imagedata fileref="krec-configuration.png" format="PNG"/> +</imageobject> +<textobject> +<phrase +>Bearbeitet generelle &krec;-Einstellungen.</phrase> +</textobject> +</mediaobject> +</screenshot> +<para +>Der erste Teil sind Einstellungen für die Anzeige von Zeiten und Positionen. Der Stil "Reine Samples" zeigt einfach die Nummer der Samples, der nächste zeigt (optional) Stunden, Minuten, Sekunden und Samples. Der dritte Stil ist gleich dem zweiten, allerdings zeigt er Frames statt der Samples. Der vierte Stil zeigt die Größe in Megabyte und Kilobyte und ist nützlich, um den verbrauchten Plattenplatz zu kontrollieren. Rechts der Anzeigestile können die Anzahl der Frames, die in einer Sekunde enthalten sind, eingestellt werden. </para> +<para +>Das Ankreuzfeld darunter lässt alle Zeitanzeigen etwas gesprächiger werden und die Einheiten mit anzeigen. </para> +<para +>Das nächste Ankreuzfeld bringt den Tipp des Tages beim Programmstart wieder. Der Knopf darunter zeigt alle Nachrichten wieder an, bei denen "Diese Meldung nicht mehr anzeigen" aktiviert war, die meisten dieser Nachrichten stammen von den Exportfunktionen. </para> +</sect1> + +<sect1 id="exporting"> +<title +>Export</title> +<blockquote> +<attribution +>Ein Anonymer &krec;-Fan</attribution> +<para +>Dein Programm ist echt gut, ich benutze es den ganzen Tag, aber es fehlt wirklich eine Exportfunktion zu wav/mp3/ogg!</para> +</blockquote> +<para +>Hier ist sie: Die definitive Exportfunktion für &krec;. Die verfügbaren Exportformate variieren nach den zur Kompilierzeit gefundenen Bibliotheken. Alle derzeit verfügbaren sind im Folgenden beschrieben. </para> +<para +>Das gewünschte Exportmodul wird per Dateiname ausgewählt. Benutzen Sie <guimenuitem +>Datei exportieren ...</guimenuitem +> aus dem Menü <guimenu +>Datei</guimenu +>, wählen Sie einen Dateinamen samt Endung für die zu exportierende Datei und das Modul wird automatisch anhand der Endung bestimmt. Die Liste der Endungen in diesem Dialog zeigt gleichzeitig, welche Module zur Verfügung stehen. </para> +<para +>Um die generelle Bedienung des Exports zu verstehen: Technisch gesehen arbeitet das Exportieren wie das Wiedergeben. Das heißt, dass erst die Position, ab der Exportiert werden soll, angewählt werden muss. Auch bedeutet das, dass Sie den Fortschritt des Exportierens daran sehen können, das sich der Positionsmarker vorwärts bewegt. Und das bedeutet, dass es in der Zukunft möglich sein wird, nur eine Auswahl zu Exportieren, genauso, wie nur eine Auswahl gespielt wird. </para> +<sect2 id="export_wave"> +<title +>Exportieren in Wavedateien (*.wav)</title> +<para +>Das einfachste Exportmodul. Es exportiert Ihre &krec;-Datei in eine .wav-Datei mit den Qualitätseinstellungen, die für die gesamte Datei gemacht worden sind. </para> +</sect2> +<sect2 id="export_mp3"> +<title +>Exportieren in MP3-Dateien (*.mp3)</title> +<para +>Wahrscheinlich die meistgewünschte Exportfunktion. Dieses Modul exportiert Ihre &krec;-Datei in eine .mp3-Datei. </para> +<important +><para +>Die Qualitätseinstellungen, die in &kcontrol; im Abschnitt <quote +>Sound & Multimedia</quote +> / <quote +>Audio-CDs</quote +> gemacht sind, werden auch hier in &krec; genutzt, da die gleichen Bibliotheken genutzt werden, wie die audiocd:/-Funktion. </para +></important> +</sect2> +<sect2 id="export_ogg"> +<title +>Exportieren in OGG-Dateien (*.ogg)</title> +<para +>Dieses Modul exportiert Ihre &krec;-Datei in eine .ogg-Datei. </para> +<important +><para +>Die Qualitätseinstellungen, die in &kcontrol; im Abschnitt <quote +>Sound & Multimedia</quote +> / <quote +>Audio-CDs</quote +> gemacht sind, werden auch hier in &krec; genutzt, da die gleichen Bibliotheken genutzt werden, wie die audiocd:/-Funktion. </para +></important> +</sect2> +</sect1> + +<sect1 id="play_thru"> +<title +>Durchspielen</title> +<para +>Für alle, die gerne hören, was sie aufnehmen, gibt es im Menü <guimenu +>Wiedergabe</guimenu +> die sehr nützliche <guimenuitem +>Durchspielen</guimenuitem +>-Option. Diese Option sollten Sie so oft wie möglich verwenden, speziell wenn ein Kompressor oder andere Effekte verwendet werden und Sie kontrollieren wollen, was genau aufgenommen wird. </para> +<caution +><para +>Stellen Sie jedoch sicher, dass Sie keine Rückkopplung erzeugen, indem Sie von <emphasis +>out_soundcard</emphasis +> aufnehmen und <guimenuitem +>Durchspielen</guimenuitem +> aktivieren. Eine solche Schleife ist zu viel für &arts; und verlangsamt Ihren Computer sehr stark! Es kann passieren, dass Sie &arts; abrupt beenden müssen ... </para +><para +>Der Grund ist, dass &arts; für jedes Sample (eigentlich für Sampleblöcke) ein komplettes Audionetz durchrechnet, und wenn ein Sample über eine Schleife aus sich selber berechnet werden soll, müsste &arts; mehr als möglich ist berechnen. </para +></caution> +</sect1> + +<sect1 id="quality"> +<title +>Qualitätseinstellungen</title> +<screenshot> +<screeninfo +>Die Einstellungen für neue Dateien</screeninfo> +<mediaobject> +<imageobject> +<imagedata fileref="krec-new_file_properties.png" format="PNG"/> +</imageobject> +<textobject> +<phrase +>Dies ist der Dialog um die Einstellungen für neue Dateien vorzunehmen.</phrase> +</textobject> +</mediaobject> +</screenshot> +<para +>Dieser Dialog wird angezeigt, wenn Sie eine neue &krec;-Datei erstellen. Hier können Sie ein paar Qualitätseinstellungen für die Aufnahmen vornehmen. Alle diese Einstellungen beeinflussen die letztendliche Größe der Datei. </para> +<para +>Die <emphasis +>Samplingrate</emphasis +> sagt dem Audiosystem, wie viele Samples während einer Sekunde aufgenommen werden sollen und wird in Hertz (Hz) beziehungsweise in Kilohertz (kHz) gemessen. Je höher die Rate ist, desto höhere Frequenzen können aufgezeichnet werden. Da mindestens zwei Samples benötigt werden, um eine <quote +>Sinus</quote +>-Welle nach zu bauen, ist die maximale Frequenz der Aufnahme halb so groß, wie die Samplingrate. Das menschliche Ohr kann Frequenzen bis zwischen 10kHz und 20kHz hören, abhängig vom Alter. Kleine Kinder kommen wahrscheinlich nahe an 20kHz, während normale Erwachsene bis etwa 15kHz hören und ältere Menschen nur etwa bis 10kHz. Aber selbst höhere Frequenzen, die eigentlich nicht mehr gehört werden können, haben Einfluss auf das, was gehört und gefühlt wird (Stichwort: Psychoakustik). </para> +<para +>Die Anzahl der Kanäle kann, in Abhängigkeit von der Aufnahmeaufgabe, frei gewählt werden. Wenn ein Monomikrofon ohne Stereoeffekte verwendet wird, reicht die Verwendung von <quote +>Mono</quote +>, ohne dass es zu Datenverlusten kommt. </para> +<para +>Im letzten Teil wird festgelegt, wie viele Bits pro Sample verwendet werden, mögliche Werte sind 8 oder 16 Bit. Je mehr Bit verwendet werden, um so mehr Stufen stehen zwischen dem minimalen und dem maximalen Signal zur Verfügung. 8 Bit sind ein Byte, so dass man auch von ein und zwei Byte Samples reden kann. </para> +<para +>Der Platz, den eine Aufnahme belegen wird, kann recht einfach errechnet werden: Es ist die Samplingrate multipliziert mit der Anzahl der Kanäle multipliziert mit der Anzahl der Bytes pro Sample multipliziert mit der Anzahl der Sekunden der Aufnahme. </para> +<example +><title +>Die Größe einer Aufnahme in CD-Qualität berechnen</title +><para +>Für eine Minute (60 Sekunden) Audioaufnahme in CD-Qualität (44100Hz, 16 Bit, Stereo) werden 44100 * 2 * 2 * 60 = 10.584.000 Bytes = 10335,938 Kilobytes benötigt. Das sind etwa 10 MB Daten pro Minute. </para +></example> +<tip +><para +>Nutzen Sie immer die beste benötigte Qualität für Aufnahmen! Das Reduzieren der Qualität im Nachhinein ist problemlos jederzeit möglich, aber das Erhöhen der Qualität wird nicht die gewünschten Erfolge bringen, da dafür mehr Daten benötigt werden, als aufgenommen wurden. </para +></tip> +<para +>Durch Selektieren des letzten Eintrags über dem Knopf werden die eingestellten Werte als Standardeinstellung für alle weiteren neuen Dateien verwendet, ohne das dieser Dialog angezeigt wird. </para> +<para +>Da der gleiche Dialog auch in der Konfiguration verfügbar ist, kann der Eintrag "Beim Erstellen ..." auch dort geändert werden um diesen Dialog für alle neuen Dateien wieder anzuzeigen. </para> +</sect1> + +<sect1 id="vu-meter"> +<title +>VU-Meter</title> +<para +>Während der Kompressor vielleicht nicht für jede Aufgabe nötig ist, ist das VU-Meter mit seiner eingebauten Lautstärkesteuerung das wichtigste Teil für Aufnahmen mit &krec;. Es zeigt den aktuellen Pegel der Aufnahme nach den genutzten Effekten und nach der Lautstärkeänderung dieses Kontrollelements. Wenn die Anzeige die meiste Zeit tief Rot ist, ist die Aufnahme wahrscheinlich gestört und klingt nicht gut. Wenn die Anzeige nur im Bereich der unteren 2% wackelt, wird in der Aufnahme vermutlich nicht viel zu hören sein. </para> +<tip +><para +>Für gute Aufnahmen sollte der Pegel die meiste Zeit zwischen -12dB und 0dB schwanken. </para +></tip> +<tip +><para +>Benutzen Sie den Kompressor um die Dynamik Ihrer Aufnahmen zu bearbeiten. Sehen Sie dafür in <xref linkend="compressor"/> nach. </para +></tip> +</sect1> + +</chapter> + + + +<chapter id="credits"> +<title +>Mitwirkende und Lizenz</title> +<para +>&krec; </para> +<para +>Copyright für das Programm 2002-2003 Arnold Krille<email +>[email protected]</email +> </para> +<para +>Copyright für die Dokumentation 2002-2004 Arnold Krille <email +>[email protected]</email +> </para> +<para +>Frank Schütte <email +>[email protected]</email +></para +><para +>Arnold Krille<email +>[email protected]</email +></para +> +&underFDL; &underGPL; </chapter> + +<appendix id="installation"> +<title +>Installation</title> + +<sect1 id="getting-krec"> +<title +>Wie man &krec; bekommt</title> +&install.intro.documentation; </sect1> + +<sect1 id="requirements"> +<title +>Voraussetzungen</title> +<para +>Zur erfolgreichen Verwendung von &krec; 0.5.1 benötigt man &kde; 3.3. </para> +<para +>&krec; sollte sich im Paket tdemultimedia befinden. Da dieses Paket sowohl ein lauffähiges &kde; als auch &arts; voraussetzt, sollte alles in Ordnung sein. </para> +</sect1> + +<sect1 id="compilation"> +<title +>Kompilierung und Installation</title> +&install.compile.documentation; </sect1> + +</appendix> + +&documentation.index; +</book> + +<!-- +Local Variables: +mode: sgml +sgml-minimize-attributes:nil +sgml-general-insert-case:lower +End: +--> diff --git a/tde-i18n-de/docs/tdemultimedia/krec/krec-configuration.png b/tde-i18n-de/docs/tdemultimedia/krec/krec-configuration.png Binary files differnew file mode 100644 index 00000000000..353bb5f682f --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/krec/krec-configuration.png diff --git a/tde-i18n-de/docs/tdemultimedia/krec/krec-hicolor.png b/tde-i18n-de/docs/tdemultimedia/krec/krec-hicolor.png Binary files differnew file mode 100644 index 00000000000..dabc7f52ddd --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/krec/krec-hicolor.png diff --git a/tde-i18n-de/docs/tdemultimedia/krec/krec-keramik.png b/tde-i18n-de/docs/tdemultimedia/krec/krec-keramik.png Binary files differnew file mode 100644 index 00000000000..bf764e1353f --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/krec/krec-keramik.png diff --git a/tde-i18n-de/docs/tdemultimedia/krec/krec-new_file_properties.png b/tde-i18n-de/docs/tdemultimedia/krec/krec-new_file_properties.png Binary files differnew file mode 100644 index 00000000000..d45eec83b18 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/krec/krec-new_file_properties.png diff --git a/tde-i18n-de/docs/tdemultimedia/kscd/Makefile.am b/tde-i18n-de/docs/tdemultimedia/kscd/Makefile.am new file mode 100644 index 00000000000..df6332b8050 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/kscd/Makefile.am @@ -0,0 +1,4 @@ +KDE_LANG = de +SUBDIRS = $(AUTODIRS) +KDE_DOCS = AUTO +KDE_MANS = AUTO diff --git a/tde-i18n-de/docs/tdemultimedia/kscd/Makefile.in b/tde-i18n-de/docs/tdemultimedia/kscd/Makefile.in new file mode 100644 index 00000000000..482d152bc27 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/kscd/Makefile.in @@ -0,0 +1,635 @@ +# Makefile.in generated by automake 1.10.1 from Makefile.am. +# KDE tags expanded automatically by am_edit - $Revision: 483858 $ +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = docs/tdemultimedia/kscd +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +#>- RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ +#>- html-recursive info-recursive install-data-recursive \ +#>- install-dvi-recursive install-exec-recursive \ +#>- install-html-recursive install-info-recursive \ +#>- install-pdf-recursive install-ps-recursive install-recursive \ +#>- installcheck-recursive installdirs-recursive pdf-recursive \ +#>- ps-recursive uninstall-recursive +#>+ 7 +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive nmcheck-recursive bcheck-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +#>- DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +#>+ 1 +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) $(KDE_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +ARTSCCONFIG = @ARTSCCONFIG@ +AUTOCONF = @AUTOCONF@ +AUTODIRS = @AUTODIRS@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CONF_FILES = @CONF_FILES@ +CYGPATH_W = @CYGPATH_W@ +DCOPIDL = @DCOPIDL@ +DCOPIDL2CPP = @DCOPIDL2CPP@ +DCOPIDLNG = @DCOPIDLNG@ +DCOP_DEPENDENCIES = @DCOP_DEPENDENCIES@ +DEFS = @DEFS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +GMSGFMT = @GMSGFMT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KCFG_DEPENDENCIES = @KCFG_DEPENDENCIES@ +KCONFIG_COMPILER = @KCONFIG_COMPILER@ +KDECONFIG = @KDECONFIG@ +KDE_EXTRA_RPATH = @KDE_EXTRA_RPATH@ +KDE_RPATH = @KDE_RPATH@ +KDE_XSL_STYLESHEET = @KDE_XSL_STYLESHEET@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MAKEKDEWIDGETS = @MAKEKDEWIDGETS@ +MCOPIDL = @MCOPIDL@ +MEINPROC = @MEINPROC@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TOPSUBDIRS = @TOPSUBDIRS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XMLLINT = @XMLLINT@ +X_RPATH = @X_RPATH@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +am__leading_dot = @am__leading_dot@ +am__tar = @am__tar@ +am__untar = @am__untar@ +#>- bindir = @bindir@ +#>+ 2 +DEPDIR = .deps +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +kde_appsdir = @kde_appsdir@ +kde_bindir = @kde_bindir@ +kde_confdir = @kde_confdir@ +kde_datadir = @kde_datadir@ +kde_htmldir = @kde_htmldir@ +kde_icondir = @kde_icondir@ +kde_kcfgdir = @kde_kcfgdir@ +kde_libs_htmldir = @kde_libs_htmldir@ +kde_libs_prefix = @kde_libs_prefix@ +kde_locale = @kde_locale@ +kde_mimedir = @kde_mimedir@ +kde_moduledir = @kde_moduledir@ +kde_servicesdir = @kde_servicesdir@ +kde_servicetypesdir = @kde_servicetypesdir@ +kde_sounddir = @kde_sounddir@ +kde_styledir = @kde_styledir@ +kde_templatesdir = @kde_templatesdir@ +kde_wallpaperdir = @kde_wallpaperdir@ +kde_widgetdir = @kde_widgetdir@ +tdeinitdir = @tdeinitdir@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +xdg_appsdir = @xdg_appsdir@ +xdg_directorydir = @xdg_directorydir@ +xdg_menudir = @xdg_menudir@ +KDE_LANG = de +#>- SUBDIRS = $(AUTODIRS) +#>+ 1 +SUBDIRS =. +KDE_DOCS = AUTO +KDE_MANS = AUTO +#>- all: all-recursive +#>+ 1 +all: docs-am all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) +#>- @for dep in $?; do \ +#>- case '$(am__configure_deps)' in \ +#>- *$$dep*) \ +#>- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ +#>- && exit 0; \ +#>- exit 1;; \ +#>- esac; \ +#>- done; \ +#>- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdemultimedia/kscd/Makefile'; \ +#>- cd $(top_srcdir) && \ +#>- $(AUTOMAKE) --gnu docs/tdemultimedia/kscd/Makefile +#>+ 12 + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdemultimedia/kscd/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/tdemultimedia/kscd/Makefile + cd $(top_srcdir) && perl ../scripts/admin/am_edit -p../scripts/admin docs/tdemultimedia/kscd/Makefile.in +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +#>- distdir: $(DISTFILES) +#>+ 1 +distdir: distdir-nls $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +#>- uninstall: uninstall-recursive +#>+ 1 +uninstall: uninstall-docs uninstall-nls uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +#>- clean: clean-recursive +#>+ 1 +clean: kde-rpo-clean clean-recursive + +#>- clean-am: clean-generic mostlyclean-am +#>+ 1 +clean-am: clean-docs clean-bcheck clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +#>- install-data-am: +#>+ 1 +install-data-am: install-docs install-nls + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic ctags \ + ctags-recursive distclean distclean-generic distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ + tags-recursive uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: + +#>+ 2 +KDE_DIST=index.docbook kscd13.png kscd14.png index.cache.bz2 kscd12.png kscd16.png kscd11.png kscd3.png kscd.png Makefile.in Makefile.am + +#>+ 24 +index.cache.bz2: $(srcdir)/index.docbook $(KDE_XSL_STYLESHEET) kscd13.png kscd.png kscd3.png index.docbook kscd14.png kscd11.png kscd16.png kscd12.png + @if test -n "$(MEINPROC)"; then echo $(MEINPROC) --check --cache index.cache.bz2 $(srcdir)/index.docbook; $(MEINPROC) --check --cache index.cache.bz2 $(srcdir)/index.docbook; fi + +docs-am: index.cache.bz2 + +install-docs: docs-am install-nls + $(mkinstalldirs) $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kscd + @if test -f index.cache.bz2; then \ + echo $(INSTALL_DATA) index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kscd/; \ + $(INSTALL_DATA) index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kscd/; \ + elif test -f $(srcdir)/index.cache.bz2; then \ + echo $(INSTALL_DATA) $(srcdir)/index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kscd/; \ + $(INSTALL_DATA) $(srcdir)/index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kscd/; \ + fi + -rm -f $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kscd/common + $(LN_S) $(kde_libs_htmldir)/$(KDE_LANG)/common $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kscd/common + +uninstall-docs: + -rm -rf $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kscd + +clean-docs: + -rm -f index.cache.bz2 + + +#>+ 13 +install-nls: + $(mkinstalldirs) $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kscd + @for base in kscd13.png kscd.png kscd3.png index.docbook kscd14.png kscd11.png kscd16.png kscd12.png ; do \ + echo $(INSTALL_DATA) $$base $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kscd/$$base ;\ + $(INSTALL_DATA) $(srcdir)/$$base $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kscd/$$base ;\ + done + +uninstall-nls: + for base in kscd13.png kscd.png kscd3.png index.docbook kscd14.png kscd11.png kscd16.png kscd12.png ; do \ + rm -f $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kscd/$$base ;\ + done + + +#>+ 5 +distdir-nls: + for file in kscd13.png kscd.png kscd3.png index.docbook kscd14.png kscd11.png kscd16.png kscd12.png ; do \ + cp $(srcdir)/$$file $(distdir); \ + done + +#>+ 15 +force-reedit: + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdemultimedia/kscd/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/tdemultimedia/kscd/Makefile + cd $(top_srcdir) && perl ../scripts/admin/am_edit -p../scripts/admin docs/tdemultimedia/kscd/Makefile.in + + +#>+ 21 +clean-bcheck: + rm -f *.bchecktest.cc *.bchecktest.cc.class a.out + +bcheck: bcheck-recursive + +bcheck-am: + @for i in ; do \ + if test $(srcdir)/$$i -nt $$i.bchecktest.cc; then \ + echo "int main() {return 0;}" > $$i.bchecktest.cc ; \ + echo "#include \"$$i\"" >> $$i.bchecktest.cc ; \ + echo "$$i"; \ + if ! $(CXX) $(DEFS) -I. -I$(srcdir) -I$(top_builddir) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(KDE_CXXFLAGS) --dump-class-hierarchy -c $$i.bchecktest.cc; then \ + rm -f $$i.bchecktest.cc; exit 1; \ + fi ; \ + echo "" >> $$i.bchecktest.cc.class; \ + perl $(top_srcdir)/admin/bcheck.pl $$i.bchecktest.cc.class || { rm -f $$i.bchecktest.cc; exit 1; }; \ + rm -f a.out; \ + fi ; \ + done + + +#>+ 3 +final: + $(MAKE) all-am + +#>+ 3 +final-install: + $(MAKE) install-am + +#>+ 3 +no-final: + $(MAKE) all-am + +#>+ 3 +no-final-install: + $(MAKE) install-am + +#>+ 3 +kde-rpo-clean: + -rm -f *.rpo + +#>+ 3 +nmcheck: +nmcheck-am: nmcheck diff --git a/tde-i18n-de/docs/tdemultimedia/kscd/index.cache.bz2 b/tde-i18n-de/docs/tdemultimedia/kscd/index.cache.bz2 Binary files differnew file mode 100644 index 00000000000..b3e433ee684 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/kscd/index.cache.bz2 diff --git a/tde-i18n-de/docs/tdemultimedia/kscd/index.docbook b/tde-i18n-de/docs/tdemultimedia/kscd/index.docbook new file mode 100644 index 00000000000..2b0a8e4e13f --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/kscd/index.docbook @@ -0,0 +1,1212 @@ +<?xml version="1.0" ?> +<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [ + <!ENTITY kappname "&kscd;"> + <!ENTITY package "tdemultimedia"> + <!ENTITY % German "INCLUDE" +> <!-- change language only here --> + <!ENTITY % addindex "IGNORE"> +]> + +<book lang="&language;"> + +<bookinfo> +<title +>Das &kscd;-Handbuch</title> + +<authorgroup> + +<author +><firstname +>Jonathan</firstname +> <surname +>Singer</surname +> <affiliation +><address +><email +>[email protected]</email +></address +></affiliation> +</author> + +<author +><firstname +>David</firstname +> <surname +>White</surname +> <affiliation +><address +><email +>[email protected]</email +></address> +</affiliation> +</author> + +<othercredit role="developer" +><firstname +>Bernd</firstname +> <othername +>Johannes</othername +> <surname +>Wuebben</surname +> <affiliation +><address +><email +>[email protected]</email +></address +></affiliation> +<contrib +>Entwickler</contrib> +</othercredit> + +<othercredit role="developer" +><firstname +>Dirk</firstname +> <surname +>Forsterling</surname +> <affiliation +><address +><email +>[email protected]</email +></address +></affiliation> +<contrib +>Entwickler</contrib> +</othercredit> + +<othercredit role="developer" +><firstname +>Dirk</firstname +> <surname +>Foersterling</surname +> <affiliation +><address +><email +>[email protected]</email +></address +></affiliation> +<contrib +>Entwickler</contrib> +</othercredit> + +<othercredit role="reviewer" +><firstname +>Lauri</firstname +> <surname +>Watts</surname +> <affiliation +><address +><email +>[email protected]</email +></address +></affiliation> +<contrib +>Gegengelesen von</contrib> +</othercredit> +<othercredit role="translator" +><firstname +>Gregor</firstname +><surname +>Zumstein</surname +><affiliation +><address +><email +>[email protected]</email +></address +></affiliation +><contrib +>Übersetzung</contrib +></othercredit +><othercredit role="translator" +><firstname +>Frank</firstname +><surname +>Schütte</surname +><affiliation +><address +><email +>[email protected]</email +></address +></affiliation +><contrib +>Überarbeitung der Übersetzung</contrib +></othercredit +> +</authorgroup> + +<copyright> +<year +>2000</year +><year +>2004</year> +<holder +>J Singer</holder> +</copyright> + +<legalnotice +>&FDLNotice;</legalnotice> + + +<date +>2002-10-07</date> +<releaseinfo +>1.4</releaseinfo> + +<abstract> +<para +>&kscd; ist ein kleiner, schneller Audio-<abbrev +>CD</abbrev +>-Spieler für &UNIX;-Systeme. Er unterstützt <abbrev +>CDDB</abbrev +>.</para> +</abstract> + +<keywordset> +<keyword +>KDE</keyword> +<keyword +>tdemultimedia</keyword> +<keyword +>kscd</keyword> +<keyword +>Musik</keyword> +<keyword +>CD</keyword> +<keyword +>Audio</keyword> +</keywordset> + +</bookinfo> + +<chapter id="introduction"> +<title +>Einführung</title> + +<para +>&kscd; ist ein schneller &CD;-Spieler mit <acronym +>CDDB</acronym +>-Unterstützung für Unix. &kscd; steht für <quote +>The KDE Project's small/simple CD player (auf Deutsch also: kleiner/einfacher &CD;-Spieler des KDE Projekts)</quote +>.</para> + +<para +><emphasis +>Neu: </emphasis +>Das <filename +>workman2cddb.pl</filename +>-Perlskript erlaubt es Benutzern von Workman, bequem auf &kscd; umzusteigen, ohne Daten neu eingeben zu müssen.</para> + +<para +>Ich hoffe dass Ihnen das &CD;-Wiedergabeprogramm gefällt,</para> + +<para +>Bernd Johannes Wuebben</para> + +<para +><email +>[email protected]</email +></para> + +<sect1 id="supported-platforms"> +<title +>Unterstützte Plattformen</title> + +<para +>&kscd; unterstützt die folgenden Systeme:</para> + +<itemizedlist> +<listitem +><para +>Linux</para +></listitem> +<listitem +><para +>FreeBSD</para +></listitem> +<listitem +><para +>NetBSD</para +></listitem> +<listitem +><para +>BSD386</para +></listitem> +<listitem +><para +>SUN</para +></listitem> +<listitem +><para +>Solaris (mit <acronym +>cdda</acronym +>-Unterstützung)</para +></listitem> +<listitem +><para +>HP-UX</para +></listitem> +<listitem +><para +>SGI Irix (mit <acronym +>cdda</acronym +>-Unterstützung)</para +></listitem> +<listitem +><para +>Sony NEWS</para +></listitem> +<listitem +><para +>OSF/1</para +></listitem> +<listitem +><para +>Ultrix</para +></listitem> +</itemizedlist> + +<para +>und sollte sich auch auf anderen Systemen mit wenigen Änderungen kompilieren lassen.</para> + +</sect1> + +</chapter> + +<chapter id="onscreen-fundamentals"> +<title +>Hauptfenster</title> + +<sect1 id="basic-operation"> +<title +>Grundfunktionen</title> + +<screenshot> +<screeninfo +>Das &kscd;-Hauptfenster</screeninfo> +<mediaobject> +<imageobject> +<imagedata fileref="kscd.png" format="PNG"/></imageobject> +<textobject +><phrase +>Das &kscd;-Hauptfenster</phrase +></textobject> +</mediaobject> +</screenshot> + +<para +>Wenn Sie &kscd; starten, sollten Sie so etwas sehen. Die Kontrollelemente dieses Fensters werden unten beschrieben.</para> + +<sect2 id="control-panel"> +<title +>Hauptkontrollleiste</title> + +<screenshot> +<screeninfo +>Das Kontrollfeld</screeninfo> +<mediaobject> +<imageobject +><imagedata fileref="kscd2.png" format="PNG"/></imageobject> +<textobject +><phrase +>Hauptkontrollleiste</phrase +></textobject> +</mediaobject> +</screenshot> + +<para +>Die Funktion dieser Knöpfe sollte jedem bekannt sein, der je einen CD-Spieler bedient hat.</para> + +<para +>Der oberste Knopf in der obenstehenden Abbildung startet das Abspielen bzw. hält es an. Der linke Knopf in der zweiten Reihe stoppt das Abspielen der &CD;, während der rechts davon die &CD; auswirft. Die Knöpfe in der in der dritten Reihe springen zum Anfang des vorherigen und des nächsten Stückes. Der unterste linke Knopf schaltet die Zufallswiedergabe um, während der rechte die Dauerwiederholung schaltet, so das die &CD; nach dem letzten Titel wieder von vorne startet.</para> +</sect2> + + +<sect2 id="status-display"> +<title +>Statusanzeige</title> + +<screenshot> +<screeninfo +>Die Statusanzeige</screeninfo> +<mediaobject> +<imageobject +><imagedata fileref="kscd3.png" format="PNG"/></imageobject> +<textobject +><phrase +>Statusanzeige</phrase +></textobject> +</mediaobject> +</screenshot> + +<para +>Von links nach rechts betrachtet finden sich folgende Angaben: Die Hauptzeitanzeige (siehe weiter unten für eine Beschreibung der verschiedenen Zeitanzeigemodi), der Status des &CD-ROM;-Laufwerks, die Gesamtspielzeit der Audio-&CD;, die aktuelle Lautstärkeeinstellung und die Nummer des gegenwärtigen Stücks bzw. die Gesamtzahl der Stücke (Nr./Ges.). Die untersten beiden Zeilen geben den Künstler und den &CD;-Titel an, darunter den Titel des Stücks, vorausgesetzt, ein passender Eintrag existiert in der lokalen &CD;-Datenbank oder in der des Netzwerks (<acronym +>CDDB</acronym +>).</para> + +<para +>Dieser Knopf schaltet zwischen den möglichen Zeitanzeigemodi um. Standardmäßig zeigt &kscd; die verstrichene Zeit des aktuellen Stücks an, falls gerade die Wiedergabe einer &CD; eingeschaltet ist und entweder --:-- oder 00:00, falls keine &CD; abgespielt wird. Wiederholtes Drücken des Knopfes schaltet zwischen den möglichen Anzeigemodi verbleibende Zeit, gesamte bisher verstrichene Zeit und gesamte verbleibende Zeit um.</para> +</sect2> + +<sect2 id="configuration-button"> +<title +>Der Knopf <guibutton +>Einrichtung</guibutton +></title> + +<screenshot> +<screeninfo +>Der "Informationen"-Knopf</screeninfo> +<mediaobject> +<imageobject +><imagedata fileref="kscd5.png" format="PNG"/></imageobject> +<textobject +><phrase +>Der "Informationen"-Knopf</phrase +></textobject> +</mediaobject> +</screenshot> + +<para +>Dieser Knopf öffnet das Hauptmenü von &kscd;. In diesem können Sie &kscd; für Ihr System konfigurieren. Genauere Informationen zur Konfiguration von &kscd; finden Sie unter <link linkend="configuring-kscd" +>&kscd; konfigurieren</link +>.</para> +<para +>Mit diesem Knopf können Sie Informationen über den Künstler im Internet finden. Sie können Aufführungstermine, Verkaufsinformationen oder andere Informationen abrufen, indem Sie den Knopf betätigen und den entsprechenden Eintrag im erscheinenden Menü auswählen.</para> +<para +>In diesem Menü können Sie diese Hilfe öffnen, Probleme und Wünsche berichten, mehr über &kscd; und &kde; lernen und &kscd; beenden.</para> +</sect2> + +<sect2 id="cddb-button"> +<title +>Der Knopf <guibutton +>CDDB</guibutton +></title> + +<screenshot> +<screeninfo +>Der Knopf <acronym +>CDDB</acronym +></screeninfo> +<mediaobject> +<imageobject +><imagedata fileref="kscd6.png" format="PNG"/></imageobject> +<textobject +><phrase +>Der Knopf <acronym +>CDDB</acronym +></phrase +></textobject> +</mediaobject> +</screenshot> + +<para +>Dieser Knopf öffnet die Eingabeeditorleiste von <acronym +>CDDB</acronym +> (Compact Disc Data Base). </para> + +<para +>Die <acronym +>CDDB</acronym +> kann ihre &CD; identifizieren und gegebenenfalls die Stückliste dieser &CD; herunterladen oder aus dem lokalen Dateisystem einlesen. Genaueres zur Benutzung dieses Werkzeugs erfahren Sie im Abschnitt <link linkend="cddb-editor" +>&CD;-Datenbankeditor</link +>.</para> +</sect2> + + + + +<sect2> +<title +>Der Lautstärkeknopf</title> + +<screenshot> +<screeninfo +>Der Lautstärkeknopf</screeninfo> +<mediaobject> +<imageobject +><imagedata fileref="kscd9.png" format="PNG"/></imageobject> +<textobject +><phrase +>Der Lautstärkeregler</phrase +></textobject> +</mediaobject> +</screenshot> + +<para +>Dieser Regler steuert die Wiedergabelautstärke der &CD;. Rechts bedeutet lauter und links leiser. Wenn Sie Ihre &CD; mit Hilfe ihrer Soundkarte wiedergeben, beeinflusst die Einstellung des Soundkarten-Mixers die Lautstärke ebenfalls.</para> +</sect2> + + +<sect2> +<title +>Die Stückauswahl</title> + +<screenshot> +<screeninfo +>Die Stückauswahl</screeninfo> +<mediaobject> +<imageobject +><imagedata fileref="kscd11.png" format="PNG"/></imageobject> +<textobject +><phrase +>Die Stückauswahl</phrase +></textobject> +</mediaobject> +</screenshot> + +<para +>In diesem Listenfeld kann man ein Stück direkt zur Wiedergabe auswählen. </para> +</sect2> + +</sect1> +</chapter> + +<chapter id="configuring-kscd"> +<title +>Einrichtung von &kscd;</title> +<sect1 id="configuration-intro"> +<title +>Das Einrichtungshauptfenster</title> + +<para +>Das Einrichtungshauptfenster von &kscd; ist ein Karteikartendialog mit drei Abschnitten. </para> + +<itemizedlist> +<listitem +><para +><link linkend="kscd-options-tab" +><guilabel +>CD-Spieler</guilabel +></link +></para +></listitem> +<listitem +><para +><link linkend="freedb-tab" +><guilabel +>FreeDb-Abfrage</guilabel +></link +></para +></listitem> +<listitem +><para +><link linkend="smtp-options" +><guilabel +>FreeDb-Übertragung</guilabel> +</link +></para +></listitem> +</itemizedlist> +</sect1> + +<sect1 id="kscd-options-tab"> +<title +>Die Karteikarte <guilabel +>CD-Spieler</guilabel +></title> + +<screenshot> +<screeninfo +>Die Karteikarte <guilabel +>CD-Spieler</guilabel +></screeninfo> +<mediaobject> +<imageobject +><imagedata fileref="kscd12.png" format="PNG"/></imageobject> +<textobject +><phrase +>Die Karteikarte <guilabel +>&kscd;-Einstellungen</guilabel +></phrase +></textobject> +</mediaobject> +</screenshot> + +<para +>Die Felder <guilabel +>LED-Farbe</guilabel +> und <guilabel +>Hintergrundfarbe</guilabel +> zeigen die aktuellen Farben der Statusanzeige an. Klicken Sie auf die Farbbalken zur Änderung der Farben.</para> + + +<!-- +<para +>The <guilabel +>Unix mail command</guilabel +> field shows the +command used to send new <acronym +>CDDB</acronym +> entries to the +database. The default value is <userinput +><command +>mail</command> +<option +>-s <replaceable +>%s</replaceable +></option +></userinput +>. You +will need to make sure this command will actually send mail to +non-local systems if you want to submit <acronym +>CDDB</acronym> +entries, especially if you access the Internet through a dial-up +connection. Check the documentation for your &Linux; distribution for +details. Some Linux distributions that use sendmail to deliver e-mail +require only that you enter your mail host into the +<option +>"Smart" relay host</option +> field in +<filename +>/etc/sendmail.cf</filename +>. In addition, the +<acronym +>CDDB</acronym +> site will want to be able to mail you back; it +may therefore also be necessary to edit +<filename +>/etc/sendmail.cf</filename +> to ensure that the return +address on the submission is valid. Your mileage is likely to vary. If +all else fails, use <link linkend="smtp-options" +>SMTP</link> +instead.</para> + +<para +>The <guilabel +>WWW-Browser</guilabel +> section lets you choose which web +browser to use to access the web sites in the <link linkend="information-button" +>information button</link +> menus. You can choose +either &konqueror; or a custom browser with the radio buttons. By default, the +<guilabel +>Use Custom Browser</guilabel +> field contains +<userinput +><command +>kfmclient</command> +<option +><replaceable +>openURL %s</replaceable +></option +></userinput +>.</para> +--> + +<para +><guilabel +>An Kontrollleiste andocken</guilabel +> veranlasst &kscd; in der &kicker;-Leiste zu erscheinen.</para> + +<para +>Stellen Sie im Feld <guilabel +>Intervall überspringen</guilabel +> das gewünschte Zeitintervall in Sekunden ein, das beim Klicken auf den Knopf <guibutton +><Zeit> Sekunden vorwärts</guibutton +> bzw. <guibutton +><Zeit> Sekunden rückwärts</guibutton +> übersprungen werden soll.</para> + +<para +><guilabel +>Abspielen beim Schließen der Schublade</guilabel +> veranlasst den automatischen Start der Wiedergabe beim Einlegen einer &CD;, ohne das der Knopf <guibutton +>Wiedergabe</guibutton +> gedrückt wird.</para> + +<para +><guilabel +>CD beim Beenden auswerfen</guilabel +> veranlasst den automatischen Auswurf der &CD; am Ende der Wiedergabe.</para> + +<para +><guilabel +>Abspielen beim Verlassen beenden</guilabel +> veranlasst &kscd; die Wiedergabe einer &CD; beim Programmende automatisch anzuhalten.</para> + + + +<para +>Das Feld <guilabel +>CD-ROM-Gerät</guilabel +> enthält den Namen des &CD-ROM;-Laufwerkes, das für die Wiedergabe von &CD;s verwendet wird. Die Standardeinstellung ist <filename +>/dev/cdrom</filename +>. Die Rechte dieses Gerätes müssen so eingestellt sein, das es jeder zum Lesen öffnen kann. Eine Änderung dieser Rechte erfordert in den meisten Fällen Superuser-Rechte. Die Änderung kann von der Kommandozeile oder in &konqueror; im Superuser-Modus vorgenommen werden.</para> + +<para +>Der Knopf <guibutton +>Hilfe</guibutton +> öffnet das Inhaltsverzeichnis der &kscd;-Hilfeseiten. <guibutton +>OK</guibutton +> speichert die aktuellen Einstellungen und beendet den Einrichtungsdialog; <guibutton +>Abbrechen</guibutton +> beendet den Dialog ohne speichern. </para> +</sect1> + +<sect1 id="freedb-tab"> +<title +>Die Karteikarte <guilabel +>freedb-Abfrage</guilabel +></title> +<screenshot> +<screeninfo +>Die Karteikarte <guilabel +>freedb-Abfrage</guilabel +> des Einrichtungsdialoges</screeninfo> +<mediaobject> +<imageobject +> <imagedata fileref="kscd14.png" format="PNG"/> </imageobject> +<textobject +><phrase +>Die Karteikarte <guilabel +>freedb-Abfrage</guilabel +> des Einrichtungsdialoges</phrase +></textobject> +</mediaobject> +</screenshot> + +<para +>Die Karteikarte <guilabel +>freedb-Abfrage</guilabel +> ermöglicht die Einstellung der <acronym +>CDDB</acronym +>-Funktionen von &kscd;.</para> + +<para +>Die <guilabel +>Modus</guilabel +>-Option konfiguriert, wie <acronym +>CDDB</acronym +>-Abfragen ausgeführt werden.Die Einstellung <guilabel +>Nur lokal</guilabel +> bedeutet, das nur die lokalen Informationen auf Ihrem Computer genutzt werden. <guilabel +>Lokal und Fremdrechner</guilabel +> sucht alle Informationen, die nicht lokal vorhanden sind, im Internet. <guilabel +>Nur Fremdrechner</guilabel +> sucht alle Informationen direkt aus dem Internet. Die Zeit, bis die Suchanfrage aufgegeben wird, kann eingestellt werden.</para> + + +<para +>Der Rahmen <guilabel +>CDDB-Server</guilabel +> erlaubt verschiedenen Einstellungen des freedb-Servers. Geben Sie die Adresse des Servers und den Port an. Sie können auch einen Eintrag aus der Liste auswählen, der dann im Feld darüber erscheint. Die Art der Verbindung (CDDB oder HTTP) kann auch gewählt werden, wobei Sie dies sehr wahrscheinlich nicht ändern sollten. <guilabel +>Zwischenspeicher-Ordner</guilabel +> enthält eine Liste mit Ordnern, in denen die <acronym +>CDDB</acronym +>-Einträge gespeichert werden.</para> + +<!-- +<para +>The <guilabel +>Send freedb submissions to:</guilabel +> field contains the +e-mail address to which to submit <abbrev +>CDDB</abbrev +> entries. The default address +is <email +>[email protected]</email +>. As of version 0.8, +<acronym +>CDDB</acronym +> entries from &kscd; are accepted for inclusion in the +database. Enter servers manually by entering the address in the upper box and hitting the +<guiicon +>+</guiicon +> button. Hit the <guiicon +>-</guiicon +> button to delete the selected entry +from the list. The <guibutton +>Defaults</guibutton +> button restores all settings +to the default values.The <guibutton +>Help</guibutton +> button opens the &kscd; +help home page (this document).</para> + +<para +>The <guibutton +>Help</guibutton +> button opens the &kscd; help contents +page. <guibutton +>OK</guibutton +> saves the current settings and exits; +<guibutton +>Apply</guibutton +> saves the current settings without exiting; +<guibutton +>Cancel</guibutton +> exits without saving. </para> +--> +</sect1> + +<sect1 id="smtp-options"> +<title +>Die Karteikarte <guilabel +>Übertragen</guilabel +></title> + +<screenshot> +<screeninfo +>Die Karteikarte Übertragen</screeninfo> +<mediaobject> +<imageobject +><imagedata fileref="kscd16.png" format="PNG"/></imageobject> +</mediaobject> +</screenshot> + +<para +>Die Karteikarte Übertragen erlaubt Einstellungen, um eigene, neue Einträge an CDDB-Server zu übertragen. Das ist nützlich, falls Sie Ihr System nicht als Server konfiguriert haben. Aktivieren Sie <guilabel +>Übertragung via SMTP aktivieren</guilabel +>, um dies zu nutzen.</para> + +<para +>Man kann durch Markierung von <guilabel +>E-Mail-Adresse aus dem Kontrollzentrum benutzen</guilabel +> diese Adresse verwenden. Falls man &kcontrol; öffnen möchte, um diese Adresse zu ändern, kann man auf <guilabel +>E-Mail-Adresse einrichten</guilabel +> klicken. Das ändert die E-Mail-Adresse für alle &kde;-Anwendungen, die diese Einstellung verwenden, nicht nur die von &kscd;.</para> + +<para +>Die Karteikarte <acronym +>SMTP</acronym +> ermöglicht die Einstellung einer Verbindung zu einem Mail-Server für die Versendung neuer <acronym +>CDDB</acronym +>-Einträge. Diese Einstellungen sind nützlich, wenn Ihr eigenes System nicht als Mail-Server konfiguriert ist. Markieren Sie zur Aktivierung dieser Fähigkeit <guilabel +>Übertragung via SMTP ermöglichen</guilabel +>. Tragen Sie die Adresse des <acronym +>SMTP</acronym +>-Servers in das obere linke und die Portnummer (typischerweise <userinput +>25</userinput +>) in das Feld <guilabel +>Port:</guilabel +> ein.</para> + + +<para +>Der Knopf <guibutton +>Hilfe</guibutton +> öffnet das Inhaltsverzeichnis der &kscd;-Hilfeseiten. <guibutton +>OK</guibutton +> speichert die aktuellen Einstellungen und beendet den Einrichtungsdialog; <guibutton +>Abbrechen</guibutton +> beendet den Dialog ohne speichern. </para> +</sect1> + + +</chapter> + +<chapter id="cddb-editor"> +<title +>Der <guilabel +>CD-Datenbank Editor</guilabel +></title> + +<screenshot> +<screeninfo +>Der CD-Datenbank Editor</screeninfo> +<mediaobject> +<imageobject +><imagedata fileref="kscd13.png" format="PNG"/></imageobject> +<textobject +><phrase +>Der CD-Datenbank Editor</phrase +></textobject> +</mediaobject> +</screenshot> + +<para +>Der &CD;-Datenbank Editor erlaubt die Veränderung, das Herunterladen, die Kommentierung und das Heraufladen von <link linkend="cddb-support" +><acronym +>CDDB</acronym +> (Compact Disc Data Base)</link +>-Einträgen.</para> + +<para +>Falls die die &CD; in Ihrem &CD-ROM;-Laufwerk entweder in Ihrem lokalen <acronym +>CDDB</acronym +>-Verzeichnisbaum (siehe auch <link linkend="freedb-tab" +>CDDB</link +> im Abschnitt Einrichtung) oder in der freedb-Datenbank gefunden wurde, werden der Künstlername und der &CD;-Titel in den Feldern <guilabel +>Künstler</guilabel +> und <guilabel +>Titel</guilabel +> und eine Stückliste im Feld <interface +>Stücke</interface +> angezeigt. Andernfalls sehen Sie eine Liste der Stücknummern und Stücklängen ohne Titel.</para> + +<para +>Sie können einen Kommentar für die gesamte CD mit <guibutton +>Zusatz</guibutton +> unterhalb von <guilabel +>Titel</guilabel +> oder für ein bestimmtes Stück rechts von <guilabel +>Stücke</guilabel +> ebenfalls unter <guibutton +>Zusatz</guibutton +> hinzufügen. Falls man ein Stück im Auswahlfeld <guilabel +>Stücke</guilabel +> markiert, erscheint, falls vorhanden, der zugehörige Titel im Feld <guilabel +>Titel</guilabel +>. Nun kann man einen Titel für das Stück eintragen oder den vorhandenen nach eigenen Wünschen ändern. Durch Drücke auf <keycap +>Enter</keycap +> auf der Tastatur werden die Änderungen in das Auswahlfeld übernommen.</para> + +<para +>Nachdem Sie alle Stücke mit den richtigen Stücktiteln versehen und die Felder <guilabel +>Künstler</guilabel +> und <guilabel +>Titel</guilabel +> ausgefüllt haben, können sie durch Klicken auf <guibutton +>Übertragen</guibutton +> Ihre Einträge per E-Mail an freedb abschicken.</para> + +<para +>Sie werden nach einer Kategorie für den Eintrag gefragt. Das Feld <guilabel +>CD-Kennung</guilabel +> zeigt die 32-Bit-<acronym +>ID</acronym +> an, der von der freedb zur Identifikation der CD verwendet wird. Oberhalb der <acronym +>ID</acronym +> befindet sich der Eintrag für die <guilabel +>freedb</guilabel +>-Kategorien. Die Kategorien entsprechen den Unterverzeichnissen des Verzeichnisses, das Sie als <guilabel +>freedb-Basisverzeichnis</guilabel +> auf der Karteikarte <link linkend="freedb-tab" +><guilabel +>freedb</guilabel +></link +> des &kscd;-Einrichtungsfensters eingetragen haben.</para> + +<para +>Das Feld <guilabel +>Gesamtzeit:</guilabel +> zeigt die gesamte Spielzeit der &CD; an.</para> + +<para +>Durch Klicken auf <guibutton +>Informationen holen</guibutton +> können Sie einen <acronym +>CDDB</acronym +>-Eintrag aus dem Internet laden. Der Knopf <guibutton +>Abbrechen</guibutton +> schließt den &CD;-Datenbank Editor ohne zu speichern.</para> + +</chapter> + +<chapter id="using-kscd-in-the-panel"> +<title +>Verwendung von &kscd; in der &kde;-Kontrollleiste</title> + +<screenshot> +<screeninfo +>Verwendung von &kscd; in der &kde;-Kontrollleiste</screeninfo> +<mediaobject> +<imageobject +><imagedata fileref="kscd18.png" format="PNG"/></imageobject> +<textobject +><phrase +>Verwendung von &kscd; in der &kde;-Kontrollleiste</phrase +></textobject> +</mediaobject> +</screenshot> + +<para +>Wenn das Ankreuzfeld <guilabel +>An Kontrollleiste andocken</guilabel +> markiert ist, wird eine &kscd; Miniprogramm in der <application +>Kontrollleiste</application +> angezeigt. Dieses Miniprogramm ist auf jeder Arbeitsfläche verfügbar. Durch Klicken auf die <mousebutton +>rechte</mousebutton +> Maustaste erscheint ein Menü mit Funktionen zur Kontrolle der &CD;-Wiedergabe durch &kscd;. Ein Klick mit der <mousebutton +>linken Maustaste</mousebutton +> auf das Miniprogramm versteckt das Hauptfenster von &kscd;. Wenn das Hauptfenster versteckt ist, stellt ein zweiter Klick mit der <mousebutton +>linken Maustaste</mousebutton +> das Fenster wieder her. </para> + +<note +><para +>Um genau zu sein, wird das Miniprogramm in der <application +>Programm-Andockleiste</application +> angezeigt. Wenn kein Miniprogramm erscheint, wenn &kscd; minimiert ist, dann haben Sie die Leiste entfernt. Um sie hinzuzufügen, klicken Sie mit der <mousebutton +>rechten</mousebutton +> Maustaste auf einen freien Bereich der Kontrollleiste und wählen Sie <menuchoice +><guisubmenu +>Hinzufügen</guisubmenu +> <guisubmenu +>Erweiterung</guisubmenu +> <guimenuitem +>Programm-Andockleiste</guimenuitem +> </menuchoice +></para +></note> + +</chapter> + +<chapter id="cddb-support"> +<title +><acronym +>CDDB</acronym +>-Unterstützung</title> + +<para +>Die freedb-Datenbank ist eine verteilte Netzwerkdatenbank, die über das Internet erreichbar ist. Sie enthält Informationen über die meisten Audio-&CD;s, die verfügbar sind. Wenn Sie einen Internetzugang haben, werden Sie vermutlich niemals selbst Stückinformationen für Ihre &CD;s eintragen müssen. Genaueres zur Konfiguration von <acronym +>CDDB</acronym +> finden Sie im Abschnitt über die Karteikarte <link linkend="freedb-tab" +>freedb</link +> im Kapitel zur Einrichtung von &kscd;. Informationen zum ändern von <acronym +>CDDB</acronym +>-Einträgen finden Sie unter <link linkend="cddb-editor" +>Der CD-Datenbank Editor</link +>.</para> + +<para +>Die Verwendung der <acronym +>CDDB</acronym +> ist kostenlos. Beiträge sind willkommen.</para> + +<para +>Wenn Sie Beiträge für die <acronym +>CDDB</acronym +> vorbereiten, bedenken Sie bitte folgende Punkte:</para> + +<itemizedlist> +<listitem +><para +>Verwenden Sie einen <quote +>Standard</quote +>-Latinzeichensatz in den Einträgen. Einige Sonderzeichen werden unterstützt, aber das kyrillische oder griechische Alphabet für kann für Beiträge nicht akzeptiert werden.</para +></listitem> +<listitem +><para +>Verwenden Sie nur ein <keysym +>/</keysym +>-Zeichen im Feld <guilabel +>Künstler / Titel</guilabel +> im &CD;-Datenbank Editor.</para> + +<para +>Bei klassischen &CD;s ist es üblich, den Namen des Komponisten vor dem Schrägstrich und den Namen des Ausführenden hinter dem Schrägstrich einzutragen.</para +></listitem +> +<listitem +><para +>Wenn Sie einen Eintrag einsenden, der bereits existiert, werden alle zusätzlichen Informationen dem existierenden Eintrag hinzugefügt.</para> +</listitem> +</itemizedlist> + +<para +>Standardmäßig installiert &kscd; die üblichen <acronym +>CDDB</acronym +> Kategorien in <filename class="directory" +>$KDEDIR/share/apps/kscd/cddb</filename +>. Sie können so viele Kategorien erstellen, wie Sie möchten. Wenn Sie allerdings einen Eintrag einsenden möchten, werden nur die Standardeinträge der <acronym +>CDDB</acronym +> angezeigt. Die Standardadresse ist <email +>[email protected]</email +>. Weitere Informationen über <abbrev +>freedb</abbrev +> finden Sie auf der <abbrev +>freedb</abbrev +>-Internetseite.</para> + +<para +>Der lokale <acronym +>CDDB</acronym +>-Eintrag für eine bestimmte &CD; wird gespeichert unter <filename +><replaceable +>Kategorie</replaceable +>/<replaceable +>CD-Kennung</replaceable +></filename +> unter dem <acronym +>CDDB</acronym +>-Basisverzeichnis. Diese Dateien können Sie im Bedarfsfall auch mit einem Texteditor bearbeiten.</para> + +</chapter> + +<chapter id="questions-and-answers"> +<title +>Fragen und Antworten</title> + +<qandaset> +<qandaentry> +<question +><para +>Ich sehe ein Dialogfenster beim Start von &kscd;. Was mache ich falsch?</para> +<screenshot> +<screeninfo +>Fehlerdialog</screeninfo> +<mediaobject> +<imageobject +><imagedata fileref="kscd19.png" format ="PNG"/></imageobject> +<textobject +><phrase +>Fehlerdialog</phrase +></textobject> +</mediaobject> +</screenshot> +</question> +<answer +><para +>Diese Meldung bedeutet, &kscd; konnte nicht auf Ihr &CD-ROM;-Laufwerk zugreifen. Der Gerätename im Feld <guilabel +>CDROM-Gerät</guilabel +> unter <guilabel +>Einrichtung von &kscd;</guilabel +> muss wirklich das Gerät enthalten, das mit Ihrem &CD-ROM;-Laufwerk verbunden ist. Es wird sich bei diesem Gerät häufig um eine Verknüpfung zu einem <acronym +>IDE</acronym +>- (<filename +>/dev/hdx</filename +>) oder <acronym +>SCSI</acronym +>-Gerät (<filename +>/dev/sdx</filename +>) handeln.</para> + +<para +>Die Gerätedatei gehört normalerweise dem Benutzer root und der Gruppe root. Normale Benutzer dürfen dieses Gerät meistens nicht zum lesen, schreiben oder ausführen direkt öffnen. Das hat <emphasis +>nichts</emphasis +> mit dem <application +>SUID</application +>-Programm (Programme, die die Funktion <function +>setuid()</function +> der Un*x-Bibliothek verwenden, um die Identität eines anderen Benutzers anzunehmen) <command +>mount</command +> zu tun, das keine Probleme mit Berechtigungen hat; &kscd; muss in der Lage sein, einen Nur-Lese-Deskriptor für das &CD;-Gerät zu erhalten, um das &CD-ROM;-Laufwerk zu kontrollieren und Rohdaten vom Laufwerk einzulesen.</para> + +<para +>Wenn Sie das root-Kennwort kennen, können Sie die Einstellung leicht korrigieren. Wechseln Sie zu root und tippen Sie <userinput +><command +>chmod</command +> <option +>a+r</option +> <filename +><replaceable +>/dev/cdrom</replaceable +></filename +></userinput +> um jedem Benutzer Leserecht auf <filename +>/dev/cdrom</filename +> zu erteilen. Wenn Ihr &CD-ROM;-Laufwerk einen anderen Namen hat, ändern Sie die Berechtigungen für diese Gerätedatei. Wenn Sie nicht über das root-Kennwort verfügen, bitten Sie Ihren Administrator höflich, Ihnen Leserechte für Ihr &CD-ROM;-Laufwerk einzurichten.</para> + +<para +>Genaueres finden Sie im Kapitel <link linkend="configuring-kscd" +>&kscd; einrichten</link +></para +></answer> +</qandaentry> + +<qandaentry +> +<question +><para +>Die <acronym +>CDDB</acronym +> funktioniert nicht. Woher bekomme ich detaillierte Informationen zum genauen Problem?</para +></question +> +<answer +><para +>Wenn Sie Probleme mit <acronym +>CDDB</acronym +> haben, starten Sie &kscd; von der Kommandozeile mit der Option <option +>-d</option +> und werten Sie die Ausgaben aus.</para +></answer +> +</qandaentry> +</qandaset> +</chapter> + +<chapter id="credits-and-license"> +<title +>Mitwirkende und Lizenz</title> + +<para +>&kscd; Copyright 1997,1998 Bernd Johannes Wuebben <email +>[email protected]</email +>wuebben +></para> + +<para +>&kscd; enthält Code von: </para> +<itemizedlist> +<listitem +><para +><application +>workman</application +> 1.4 beta 3 Copyright (c) Steven Grimm <email +>[email protected]</email +></para +></listitem> +</itemizedlist> + +<para +>Besonderer Dank gilt Ti Kan und Steve Scherf, den Erfindern des <acronym +>CDDB</acronym +>-Datenbankkonzeptes. Besuchen Sie <ulink url="http://www.cddb.com/" +>http://www.cddb.com</ulink +> für weitere Informationen über <acronym +>CDDB</acronym +>.</para> + +<para +>Mein besonderer Dank gilt auch David White, der die ursprüngliche Dokumentation zu &kscd; geschrieben hat. Vielen Dank David!</para> + +<para +>Die Dokumentation wurde für KDE 2.0 überarbeitet und steht unter dem Copyright von Jonathan Singer <email +>[email protected]</email +>.</para> +<para +>Deutsche Übersetzung der Dokumentation Gregor Zumstein <email +>[email protected]</email +></para +><para +>Aktualisierung der Übersetzung für KDE 2.0 Frank Schütte <email +>[email protected]</email +></para +> +&underFDL; &underGPL; </chapter> + +<appendix id="installation"> +<title +>Installation</title> + +<sect1 id="how-to-obtain-kscd"> +<title +>Woher man &kscd; bekommt</title> +&install.intro.documentation; </sect1> + +<sect1 id="requirements"> +<title +>Anforderungen</title> + +<para +>Für die erfolgreiche Kompilierung und Installation von &kscd; benötigen Sie die aktuellen Versionen der &kde;-Bibliotheken und die &Qt; C++ Bibliothek. Alle erforderlichen Bibliotheken wie auch &kscd; selbst können Sie auf der &kde; &FTP;-Seite unter <ulink url="ftp://ftp.kde.org/pub/kde/" +>ftp://ftp.kde.org/pub/kde/</ulink +> finden.</para> + +</sect1 +> + +<sect1 id="compilation-and-installation" +> +<title +>Kompilierung und Installation</title +> &install.compile.documentation; <para +>Bitte setzen Sie den jetzigen Programmbetreuer, Dirk Foersterling, unter <email +>[email protected]</email +> von allen Änderungen in Kenntnis, die nötig waren, um &kscd; auf Ihrem System zu kompilieren.</para> + +</sect1> + +</appendix> + +&documentation.index; +</book> +<!-- +Local Variables: +mode: sgml +sgml-minimize-attributes: nil +sgml-general-insert-case: lower +End: +--> diff --git a/tde-i18n-de/docs/tdemultimedia/kscd/kscd.png b/tde-i18n-de/docs/tdemultimedia/kscd/kscd.png Binary files differnew file mode 100644 index 00000000000..9d09c0a4a48 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/kscd/kscd.png diff --git a/tde-i18n-de/docs/tdemultimedia/kscd/kscd11.png b/tde-i18n-de/docs/tdemultimedia/kscd/kscd11.png Binary files differnew file mode 100644 index 00000000000..40596c066ff --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/kscd/kscd11.png diff --git a/tde-i18n-de/docs/tdemultimedia/kscd/kscd12.png b/tde-i18n-de/docs/tdemultimedia/kscd/kscd12.png Binary files differnew file mode 100644 index 00000000000..d1589acb06b --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/kscd/kscd12.png diff --git a/tde-i18n-de/docs/tdemultimedia/kscd/kscd13.png b/tde-i18n-de/docs/tdemultimedia/kscd/kscd13.png Binary files differnew file mode 100644 index 00000000000..9c63d46a474 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/kscd/kscd13.png diff --git a/tde-i18n-de/docs/tdemultimedia/kscd/kscd14.png b/tde-i18n-de/docs/tdemultimedia/kscd/kscd14.png Binary files differnew file mode 100644 index 00000000000..2de2e69f391 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/kscd/kscd14.png diff --git a/tde-i18n-de/docs/tdemultimedia/kscd/kscd16.png b/tde-i18n-de/docs/tdemultimedia/kscd/kscd16.png Binary files differnew file mode 100644 index 00000000000..d8a3fbf8e73 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/kscd/kscd16.png diff --git a/tde-i18n-de/docs/tdemultimedia/kscd/kscd3.png b/tde-i18n-de/docs/tdemultimedia/kscd/kscd3.png Binary files differnew file mode 100644 index 00000000000..3efdd889a8a --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/kscd/kscd3.png diff --git a/tde-i18n-de/docs/tdemultimedia/noatun/Makefile.am b/tde-i18n-de/docs/tdemultimedia/noatun/Makefile.am new file mode 100644 index 00000000000..df6332b8050 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/noatun/Makefile.am @@ -0,0 +1,4 @@ +KDE_LANG = de +SUBDIRS = $(AUTODIRS) +KDE_DOCS = AUTO +KDE_MANS = AUTO diff --git a/tde-i18n-de/docs/tdemultimedia/noatun/Makefile.in b/tde-i18n-de/docs/tdemultimedia/noatun/Makefile.in new file mode 100644 index 00000000000..92addf06899 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/noatun/Makefile.in @@ -0,0 +1,635 @@ +# Makefile.in generated by automake 1.10.1 from Makefile.am. +# KDE tags expanded automatically by am_edit - $Revision: 483858 $ +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = docs/tdemultimedia/noatun +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +#>- RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ +#>- html-recursive info-recursive install-data-recursive \ +#>- install-dvi-recursive install-exec-recursive \ +#>- install-html-recursive install-info-recursive \ +#>- install-pdf-recursive install-ps-recursive install-recursive \ +#>- installcheck-recursive installdirs-recursive pdf-recursive \ +#>- ps-recursive uninstall-recursive +#>+ 7 +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive nmcheck-recursive bcheck-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +#>- DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +#>+ 1 +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) $(KDE_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +ARTSCCONFIG = @ARTSCCONFIG@ +AUTOCONF = @AUTOCONF@ +AUTODIRS = @AUTODIRS@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CONF_FILES = @CONF_FILES@ +CYGPATH_W = @CYGPATH_W@ +DCOPIDL = @DCOPIDL@ +DCOPIDL2CPP = @DCOPIDL2CPP@ +DCOPIDLNG = @DCOPIDLNG@ +DCOP_DEPENDENCIES = @DCOP_DEPENDENCIES@ +DEFS = @DEFS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +GMSGFMT = @GMSGFMT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KCFG_DEPENDENCIES = @KCFG_DEPENDENCIES@ +KCONFIG_COMPILER = @KCONFIG_COMPILER@ +KDECONFIG = @KDECONFIG@ +KDE_EXTRA_RPATH = @KDE_EXTRA_RPATH@ +KDE_RPATH = @KDE_RPATH@ +KDE_XSL_STYLESHEET = @KDE_XSL_STYLESHEET@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MAKEKDEWIDGETS = @MAKEKDEWIDGETS@ +MCOPIDL = @MCOPIDL@ +MEINPROC = @MEINPROC@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TOPSUBDIRS = @TOPSUBDIRS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XMLLINT = @XMLLINT@ +X_RPATH = @X_RPATH@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +am__leading_dot = @am__leading_dot@ +am__tar = @am__tar@ +am__untar = @am__untar@ +#>- bindir = @bindir@ +#>+ 2 +DEPDIR = .deps +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +kde_appsdir = @kde_appsdir@ +kde_bindir = @kde_bindir@ +kde_confdir = @kde_confdir@ +kde_datadir = @kde_datadir@ +kde_htmldir = @kde_htmldir@ +kde_icondir = @kde_icondir@ +kde_kcfgdir = @kde_kcfgdir@ +kde_libs_htmldir = @kde_libs_htmldir@ +kde_libs_prefix = @kde_libs_prefix@ +kde_locale = @kde_locale@ +kde_mimedir = @kde_mimedir@ +kde_moduledir = @kde_moduledir@ +kde_servicesdir = @kde_servicesdir@ +kde_servicetypesdir = @kde_servicetypesdir@ +kde_sounddir = @kde_sounddir@ +kde_styledir = @kde_styledir@ +kde_templatesdir = @kde_templatesdir@ +kde_wallpaperdir = @kde_wallpaperdir@ +kde_widgetdir = @kde_widgetdir@ +tdeinitdir = @tdeinitdir@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +xdg_appsdir = @xdg_appsdir@ +xdg_directorydir = @xdg_directorydir@ +xdg_menudir = @xdg_menudir@ +KDE_LANG = de +#>- SUBDIRS = $(AUTODIRS) +#>+ 1 +SUBDIRS =. +KDE_DOCS = AUTO +KDE_MANS = AUTO +#>- all: all-recursive +#>+ 1 +all: docs-am all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) +#>- @for dep in $?; do \ +#>- case '$(am__configure_deps)' in \ +#>- *$$dep*) \ +#>- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ +#>- && exit 0; \ +#>- exit 1;; \ +#>- esac; \ +#>- done; \ +#>- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdemultimedia/noatun/Makefile'; \ +#>- cd $(top_srcdir) && \ +#>- $(AUTOMAKE) --gnu docs/tdemultimedia/noatun/Makefile +#>+ 12 + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdemultimedia/noatun/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/tdemultimedia/noatun/Makefile + cd $(top_srcdir) && perl ../scripts/admin/am_edit -p../scripts/admin docs/tdemultimedia/noatun/Makefile.in +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +#>- distdir: $(DISTFILES) +#>+ 1 +distdir: distdir-nls $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +#>- uninstall: uninstall-recursive +#>+ 1 +uninstall: uninstall-docs uninstall-nls uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +#>- clean: clean-recursive +#>+ 1 +clean: kde-rpo-clean clean-recursive + +#>- clean-am: clean-generic mostlyclean-am +#>+ 1 +clean-am: clean-docs clean-bcheck clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +#>- install-data-am: +#>+ 1 +install-data-am: install-docs install-nls + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic ctags \ + ctags-recursive distclean distclean-generic distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ + tags-recursive uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: + +#>+ 2 +KDE_DIST=index.docbook index.cache.bz2 Makefile.in Makefile.am + +#>+ 24 +index.cache.bz2: $(srcdir)/index.docbook $(KDE_XSL_STYLESHEET) index.docbook + @if test -n "$(MEINPROC)"; then echo $(MEINPROC) --check --cache index.cache.bz2 $(srcdir)/index.docbook; $(MEINPROC) --check --cache index.cache.bz2 $(srcdir)/index.docbook; fi + +docs-am: index.cache.bz2 + +install-docs: docs-am install-nls + $(mkinstalldirs) $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/noatun + @if test -f index.cache.bz2; then \ + echo $(INSTALL_DATA) index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/noatun/; \ + $(INSTALL_DATA) index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/noatun/; \ + elif test -f $(srcdir)/index.cache.bz2; then \ + echo $(INSTALL_DATA) $(srcdir)/index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/noatun/; \ + $(INSTALL_DATA) $(srcdir)/index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/noatun/; \ + fi + -rm -f $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/noatun/common + $(LN_S) $(kde_libs_htmldir)/$(KDE_LANG)/common $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/noatun/common + +uninstall-docs: + -rm -rf $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/noatun + +clean-docs: + -rm -f index.cache.bz2 + + +#>+ 13 +install-nls: + $(mkinstalldirs) $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/noatun + @for base in index.docbook ; do \ + echo $(INSTALL_DATA) $$base $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/noatun/$$base ;\ + $(INSTALL_DATA) $(srcdir)/$$base $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/noatun/$$base ;\ + done + +uninstall-nls: + for base in index.docbook ; do \ + rm -f $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/noatun/$$base ;\ + done + + +#>+ 5 +distdir-nls: + for file in index.docbook ; do \ + cp $(srcdir)/$$file $(distdir); \ + done + +#>+ 15 +force-reedit: + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdemultimedia/noatun/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/tdemultimedia/noatun/Makefile + cd $(top_srcdir) && perl ../scripts/admin/am_edit -p../scripts/admin docs/tdemultimedia/noatun/Makefile.in + + +#>+ 21 +clean-bcheck: + rm -f *.bchecktest.cc *.bchecktest.cc.class a.out + +bcheck: bcheck-recursive + +bcheck-am: + @for i in ; do \ + if test $(srcdir)/$$i -nt $$i.bchecktest.cc; then \ + echo "int main() {return 0;}" > $$i.bchecktest.cc ; \ + echo "#include \"$$i\"" >> $$i.bchecktest.cc ; \ + echo "$$i"; \ + if ! $(CXX) $(DEFS) -I. -I$(srcdir) -I$(top_builddir) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(KDE_CXXFLAGS) --dump-class-hierarchy -c $$i.bchecktest.cc; then \ + rm -f $$i.bchecktest.cc; exit 1; \ + fi ; \ + echo "" >> $$i.bchecktest.cc.class; \ + perl $(top_srcdir)/admin/bcheck.pl $$i.bchecktest.cc.class || { rm -f $$i.bchecktest.cc; exit 1; }; \ + rm -f a.out; \ + fi ; \ + done + + +#>+ 3 +final: + $(MAKE) all-am + +#>+ 3 +final-install: + $(MAKE) install-am + +#>+ 3 +no-final: + $(MAKE) all-am + +#>+ 3 +no-final-install: + $(MAKE) install-am + +#>+ 3 +kde-rpo-clean: + -rm -f *.rpo + +#>+ 3 +nmcheck: +nmcheck-am: nmcheck diff --git a/tde-i18n-de/docs/tdemultimedia/noatun/index.cache.bz2 b/tde-i18n-de/docs/tdemultimedia/noatun/index.cache.bz2 Binary files differnew file mode 100644 index 00000000000..180203febfc --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/noatun/index.cache.bz2 diff --git a/tde-i18n-de/docs/tdemultimedia/noatun/index.docbook b/tde-i18n-de/docs/tdemultimedia/noatun/index.docbook new file mode 100644 index 00000000000..3e0167513a8 --- /dev/null +++ b/tde-i18n-de/docs/tdemultimedia/noatun/index.docbook @@ -0,0 +1,644 @@ +<?xml version="1.0" ?> +<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [ + <!ENTITY kappname "&noatun;"> + <!ENTITY package "tdemultimedia"> + <!ENTITY % German "INCLUDE" +> <!-- change language only here --> + <!ENTITY % addindex "IGNORE"> +]> + +<book lang="&language;"> +<bookinfo> +<title +>Das Handbuch zu &noatun;</title> + +<authorgroup> +<author +><firstname +>Charles</firstname +> <surname +>Samuels</surname +> <affiliation +> <address +><email +>[email protected]</email +></address> +</affiliation> +</author> +<othercredit role="translator" +><firstname +>Frank</firstname +><surname +>Schütte</surname +><affiliation +><address +><email +>[email protected]</email +></address +></affiliation +><contrib +>Deutsche Übersetzung</contrib +></othercredit +> +</authorgroup> + +<copyright> +<year +>2001</year +><year +>2002</year> +<holder +>Charles Samuels</holder> +</copyright> + +<legalnotice +>&FDLNotice;</legalnotice> + +<date +>2002-03-01</date> +<releaseinfo +>2.00.00</releaseinfo +> <!-- Use App version here --> + +<abstract> +<para +>&noatun; ist ein vielseitiger und erweiterbarer Medienspieler für &kde;.</para> +</abstract> + +<keywordset> +<keyword +>KDE</keyword> +<keyword +>Noatun</keyword> +<keyword +>tdemultimedia</keyword> +<keyword +>mp3</keyword> +<keyword +>Musik</keyword> +<keyword +>Medien</keyword> +</keywordset> +</bookinfo> + +<chapter id="introduction"> +<title +>Einleitung</title> + +<para +>&noatun; ist ein vielseitiger und erweiterbarer Medienspieler für &kde;.</para> + +<sect1 id="features"> +<title +>Fähigkeiten</title> + +<para +>Bei &noatun; handelt es sich um eine umfangreiche Oberfläche zu &arts; — dem Analogen Real-Time-Syntesizer. Um ein zusätzliches Abspielobjekt hinzuzufügen, kann man unter <ulink url="http://noatun.kde.org/plugins/" +>http://notaun.kde.org/plugins.phtml</ulink +> oder <ulink url="http://mpeglib.sf.net" +>http://mpeglib.sf.net</ulink +> nachschauen. Standardmäßig unterstützt &arts; MP3 und MPEG-1. Vorbis wird unterstützt, falls die Vorbis-Bibliotheken bei der Kompilierung von &kde; verfügbar waren. </para> + +</sect1> +</chapter> + +<chapter id="using-noatun"> +<title +>Benutzung von &noatun;</title> + +<para +>&noatun; startet standardmäßig mit dem Hervorragend-Plugin als Benutzeroberfläche. Diese Oberfläche hat von allen die größte Ähnlichkeit zu anderen &kde;-Anwendungen.</para> + +<para +>&noatun; ist insofern einzigartig als keine zwei Installationen identisch sind. Außerdem gibt es keine Hauptoberfläche, auch wenn es eine Standardeinstellung gibt. Man kann beliebige Plugins miteinander kombinieren und so &noatun; an die eigenen Wünsche perfekt anpassen. </para> + +<sect1 id="title-format"> +<title +>Titelformat</title> +<para +>Der Einrichtungsdialog zu &noatun; hat ein Textfeld zur Einstellung des <guilabel +>Titelformates</guilabel +>. Man kann mit einer Formatierungszeichenkette festlegen, wie Titel erscheinen sollen. </para> + +<itemizedlist> +<listitem +><para +>Jeder Text erscheint normal, wenn er nicht innerhalb eines <literal +>$( )</literal +> eingeschlossen ist.</para +></listitem> +<listitem +><para +>Der Text innerhalb von <literal +>$( )</literal +> wird durch &noatun; durch den Inhalt der angegebenen Einstellung ersetzt.</para +></listitem> +<listitem +><para +>Falls sich innerhalb des <literal +>$( )</literal +> Anführungszeichen befinden, wird der Text innerhalb der Anführungszeichen normal dargestellt, falls eine Eigenschaft dieses Namens existiert.</para +></listitem> +<listitem +><para +>Anführungszeichen können entweder am Beginn, am Ende oder am Beginn und Ende von <literal +>$( )</literal +> eingefügt werden.</para +></listitem> +</itemizedlist> + +<para +>Zum Beispiel wird <literal +>$(bitrate)</literal +> durch die Bitrate der Datei ersetzt, so wie sie vom Metatag-Plugin gelesen worden ist. Falls man innerhalb des Feldes Anführungszeichen setzt, so wird der Text darin dargestellt: <literal +>$(bitrate"kbps")</literal +> zeigt z.B. die Bitrate der Datei gefolgt von den Buchstaben <literal +>"kbps"</literal +> an. Falls die Eigenschaft <quote +>bitrate</quote +> nicht existiert, wird gar nichts angezeigt. </para +> +</sect1> + +</chapter> + +<chapter id="using-noatun-plugins"> +<title +>Benutzung von &noatun;-Plugins</title> + +<para +>Um ein anderes Plugin auszuwählen, rufen Sie im Menü <guimenuitem +>Einstellungen</guimenuitem +> <guimenuitem +>&noatun; einrichten ...</guimenuitem +> aus. Auf der Karteikarte <guilabel +>Plugins</guilabel +> können Sie den gewünschten Listeneintrag auswählen. Man aktiviert ein Plugin, indem man das Ankreuzfeld neben dem Namen markiert. Für &noatun; ist mindestens ein User-Interface-Plugin und genau ein Stücklisten-Plugin erforderlich. </para> + +<sect1 id="milk-chocolate"> +<title +>Vollmilchschokolade (Milk Chocolate)</title> + +<para +>Milk Chocolate ist eine kleine, einfache Benutzeroberfläche. Die Knöpfe verhalten sich ähnlich wie bei einem CD-Spieler; der Knopf zum Auswerfen öffnet die Stückliste. Der Knopf mit dem Kreuz daraus entfernt den aktuellen Stücklisteneintrag, nicht jedoch die Datei. Der Knopf mit dem Pfeil schaltet die Endloswiederholung ein. Sie erhalten ein Menü durch klicken auf die <mousebutton +>rechte</mousebutton +> Maustaste im Fenster.</para> + +</sect1> + +<sect1 id="young-hickory"> + +<title +>Young Hickory</title> + +<para +>Young Hickory ist ein Plugin für den Systembereich in der &kde;-Kontrollleiste. Dieser befindet sich standardmäßig links neben der Uhr.</para> + +<para +>Klicken Sie mit der <mousebutton +>rechten</mousebutton +> Maustaste auf das Symbol, um ein kleines Menü aufzurufen. Klicken auf die <mousebutton +>linke</mousebutton +> Maustaste schaltet die Sichtbarkeit der &noatun;-Bedienoberfläche ein und aus. Anzumerken ist, dass unter anderem Stücklisten nicht als zur Bedienoberfläche zugehörig betrachtet werden.</para> + +</sect1> + +<sect1 id="html-exporter"> +<title +><acronym +>HTML</acronym +>-Stücklistenexport</title> + +<para +>Diese Plugin überträgt Ihre Stückliste in eine <acronym +>HTML</acronym +>-Tabelle. Die Einrichtungsseite erlaubt die Einstellung von Farben, Hintergrundbild und die Aktivierung des Überstreich-Modus (Veränderung der Farbe einer Verknüpfung beim Überstreichen mit dem Mauszeiger).</para> + +<para +>Wenn Sie die Einstellungen vorgenommen haben, können Sie im Menü <guimenu +>Aktionen</guimenu +> mit dem Eintrag <guimenuitem +>Stücklistenexport</guimenuitem +> einen Dateidialog öffnen, der die Auswahl der Zieldatei ermöglicht. </para> + +</sect1> + +<sect1 id="kjofol-skin"> +<title +><application +>K-Jöfol</application +>-Oberflächen</title> + +<para +>Der &noatun; <application +>K-Jöfol</application +> Oberflächenlader ist eine teilweise Reimplementation des gleichnamigen &Windows;-Programms.</para> + +<para +>&noatun;s Implementation hat leider einige Begrenzungen. Die Oberflächen müssen zum Beispiel unkomprimiert sein.</para> + +<para +>Um eine Oberfläche (im &Windows;-ZIP-Format) zu installieren, können Sie den Oberflächenlader, den im Fenster &noatun; Einstellungen finden, nutzen.</para> + +<para +>Weil einige Oberflächen nicht richtig zusammengestellt werden und der Oberflächenlader nicht Eventualitäten berücksichtigen kann können Sie noch diesen Anweisungen folgen, sollte die Installation einer Oberfläche nicht klappen:</para> + +<screen +><prompt +>%</prompt +> <userinput +><command +>cd</command +> <filename class="directory" +>$KDEHOME/share/apps/noatun</filename +></userinput> +<prompt +>%</prompt +> <userinput +><command +>mkdir</command +> <option +>Oberflächen</option +></userinput +> (wenn benötigt) +<prompt +>%</prompt +> <userinput +><command +>cd</command +> <option +>Oberflächen</option +></userinput> +<prompt +>%</prompt +> <userinput +><command +>mkdir</command +> <option +>neue_Oberfläche</option +> ; <command +>cd</command +> <replaceable +>neue_Oberfläche</replaceable +></userinput> +<prompt +>%</prompt +> <userinput +><command +>unzip</command +> <replaceable +>/Pfad/zu/neue_Oberfläche.zip</replaceable +></userinput +></screen> + +<para +>Sie können mit Hilfe des Tutorials auf <ulink url="http://www.angelfire.com/mo/nequeim/tutorial.html" +>http://www.angelfire.com/mo/nequiem/tutorial.html</ulink +> Oberflächen selbst erstellen. </para> + +</sect1> + +<sect1 id="splitplaylist"> +<title +>Aufgeteilte Abspielliste</title> + +<para +>Die aufgeteilte Abspielliste hat ein einfaches Design. Ein Doppelklick auf einen Eintrag startet dessen Wiedergabe (eine andere Möglichkeit ist dessen Auswahl und die <keycap +>Enter</keycap +>-Taste). Außerdem kann man Dateien oder &URL;s auf die Abspielliste ziehen. </para> + +<para +>Seit &kde; 3.0 speichert die aufgeteilte Abspielliste (<acronym +>SPL</acronym +>) ihre Daten im &XML;-Format, importiert aber automatisch die <acronym +>m3u</acronym +>-Liste, falls eine &XML;-Datei nicht existiert. Das heißt, man kann zur automatischen Erzeugung von Stücklisten einfach in die m3u-Datei schreiben und die &XML;-Datei löschen. </para> + +<para +>Der Name aufgeteilte Abspielliste ist ein bisschen irreführend, da die Liste nicht wirklich geteilt ist. Der Name stammt vom ursprünglichen geteilten Design (aus der Anfangszeit von &noatun;). </para> +</sect1> + +<sect1 id="winampskin"> +<title +>Winamp-Oberflächen</title> +<para +>Falls man die <trademark +>Winamp</trademark +>-Oberfläche verwendet, erscheint sie vermutlich vertraut. Klicken auf den Timer schaltet zwischen heraufzählen und herunterzählen um. Wählt man den Scope-Bereich aus, so wird zwischen aktiviertem und deaktiviertem Scope umgeschaltet. Durch Doppelklicken auf die Titelleiste kann man den Schattenmodus umschalten. Klicken mit der <mousebutton +>rechten</mousebutton +> Maustaste auf das Symbol oben links zeigt die Standard-Werkzeugleiste von &noatun;. </para> +<para +>Man kann eine neue Oberfläche installieren, indem man unter <filename class="directory" +>$KDEHOME/share/apps/noatun/skins/winamp</filename +> ein neues Verzeichnis anlegt und die Oberfläche dort auspackt. <trademark +>Winamp</trademark +>-Dateien mit der Endung <literal role="extension" +>.wsz</literal +> werden wie normale ZIP-Dateien behandelt. Man sollte sie vor dem Auspacken allerdings umbenennen. </para> +</sect1> + +<sect1 id="metatag"> +<title +>Metatag</title> +<para +>Metatag ist ein Plugin, das mit Hilfe von KFile Informationen über eine Datei einliest. Dieser Mechanismus wird auch für die Kurzhilfen von &konqueror; verwendet. Neben der Anzeige von Informationen können diese auch über das Menü <guimenu +>Aktionen</guimenu +> <guimenu +>Notizeditor ...</guimenu +> geändert werden. Sowohl <acronym +>ID3</acronym +>- als auch OggVorbis-Tags können bearbeitet werden. Außerdem wird die Bitrate eingelesen. </para> +</sect1> + +<sect1 id="keyz"> +<title +>Keyz</title> +<para +>Carsten Pfeiffer hat sich gegen die lange Tradition in &noatun; entschieden, Plugins in einer möglichst unorthodoxen Weise zu benennen. Der Grund für die Konvertierung eines S zu einem Z ist nicht bekannt. Es klingt etwa so, wie Sprecher des "american-english" es sowieso aussprechen würden! </para> +<para +>Dieses Plugin ermöglicht die Verknüpfung von &noatun;-Aktionen mit Tastenkombinationen. Diese Tastenkombinationen funktionieren von überall her, nicht bloß innerhalb von &noatun;. Damit kann man <quote +>Multimedia-Tastaturen</quote +> zum Leben erwecken. </para> +</sect1> + +<sect1 id="ir-control"> +<title +>Infrarot-Bedienung</title> +<para +>Falls man über eine Fernbedienung für den Rechner verfügt (TV-Karten mit <trademark class="registered" +>Brooktree</trademark +>-Tuner verfügen über eine solche) und diese Fernbedienung von <ulink url="http://www.lirc.org" +>LIRC</ulink +> unterstützt wird, kann man dieses Plugin verwenden. Wie bei Keyz erlaubt das Plugin die Verbindung von Aktionen und Knopfdrücken. </para> +<para +>Um eine Aktion mit einem Tastendruck zu verbinden, lädt man das Plugin und geht auf die Seite Infrarot-Fernbedienung im Einrichtungsdialog von &noatun;. Dort wählt man den Tastendruck in der Liste und wählt die durchzuführende Aktion im Auswahlfeld darunter. Falls, wie z.B. bei der Lautstärkeregelung, eine Aktion dauernd wiederholt werden soll, markiert man das entsprechende Ankreuzfeld und wählt das Wiederholungsintervall aus. </para> +<para +>Falls man über eine <acronym +>TV</acronym +>-Karte verfügt, ist ein nützlicher Trick, den Knopf <guibutton +>Stumm</guibutton +> mit der Pause-Taste zu verbinden. Dadurch wird gleichzeitig das <acronym +>TV</acronym +>-Programm stumm geschaltet und &noatun; nimmt seine Wiedergabe wieder auf, und umgekehrt. Das ist sehr nützlich für Werbeunterbrechungen. </para> +</sect1> +</chapter> + +<chapter id="questions-answers-and-tips"> + +<title +>Fragen, Antworten und Tipps</title> + +<qandaset id="faq"> +<title +>Häufig gestellte Fragen</title> +<qandaentry> +<question> +<para +>Die Musik setzt bei der Bewegung von Fenstern häufig aus.</para> +</question> +<answer> +<para +>Man kann die Puffer von &arts; auf folgende Art vergrößern: </para +> + +<itemizedlist +> +<listitem +><para +>&kcontrol; starten</para +></listitem> +<listitem +><para +>die Gruppe <guilabel +>Klänge</guilabel +> auswählen</para +></listitem +> +<listitem +><para +>den Abschnitt <guilabel +>Sound-Server</guilabel +> auswählen</para +></listitem +> +<listitem +><para +>die Antwortzeit vergrößern — 384ms ist auf den meisten Rechnern ausreichend.</para +></listitem +> +</itemizedlist +> + +<para +>Alternativ kann man auch den Sound-Server mit Echtzeit-Priorität starten. Das kann allerdings zum Systemabsturz führen. </para +> + +</answer> +</qandaentry> +<qandaentry> +<question> +<para +>Ich kann eine Stückliste oder eine Benutzeroberfläche nicht entfernen.</para> +</question> +<answer> +<para +>Da &noatun; mindestens eine Benutzeroberfläche und eine Stückliste zur Funktion benötigt, müssen Sie zunächst eine neue Benutzeroberfläche oder eine neue Stückliste laden, bevor Sie die alte löschen können. Eine neue Stückliste ersetzt dabei automatisch die alte. </para> +</answer> +</qandaentry> +<qandaentry> +<question> +<para +>Woher bekomme ich weitere Plugins?</para> +</question> +<answer> +<para +>Entwickler können ihre eigenen Plugins an die <ulink url="http://noatun.kde.org/plugins/" +>&noatun;-Webseite</ulink +> senden. Diese können dann dort von Benutzern wie Ihnen heruntergeladen werden. </para> +</answer> +</qandaentry> +<qandaentry> +<question> +<para +>Wie schreibe ich ein Plugin für &noatun;?</para> +</question> +<answer> +<para +>Dokumentation, eine <acronym +>API</acronym +>-Referenz und Beispielquelltexte sind auf der <ulink url="http://noatun.kde.org" +>&noatun;-Webseite</ulink +> zu finden. Außerdem sind dort (entsprechend dem Geist von "Open Source"-Programmen) die Quelltexte für &noatun; und die Standard-Plugins zu finden. </para> +</answer> +</qandaentry> +</qandaset> +</chapter> + +<chapter id="credits-and-licenses"> +<title +>Mitwirkende und Lizenz</title> + +<para +>Copyright für das Programm 2000-2002 Charles Samuels <email +>[email protected]</email +></para> + +<para +>Copyright für die Dokumentation 2002 Charles Samuels <email +>[email protected]</email +></para> + +<para +>&noatun; wurde von den folgenden Personen programmiert:</para> + +<itemizedlist> +<listitem> +<para +>Charles Samuels <email +>[email protected]</email +></para> +</listitem> +<listitem> +<para +>Neil Stevens <email +>[email protected]</email +></para> +</listitem> +<listitem> +<para +>Stefan Westerfeld <email +>[email protected]</email +></para> +</listitem> +<listitem> +<para +>Martin Vogt <email +>[email protected]</email +></para> +</listitem> +<listitem> +<para +>Malte Starostik <email +>[email protected]</email +></para> +</listitem> +<listitem> +<para +>Nikolas Zimmermann <email +>[email protected]</email +></para> +</listitem> +<listitem> +<para +>Stefan Schimanski <email +>[email protected]</email +></para> +</listitem> +</itemizedlist> +<para +>Deutsche Übersetzung: Frank Schütte <email +>[email protected]</email +></para +> +&underFDL; &underBSDLicense; </chapter> + +<appendix id="installation"> +<title +>Installation</title> + +<sect1 id="how-to-obtain-Noatun"> +<title +>Wie Sie &noatun; erhalten</title> +&install.intro.documentation; </sect1> + +<sect1 id="requirements"> +<title +>Voraussetzungen</title> + +<para +>Für &noatun; benötigen Sie mindestens einen Rechner mit einem Pentium Prozessor mit 200 MHz mit &Linux;, einen PowerPC mit &Linux; 2.4.1 oder neuer, oder eines von verschiedenen anderen Systemen. Zusätzliche Systeme werden in späteren Versionen unterstützt.</para> + +<para +>&arts; kann leicht auf alle Plattformen portiert werden, die pthread-Unterstützung und das <acronym +>OSS</acronym +> Klangausgabesystem verwenden; unter &Linux; wird auch das <acronym +>ALSA</acronym +>-System unterstützt.</para> + +</sect1> + +<sect1 id="compilation-and-installation"> +<title +>Kompilierung und Installation</title> +&install.compile.documentation; <para +>Falls Probleme auftreten, wenden Sie sich bitte an den Autor <email +>[email protected]</email +>.</para> + +<para +>Wenn Sie diese Dokumentation lesen, haben Sie &noatun; vermutlich bereits kompiliert.</para> + +</sect1> + +</appendix> + +<glossary id="glossary"> +<title +>Glossar</title> + +<glossentry id="gloss-mc"> +<glossterm +>Vollmilchschokolade</glossterm +><glossdef> +<para +>Vollmilchschokolade ist eine einfache, minimalistische Benutzeroberfläche </para +></glossdef +></glossentry> + +<glossentry id="gloss-arts"> +<glossterm +>&arts;</glossterm +><glossdef> +<para +>&arts; ist der analoge Echtzeit-Synthesizer. Es handelt sich um ein mächtiges Medienprogramm, das von &noatun; verwendet wird. </para +></glossdef +></glossentry> +<glossentry id="gloss-kj"> +<glossterm +>K-Jöfol</glossterm +><glossdef> +<para +>Dieses Plugin kann Oberflächen laden, die ursprünglich für den &Windows;-Medienspieler gleichen namens entwickelt wurden. </para +></glossdef +></glossentry> + +<glossentry id="gloss-keyz"> +<glossterm +>Keyz</glossterm +><glossdef> +<para +>Mit Keyz kann man innerhalb von &noatun; Tastaturkurzbefehlen Aktionen zuordnen. </para +></glossdef +></glossentry> +<glossentry id="gloss-young-hickory"> +<glossterm +>Young Hickory</glossterm +><glossdef> +<para +>Young Hickory ist ein Plugin für das Systemtablett. </para +></glossdef +></glossentry> +<glossentry id="gloss-kaiman"> +<glossterm +>Noatun</glossterm +><glossdef> +<para +>Kaiman ist ein Plugin, das Oberflächen des Medienspielers GQMPEG laden kann. Kaiman ist auch der Vorgänger von &noatun; und wurde in der &kde;-Version 2.0 zusammen mit &kde; ausgeliefert. Seit &noatun; in &kde; 2.1 eingeführt wurde, wurde der Oberflächenlader von Kaiman ein &noatun;-Plugin. </para +></glossdef +></glossentry> + +</glossary> + +&documentation.index; +</book> + |