diff options
Diffstat (limited to 'muse')
| -rw-r--r-- | muse/CMakeLists.txt | 14 | ||||
| -rw-r--r-- | muse/ChangeLog | 2 | ||||
| -rw-r--r-- | muse/doc/CMakeLists.txt | 24 | ||||
| -rw-r--r-- | muse/doc/dimpl.odt | bin | 0 -> 37053 bytes | |||
| -rw-r--r-- | muse/doc/dimpl/CMakeLists.txt | 41 | ||||
| -rw-r--r-- | muse/doc/dimpl/dimpl.tex | 865 | ||||
| -rw-r--r-- | muse/doc/man/de/CMakeLists.txt | 52 | ||||
| -rw-r--r-- | muse/doc/man/de/automation.tex | 33 | ||||
| -rw-r--r-- | muse/doc/man/de/figurepath.tex.in | 2 | ||||
| -rw-r--r-- | muse/doc/man/de/installation.tex | 63 | ||||
| -rw-r--r-- | muse/doc/man/de/man-de.tex | 413 | ||||
| -rw-r--r-- | muse/doc/man/de/midirecording.tex | 119 | ||||
| -rw-r--r-- | muse/doc/man/de/miditracks.tex | 132 | ||||
| -rw-r--r-- | muse/doc/man/de/projekte.tex | 102 | ||||
| -rw-r--r-- | muse/doc/man/de/struktur.tex | 43 | ||||
| -rw-r--r-- | muse/doc/manual-de.odt | bin | 0 -> 50551 bytes | |||
| -rw-r--r-- | muse/muse/CMakeLists.txt | 25 | ||||
| -rw-r--r-- | muse/muse/arranger.cpp (renamed from muse/muse/arranger/arranger.cpp) | 4 | ||||
| -rw-r--r-- | muse/muse/arranger.h (renamed from muse/muse/arranger/arranger.h) | 0 | ||||
| -rw-r--r-- | muse/muse/arranger/CMakeLists.txt | 60 | ||||
| -rw-r--r-- | muse/muse/canvas.cpp (renamed from muse/muse/arranger/canvas.cpp) | 0 | ||||
| -rw-r--r-- | muse/muse/canvas.h (renamed from muse/muse/arranger/canvas.h) | 0 | ||||
| -rw-r--r-- | muse/muse/configtrack.cpp (renamed from muse/muse/arranger/configtrack.cpp) | 0 | ||||
| -rw-r--r-- | muse/muse/configtrack.h (renamed from muse/muse/arranger/configtrack.h) | 0 | ||||
| -rw-r--r-- | muse/muse/configtrack.ui (renamed from muse/muse/arranger/configtrack.ui) | 0 | ||||
| -rw-r--r-- | muse/muse/importmidi.cpp | 2 | ||||
| -rw-r--r-- | muse/muse/jack.cpp | 25 | ||||
| -rw-r--r-- | muse/muse/midiportinfo.ui (renamed from muse/muse/arranger/midiportinfo.ui) | 0 | ||||
| -rw-r--r-- | muse/muse/miditrackinfo.ui (renamed from muse/muse/arranger/miditrackinfo.ui) | 0 | ||||
| -rw-r--r-- | muse/muse/mstrip.cpp | 76 | ||||
| -rw-r--r-- | muse/muse/mstrip.h | 3 | ||||
| -rw-r--r-- | muse/muse/muse.cpp | 2 | ||||
| -rw-r--r-- | muse/muse/partdrag.cpp (renamed from muse/muse/arranger/partdrag.cpp) | 0 | ||||
| -rw-r--r-- | muse/muse/partdrag.h (renamed from muse/muse/arranger/partdrag.h) | 0 | ||||
| -rw-r--r-- | muse/muse/preferences.cpp | 2 | ||||
| -rw-r--r-- | muse/muse/selectfilter.h (renamed from muse/muse/arranger/selectfilter.h) | 0 | ||||
| -rw-r--r-- | muse/muse/seqmsg.cpp | 2 | ||||
| -rw-r--r-- | muse/muse/song.cpp | 21 | ||||
| -rw-r--r-- | muse/muse/songfile.cpp | 2 | ||||
| -rw-r--r-- | muse/muse/strip.h | 3 | ||||
| -rw-r--r-- | muse/muse/tllineedit.cpp (renamed from muse/muse/arranger/tllineedit.cpp) | 0 | ||||
| -rw-r--r-- | muse/muse/tllineedit.h (renamed from muse/muse/arranger/tllineedit.h) | 0 | ||||
| -rw-r--r-- | muse/muse/tlswidget.cpp (renamed from muse/muse/arranger/tlswidget.cpp) | 0 | ||||
| -rw-r--r-- | muse/muse/tlswidget.h (renamed from muse/muse/arranger/tlswidget.h) | 0 | ||||
| -rw-r--r-- | muse/muse/tlwidget.cpp (renamed from muse/muse/arranger/tlwidget.cpp) | 0 | ||||
| -rw-r--r-- | muse/muse/tlwidget.h (renamed from muse/muse/arranger/tlwidget.h) | 0 | ||||
| -rw-r--r-- | muse/muse/tlwlayout.cpp (renamed from muse/muse/arranger/tlwlayout.cpp) | 0 | ||||
| -rw-r--r-- | muse/muse/tlwlayout.h (renamed from muse/muse/arranger/tlwlayout.h) | 0 | ||||
| -rw-r--r-- | muse/muse/trackdrag.cpp (renamed from muse/muse/arranger/trackdrag.cpp) | 0 | ||||
| -rw-r--r-- | muse/muse/trackdrag.h (renamed from muse/muse/arranger/trackdrag.h) | 0 | ||||
| -rw-r--r-- | muse/muse/trackinfo.cpp (renamed from muse/muse/arranger/trackinfo.cpp) | 0 | ||||
| -rw-r--r-- | muse/muse/trackinfo.h (renamed from muse/muse/arranger/trackinfo.h) | 0 | ||||
| -rw-r--r-- | muse/muse/trelement.h (renamed from muse/muse/arranger/trelement.h) | 5 | ||||
| -rw-r--r-- | muse/muse/wave.cpp | 16 | 
54 files changed, 71 insertions, 2082 deletions
diff --git a/muse/CMakeLists.txt b/muse/CMakeLists.txt index 3712f50d..2286d40b 100644 --- a/muse/CMakeLists.txt +++ b/muse/CMakeLists.txt @@ -93,16 +93,6 @@ endif (NOT QT4_FOUND)  include(${QT_USE_FILE})  ## -## find texexec (ConTeXt) -## - -find_path( TEXEXEC_PATH texutil ) -if (NOT TEXEXEC_PATH) -      message("texexec from ConTeXt package not found. Documentation will not be build") -endif (NOT TEXEXEC_PATH) - - -##  ## find doxygen  ##    TODO @@ -209,6 +199,8 @@ endif (NOT JACK_INCDIR)  ##  ## check for dssi +##    dssi >= 0.9.0 +##    liblo >= 0.23  ##  if (ENABLE_DSSI) @@ -339,5 +331,5 @@ IF(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake")    INCLUDE(CPack)  ENDIF(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake") -subdirs(al awl grepmidi plugins midiplugins muse share synti doc) +subdirs(al awl grepmidi plugins midiplugins muse share synti) diff --git a/muse/ChangeLog b/muse/ChangeLog index dc8f38a3..d02cd328 100644 --- a/muse/ChangeLog +++ b/muse/ChangeLog @@ -1,3 +1,5 @@ +5.7. (ws) +      - fix midi metronome output routing  29.6. (ws)        - fix sending proper note off's at stop  27.6. (ws) diff --git a/muse/doc/CMakeLists.txt b/muse/doc/CMakeLists.txt deleted file mode 100644 index 387df934..00000000 --- a/muse/doc/CMakeLists.txt +++ /dev/null @@ -1,24 +0,0 @@ -#============================================================================= -#  MusE -#  Linux Music Editor -#  $Id:$ -# -#  Copyright (C) 2002-2006 by Werner Schweer and others -# -#  This program is free software; you can redistribute it and/or modify -#  it under the terms of the GNU General Public License version 2. -# -#  This program is distributed in the hope that it will be useful, -#  but WITHOUT ANY WARRANTY; without even the implied warranty of -#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -#  GNU General Public License for more details. -# -#  You should have received a copy of the GNU General Public License -#  along with this program; if not, write to the Free Software -#  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -#============================================================================= - -if (TEXEXEC_PATH) -      subdirs( dimpl man ) -endif (TEXEXEC_PATH) - diff --git a/muse/doc/dimpl.odt b/muse/doc/dimpl.odt Binary files differnew file mode 100644 index 00000000..e62ccd90 --- /dev/null +++ b/muse/doc/dimpl.odt diff --git a/muse/doc/dimpl/CMakeLists.txt b/muse/doc/dimpl/CMakeLists.txt deleted file mode 100644 index 9611881e..00000000 --- a/muse/doc/dimpl/CMakeLists.txt +++ /dev/null @@ -1,41 +0,0 @@ -#============================================================================= -#  MusE -#  Linux Music Editor -#  $Id:$ -# -#  Copyright (C) 2002-2006 by Werner Schweer and others -# -#  This program is free software; you can redistribute it and/or modify -#  it under the terms of the GNU General Public License version 2. -# -#  This program is distributed in the hope that it will be useful, -#  but WITHOUT ANY WARRANTY; without even the implied warranty of -#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -#  GNU General Public License for more details. -# -#  You should have received a copy of the GNU General Public License -#  along with this program; if not, write to the Free Software -#  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -#============================================================================= - -set (SRC dimpl.tex) - -add_custom_target ( -      dimpl -      DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/dimpl.tex -      COMMAND ${TEXEXEC_PATH}/texexec -      ARGS  --language=en --verbose --batch --pdf -            --result=dimpl.pdf -            ${CMAKE_CURRENT_SOURCE_DIR}/dimpl.tex -      WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} -      ) - -install_files ( /share/${MusE_INSTALL_NAME}/doc/ .pdf -   ${CMAKE_CURRENT_BINARY_DIR}/dimpl.pdf ) - -set (extraClean dimpl.log dimpl.tmp dimpl.tuo dimpl.tui -   dimpl-mpgraph.mp mpgraph.mp ) - -set_directory_properties( PROPERTIES -   ADDITIONAL_MAKE_CLEAN_FILES "${extraClean}" -   ) diff --git a/muse/doc/dimpl/dimpl.tex b/muse/doc/dimpl/dimpl.tex deleted file mode 100644 index da5ea6c6..00000000 --- a/muse/doc/dimpl/dimpl.tex +++ /dev/null @@ -1,865 +0,0 @@ -%==================================================================== -%     Muse -%     Design & Implementation -% -% (C) 2005 Copyright: Werner Schweer and Others -%==================================================================== - -%---------------------------------------------------------- -%     Setup -%---------------------------------------------------------- - -%\showframe -%\showsetups -\usemodule[chart] -\setupcolors[state=start] -\setupbodyfont[Palatino] -\language[en] -\enableregime[il1] - -\startuseMPgraphic{FunnyFrame} -      picture p; numeric o; path a, b; pair c; -      p := textext.rt(\MPstring{FunnyFrame}); -      o := BodyFontSize; -      a := unitsquare xyscaled(OverlayWidth,OverlayHeight); -      p := p shifted (20, OverlayHeight-ypart center p); -      drawoptions (withpen pencircle scaled 1pt withcolor .625red); -      b := a superellipsed .95; -      fill b withcolor .85white; draw b; -      b := (boundingbox p) superellipsed .95; -      fill b withcolor .85white; draw b; -      draw p withcolor black; -      setbounds currentpicture to a; -    \stopuseMPgraphic - -\defineoverlay[FunnyFrame][\useMPgraphic{FunnyFrame}] -\defineframedtext[FunnyText][frame=off,background=FunnyFrame] -\def\StartFrame{\startFunnyText} -\def\StopFrame{\stopFunnyText} -\def\FrameTitle#1% - {\setMPtext{FunnyFrame}{\hbox spread 1em{\hss\strut#1\hss}}} -\setMPtext{FunnyFrame}{} - - -\define\M{Muse} -\define[1]\Index{{\it #1}\marginpar{#1}\index{#1}} - -\defineindenting[Cmdi][text=,separator=,width=fit,distance=1em] - -\define[1]\Cmd{ -  \Cmdi -  \framed[ -     background=color, -     width=fit, -     align=right, -     backgroundcolor=lightgray, -     framecolor=blue] -     {\tt\space #1}} - -\define[2]\CCmd{ -  \Cmdi -  \framed[ -     background=color, -     width=broad, -     align=right, -     backgroundcolor=lightgray, -     framecolor=blue] -     {\vbox{\hbox{\tt\space #1}\hbox{\tt\space #2}}}} - -%\define\startdescription{\startpacked} -\define\startdescription{} -%\define\stopdescription{\stoppacked} -\define\stopdescription{} - -\define[1]\Fig{\hbox{\externalfigure[pics/#1]}} - -\define[2]\Screen{ -      \placefigure[here][fig:#1]{#2}{\externalfigure[pics/#1][scale=1600]} -      } - -\definedescription[Option][ -      location=left, -      headstyle=bold, -      width=4em, -      before={\startnarrower[left]\setupblank[0pt]}, -      after={\stopnarrower\setupblank}] - -\definedescription[Filetype][ -      location=left, -      headstyle=bold, -      width=4em, -      before={\startnarrower[left]\setupblank[0pt]}, -      after={\stopnarrower\setupblank}] - -\definedescription[FileList][ -      location=left, -      headstyle=bold, -      width=7em, -      before={\startnarrower[left]\setupblank[0pt]}, -      after={\stopnarrower\setupblank}] - -\definedescription[Input][ -      location=left, -      headstyle=bold, -      width=9em, -      before={\startnarrower[left]\setupblank[0pt]}, -      after={\stopnarrower\setupblank}] - -\definedescription[InputN][ -      location=left, -      headstyle=bold, -      width=6em, -      before={\startnarrower[left]\setupblank[0pt]}, -      after={\stopnarrower\setupblank}] - -\define[2]\Figure{ -      \placefigure -         [#1][fig:#2]{} -         {\externalfigure[pics/#2]} -         } - -\define[1]\Menu{ -      \placefigure[right][fig:#1]{} -         {\externalfigure[pics/#1][scale=2000]} -         } - -\definedescription[Opt][location=hanging,headstyle=bold,width=broad] - -\setuptyping[before=\blank\startbackground, after=\stopbackground\blank] % source code with background -\setupwhitespace[medium] - -%---------------------------------------------------------- -%     Body -%---------------------------------------------------------- - -\starttext -   \language[en] -   \mainlanguage[en] -   \startstandardmakeup[doublesided=no] -      \definebodyfont[10pt,11pt,12pt][rm][tfe=Regular at 48pt] -      \tfe\setupinterlinespace -      \hfill \color[red]{\M}\par -      \hfill \color[blue]{Design \&}\par -      \hfill \color[blue]{Implementation}\par -      \vfill -      \definebodyfont[10pt,11pt,12pt][rm][tfb=Regular at 24pt] -      \tfb\setupinterlinespace -      \hfill Version 1.0\par -%%      \hfill April 2005\par -%%      \hfill Werner Schweer -      \stopstandardmakeup - -   \startstandardmakeup[page=no] -      \vfill -      \M\ is hosted on SourceForge:\par -      \type{http://lmuse.sourceforge.net/} -      \blank[line] -      This document was created using \pdfTeX\ and the -      \ConTeXt\ macro package. -      \blank[line] -      \copyright 2005 Werner Schweer and Others -      \stopstandardmakeup - -   \completecontent - -%% -%%======================================================================= -%%    File Formats -%%======================================================================= -%% - -\chapter{Process Structure} - -\chapter{Song} -   \section{Multithreading} - -   \section{Editing} -      \subsection{Realtime Editing} -         \M\ allows for realtime editing. That means that you can edit -         a song while the sequencer is running. -         Two threads want to access data in the main {\tt Song()} class: -         the GUI thread and the realtime sequencer thread. - -         This are the rules how \M\ handles {\tt Song()} data accesses: - -         \startitemize[packed,broad] -            \item the GUI thread can only read {\tt Song()} data -            \item the GUI thread can request the sequencer thread to -               modify Song data -            \item the sequencer thread can modify {\tt Song()} data, but only -               on request of the GUI thread -         \stopitemize - -         Interprocess communication is done via message passing.  -         Communication from the gui thread to the sequencer thread is -         done in the following steps: - -         \startitemize[packed,broad] -            \item the GUI sends a Message to the sequencer thread -                  and waits for an answer -            \item once the sequencer thread is running (the JACK -              client {\tt process()} call) it processes the message and -              sends back an answer to the GUI process. -            \item the GUI process reads the answer and continues -         \stopitemize -             -         This scheme stops the GUI process in a defined state while the -         realtime process can safely manipulate the {\tt Song()} data. - -      \subsection{User Transaction} -    -         A user transaction is a sequence of actions manipulating the -         main {\tt Song()} structure. Each action involves sending a -         message to the realtime thread. This means that every action -         stops the GUI thread for at most one JACK cycle. - -         If a transaction consists of lot of actions then this scheme -         would be too slow. For such cases the sequencer thread is switched -         to "idle" mode, which ensures it is not touching the {\tt Song()} -         data anymore. Then safe manipulation of the data is possible. - -      \subsection{Naming Conventions} - -         There are several methods involved in an edit transaction; -         example for adding a part: -          -         \startitemize[packed,broad] -               \item {\tt cmdAddPart()} -                     This implements a complete undoable user transaction -                     and is called from the gui thread -               \item {\tt addPart()} -                     This method is also called from the gui thread. It -                     implements part of a user transaction. It is not -                     surrounded by {\tt startUndo() endUndo()}. -               \item the realtime part (actually removing the {\tt Part} from the -                     PartList) is done inline during processing of  -                     messages in the sequencer thread. -         \stopitemize -          - -\chapter{File Formats} -      \section{Instrument Definition Files} - -      \M\ Instrument Definition Files are used to describe the -      properties of external midi instruments. - -      IDF-Files have the file extension \type{*.idf} \index{idf} and -      they are searched in the \M\ "instruments" subdirectory (which is on -      my system \type{/usr/share/muse-1.0/instruments}. - -      An instrument definition file should only define one -      instrument. - -      An instrument\index{Instrument definition} is a property of the -      midi channel \index{Midi channel}. -      All found instrument definitions are presented by MusE -      in the Instrument pulldown menu of the midi output port. - -      Example of an instrument definition file: -      \blank - -\starttyping -<?xml version="1.0"?> -<muse version="1.0"> -  <MidiInstrument name="GM"> -    <Init> -      ...MusE event list which initializes instrument -      </Init> -    <PatchGroup name="Piano"> -       <Patch name="Grand Piano" prog="0"/> -       <Patch name="Bright Piano" prog="1"/> -       ... -      </PatchGroup> -    <PatchGroup name="Drum Kits"> -       <drummap name="PoweredStd" hbank="63" lbank="32" prog="0"> -          <entry> -             <name>Clave</name>       -             <enote>24</enote> -             <anote>24</anote> -             </entry> -          <entry> -             <name>SdBrMtSt</name>   -             <enote>25</enote> -             <anote>25</anote> -             </entry> -          ... -          </drummap> -      </PatchGroup> - -    <PatchGroup name="Bass"> -      <Patch name="Acoustic Bass" prog="32"/> -      <Patch name="Fingered Bass" prog="33"/> -      </PatchGroup> -    ... -    <Controller name="Brightness" type="Control" l="74" init="64"> -    ... -    </MidiInstrument> -  </muse> -\stoptyping - -      \blank - -   \subsection{Init Sequence} -      The {\tt Init} section declares a list of midi events to initialize -      the instrument. The section can be empty or absent. - -   \subsection{Patch Groups} -      Patch Groups are used to structure the list of patches. -      PatchGroups\index{PatchGroups} are not mandatory; its valid to write: - -      \blank -\starttyping -<MidiInstrument name="GM"> -  <Patch name="Grand Piano" prog="0"/> -  <Patch name="Bright Piano" prog="1"/> -  <Patch name="Acoustic Bass" prog="32"/> -  <Patch name="Fingered Bass" prog="33"/> -  ... -  </MidiInstrument> -\stoptyping -      \blank - -   \subsection{Patches} - -      The "prog" parameter in a "Patch" is mandatory. Missing -      "hbank" or "lbank" are treated as "don't care". -      Missing "drum" is treated as drum="0". - -      A XG-Patch looks like this: - -      \blank -      \starttyping -<Patch name="Electro" drum="1" hbank="127" -   lbank="0" prog="24"/> -      \stoptyping -      \blank - -      A patch can be associated with a "mode" with one of: -            \blank[medium] -            \Option{1}  - GM\par -            \Option{2}  - GS\par -            \Option{4}  - XG\par -            \blank[big] - -      Example: - -      \blank -      \starttyping -<Patch name="Electro" mode="4" drum="1" hbank="127" -   lbank="0" prog="24"/> -      \stoptyping -      \blank - -      Mode id's can be ore'd together for patches which are valid -      for more than one mode: - -      \blank -      \starttyping -<Patch name="Grand Piano" mode=7" hbank="0" lbank="0" prog="0"/> -      \stoptyping -      \blank - -      example for MusE event (Sysex "XG-On"): - -      \blank -      \starttyping -<event tick="0" type="5" datalen="7"> -  43 10 4c 00 00 7e 00 -  </event> -      \stoptyping -      \blank - -      \type{<Init> ... </Init>} part can be omitted - -   \subsection{Drum Maps} -      A drum map allows to define properties for every note in a patch. -      The {\tt drummap} entry looks like the {\tt Patch} entry and defines -      the banks and the program number for the drummap. - -   \subsection{Controller} -      Controller \index{Controller} have the following properties: - -      \starttabulate -      \NC name:\NC -             arbitrary unique (short) string describing the controller\NC\NR -      \NC n:\NC -            controller number, defines also the controller type:\par -            values from \type{0x0 - 0x7f} are 7Bit controller\par -            values from \type{0x1000 - 0x1ffff} are 14 bit controller with -               MSB/LSB value pairs\par -            values from \type{0x20000 - 0x2ffff} are RPN's\par -            values from \type{0x30000 - 0x3ffff} are NRPN's -            \NC\NR -      \NC min:\NC minimum value for controller\NC\NR -      \NC max:\NC maximum value for controller\NC\NR -      \NC init:\NC -            reset value for controller; when controller value is -            undefined after instrument reset, use the ''undefined'' -            value \type{0x10000} -            \NC\NR -      \stoptabulate - -      the min/max/init values can be ommited - -%% -%%======================================================================= -%%    Midi Plugins -%%======================================================================= -%% -\chapter{Plugins} -      \section{Midi Plugins} - - -      Midi plugins have the file extension \type{*.so} and they are -      searched in the \M\ "{\tt midiplugins} subdirectory (which is on -      my system \type{/usr/lib/muse-1.0/midiplugins}. - -% -%----------------------------------- -%    Midi Filter -%----------------------------------- -% -      \subsection{Midi Filter} - -      Example for an midi plugin which does essentially nothing: - -      First define your custom \type{Filter} class with \type{Mempi} -      as base class. - -\starttyping -#include "../libmidiplugin/mempi.h" - -class Filter : public Mempi { -      virtual void process(unsigned, unsigned, -         MPEventList*, MPEventList*); - -   public: -      Filter(const char* name, const MempiHost*); -      ~Filter() {} -      virtual bool init() { return false; } -      }; - -Filter::Filter(const char* name, const MempiHost* h) -   : Mempi(name, h) -      { -      } -\stoptyping - -      Now comes the main \type{Mempi} function you have to implement: -      \type{process()} which has two parameters, an midi event input -      list and an midi event output list. The example code simply -      copies all events from the input list to the output list. - -\starttyping -void Filter::process(unsigned, unsigned, MPEventList* il, -   MPEventList* ol) -      { -      for (iMPEvent i = il->begin(); i != il->end(); ++i) { -            ol->insert(*i); -            } -      } -\stoptyping - -      When loading the plugin, the \type{Mempi} Host looks for -      the symbol \type{mempi_descriptor}. This function returns a -      pointer to the plugin class description you have to fill in. - -\starttyping -static Mempi* instantiate(const char* name, const MempiHost* h) -      { -      return new Filter(name, h); -      } - -extern "C" { -      static MEMPI descriptor = { -            "Filter", -            "MusE Zero Filter", -            "0.1",                  // filter version string -            MEMPI_FILTER,           // plugin type -            MEMPI_MAJOR_VERSION, MEMPI_MINOR_VERSION, -            instantiate -            }; - -      const MEMPI* mempi_descriptor() { return &descriptor; } -      } -\stoptyping - - -% -%----------------------------------- -%    GUI interface -%----------------------------------- -% -\subsection{GUI interface} -      Every midi plugin can implement a native graphical user -      interface (GUI). For this you have to overload five -      virtual functions. - -\starttyping -   virtual bool hasGui() const { return true; } -\stoptyping -      This function informs the host whether there is an GUI or not. - -\starttyping -   virtual bool guiVisible() const { return gui->isVisible(); } -\stoptyping -      This fuction returns \type{true} if your GUI is visible. - -\starttyping -   virtual void showGui(bool val) const { gui->setShown(val); } -\stoptyping -      This function shows or hides the GUI. - -      There are two helper functions the plugin host uses to save -      and restore the GUI geometry across sessions: - -\starttyping -   virtual void getGeometry(int* x, int* y, int* w, int* h) const; -   virtual void setGeometry(int, int, int, int); -\stoptyping - -% -%----------------------------------- -%    Persistent Parameters -%----------------------------------- -% -\subsection{Persistent Parameters} - -      The plugin host can save and restore plugin parameter across -      sessions. When the host saves his session status, he calls -      the midi plugin function: - -\starttyping -   virtual void getInitData(int* len, const unsigned char**p) const; -\stoptyping - -      You can overload this function to return a pointer to your -      session data and the len of the data block. - -      When the session is restored, the host calls - -\starttyping -   virtual void setInitData(int len, const unsigned char* p); -\stoptyping - -      which you can use to restore the last plugin state. -% -%----------------------------------- -%    Host Access Functions -%----------------------------------- -% - -\subsection{Host Access Functions} - -      The plugin host supplies some functions which are -      accessible through the \type{MempiHost*} in the -      \type{Mempi} interface. - -      The host supplies the following functions: - -\starttyping -      int division() const; -\stoptyping -      \index{division()} -      returns the midi \type{division} value which gives  the number -      of midi ticks per midi beat, typically 384. - -\starttyping -      int tempo(unsigned tick) const; -\stoptyping -      \index{tempo()} -      returns the midi tempo value. - -\starttyping -      unsigned tick2frame(unsigned tick) const; -\stoptyping -      \index{tick2frame()} -      This function converts a transport position given in midi ticks -      to a audio frame position. - -\starttyping -      unsigned frame2tick(unsigned frame) const; -\stoptyping -      \index{frame2tick()} -      This function converts a transport position given in audio frames -      to midi ticks. - -\starttyping -      void bar(int tick, int* bar, int* beat, unsigned* rest) const; -\stoptyping -      \index{bar()} -      This function return bar/beat and a tick rest for a given -      tick position. - -\starttyping -      unsigned bar2tick(int bar, int beat, int tick) const; -\stoptyping -      This is the opposite to the \type{bar} function. It converts -      a time position given in bar/beat/tick into a midi tick value. - -% -%----------------------------------- -%    Midi Synthesizer -%----------------------------------- -% -\subsection{Midi Synthesizer} -      As an example for a midi synthesizer plugin we use a midi -      metronome. - -      Lets start with the class definition: - -\starttyping -#include "../libmidiplugin/mempi.h" - -//--------------------------------------------------------- -//   metronom - simple midi metronom -//--------------------------------------------------------- - -class Metronom : public Mempi { - -   protected: -      struct InitData { -            char measureNote; -            char measureVelo; -            char beatNote; -            char beatVelo; -            } data; -      MetronomGui* gui; -      friend class MetronomGui; - -      unsigned int nextTick; -      unsigned int lastTo; - -      virtual void process(unsigned, unsigned, MPEventList*, -         MPEventList*); - -   public: -      Metronom(const char* name, const MempiHost*); -      ~Metronom(); -      virtual bool init(); - -      virtual bool hasGui() const      { return true;             } -      virtual bool guiVisible() const  { return gui->isVisible(); } -      virtual void showGui(bool val)   { gui->setShown(val);      } -      virtual void getGeometry(int* x, int* y, int* w, int* h) const; -      virtual void setGeometry(int, int, int, int); - -      virtual void getInitData(int*, const unsigned char**) const; -      virtual void setInitData(int, const unsigned char*); -      }; -\stoptyping - -% -%----------------------------------- -%    MESS interface -%----------------------------------- -% -\chapter {The M.E.S.S (MusE Experimental Software Synthesizer) API} - -    M.E.S.S.\index{M.E.S.S.} stands for MusE Experimental Soft Synth and is -    an API/interface (like DSSI) to enable programmers to easily create their -    own softsynths. - -    The interface for a M.E.S.S.-synth consists of two classes, the Mess and -    MessGui. In short, the framework provides the Mess (the synth) midi data -    (notes, controllers and sysexes) and methods that handle the IPC between -    the gui and the synth, so the programmer can focus on DSP-issues instead. - -    The interface for the synth is specified in the mess.h file in the libsynti -    directory. The interface for the MessGui is specified in the gui.h file. - -\starttyping -//--------------------------------------------------------- -//  Mess -//    MusE experimental software synth -//    Instance virtual interface class -//--------------------------------------------------------- - -class Mess { -      MessP* d; - -      int _sampleRate; -      int _channels;                // 1 - mono,  2 - stereo - -   public: -      Mess(int channels); -      virtual ~Mess(); - -      int channels() const       { return _channels;   } -      int sampleRate() const     { return _sampleRate; } -      void setSampleRate(int r)  { _sampleRate = r;    } - -      virtual void process(float** data, int offset, int len) = 0; - -      // the synti has to (re-)implement processEvent() or provide -      // some of the next three functions: - -      virtual bool processEvent(const MidiEvent&); -      virtual bool setController(int, int, int) { return false; } -      virtual bool playNote(int, int, int) { return false; } -      virtual bool sysex(int, const unsigned char*) { return false; } - -      virtual void getInitData(int*, const unsigned char**) const {} -      virtual int getControllerInfo(int, const char**, int*, int*, int*)  -         const { return 0; } -      virtual const char* getPatchName(int, int, int)  -         const { return "?"; } -      virtual const MidiPatch* getPatchInfo(int, const MidiPatch*)  -         const { return 0; } - -      // synthesizer -> host communication -      void sendEvent(MidiEvent);  // called from synti -      MidiEvent receiveEvent();   // called from host -      int eventsPending() const; - -      // GUI interface routines -      virtual bool hasGui() const { return false; } -      virtual bool guiVisible() const { return false; } -      virtual void showGui(bool) {} -      virtual void getGeometry(int* x, int* y, int* w, int* h) const; -      virtual void setGeometry(int, int, int, int) {} -      }; -\stoptyping - -\section{Overview of virtual member functions} -      This is a short description of the virtual functions in the Mess-class: -\subsection{process} -\starttyping -virtual void process(float** data, int offset, int len) = 0; -\stoptyping -      This is where the audio processing takes place. The Mess is called with a float array, and -      it's up to the programmer to fill it with data beginning at data[offset] to data[offset+len]. - -\subsection{processEvent} -      There are two ways to go when it comes to how midi data is fed into the Mess. You can either -      implement processEvent and manage the different event types (controllers, sysexes and notes) -      or implement one or more of the setController, playNote and sysex functions. - - -      Note that overriding processEvent results in setController, playNote and sysex -      not being called! - -\subsection{setController, playNote, sysex} -      The setController, playNote and sysex functions should return false if the event was -      processed, true if the synth was busy. - -\starttyping -virtual bool setController(int channel, int ctrlNo, int value) -virtual bool playNote(int channel, int pitch, int velo) -virtual bool sysex(int length, const unsigned char* data) -\stoptyping - -\subsection{getInitData} -      MusE provides an interface for storing the state of the synth in the project file. -      getInitData is called when the project is saved, and provides a pointer to a data -      block where you store the data which will recreate the synths current state when -      the project is reopened. -\starttyping -virtual void getInitData(int* nrofchars, const unsigned char** data)  -   const {} -\stoptyping - -\subsection{getControllerInfo} -      getControllerInfo is called when the Mess is instantiated, and this is where -      you tell MusE which controllers the Mess supports. The function is called -      repeteadly: just fill in the values for the controller and return the index -      you want to be sent next time. Return 0 when you've given MusE information about -      all controllers your Mess supports. - -      As you can see, the necessary parameters are an index (used internally), a name -      for the controller, an int describing the actual controller number (f.ex. 91 for -      reverb), and finally min and max values for the controller. - -\starttyping -virtual int getControllerInfo(int index, -                              const char** name, -                              int* controller, -                              int* min, -                              int* max) const -\stoptyping - -\subsection{hasGui} -      hasGui is called when the Mess is instantiated, and tells MusE if the synth has -      a gui or not. -\starttyping -virtual bool hasGui() const; -\stoptyping - -\subsection{showGui} -showGui is called from MusE when the gui is supposed to be visible -\starttyping -virtual void showGui(bool show); -\stoptyping - -\subsection{getPatchName, getPatchInfo} -      getPatchName and getPatchInfo are used to give MusE information about patches, -      which can be selected in the track inspector. - -      The getPatchName function specifies three parameters to be passed: channel, -      program, and a third that is unused. It is the responsibility for the synth -      to return the patchname for the particular channel and a program. - -\starttyping -virtual const char* SimpleSynth::getPatchName(int channel, int program,  -                                              int unused) const -\stoptyping - -      getPatchInfo is called repeatedly until the synth returns 0. The synth must -      send information back in a MidiPatch struct. The MidiPatch parameter sent -      contains information on the last MidiPatch that was sent from the synth -      (a null pointer on first call). - -\starttyping -virtual const MidiPatch* getPatchInfo(int channel, -                                      const MidiPatch* previouspatch) -                                      const; - -struct MidiPatch { -      signed char type;   // 1 - GM  2 - GS  4 - XG -      signed char hbank, lbank, prog; -      const char* name; -      }; -\stoptyping - - -\subsection{Descriptor} -      Since the synths are built as shared libraries, you need to specify a descriptor -      for your MESS. They look something like this: (example taken from SimpleSynth/SimpleDrums) - -\starttyping -static Mess* instantiate(int sr, const char* name) - { -  printf("SimpleSynth sampleRate %d\n", sr); -  SimpleSynth* synth = new SimpleSynth(sr); -  if (!synth->init(name)) { -    delete synth; -    synth = 0; -    } -  return synth; - } -extern "C" - { -  static MESS descriptor = { -    "SimpleSynth", -    "Mathias Lundgren (lunar_shuttle@users.sf.net)", -    "0.1", //Version string -    MESS_MAJOR_VERSION, MESS_MINOR_VERSION, -    instantiate, -  }; -  const MESS* mess_descriptor() { return &descriptor; } - } -\stoptyping - -\section{MessGui} -      For the Gui, there's really only one method that is interesting, processEvent. -      processEvent in the gui is called whenever the synth sends it a midiEvent, which -      it does with send(MidiEvent ). -      Since this is the only method of communicating the gui can send midimessages -      to the synth via sendEvent, sendController and sendSysex calls. -\starttyping -virtual void processEvent(const MidiPlayEvent&) {}; -\stoptyping - - -\completeindex -\stoptext diff --git a/muse/doc/man/de/CMakeLists.txt b/muse/doc/man/de/CMakeLists.txt deleted file mode 100644 index ac009499..00000000 --- a/muse/doc/man/de/CMakeLists.txt +++ /dev/null @@ -1,52 +0,0 @@ -#============================================================================= -#  MusE -#  Linux Music Editor -#  $Id:$ -# -#  Copyright (C) 2002-2006 by Werner Schweer and others -# -#  This program is free software; you can redistribute it and/or modify -#  it under the terms of the GNU General Public License version 2. -# -#  This program is distributed in the hope that it will be useful, -#  but WITHOUT ANY WARRANTY; without even the implied warranty of -#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -#  GNU General Public License for more details. -# -#  You should have received a copy of the GNU General Public License -#  along with this program; if not, write to the Free Software -#  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -#============================================================================= - -add_custom_target ( -      manual -      DEPENDS -            ${CMAKE_CURRENT_SOURCE_DIR}/man-de.tex -            ${CMAKE_CURRENT_SOURCE_DIR}/projekte.tex -            ${CMAKE_CURRENT_SOURCE_DIR}/miditracks.tex -            ${CMAKE_CURRENT_SOURCE_DIR}/struktur.tex -            ${CMAKE_CURRENT_SOURCE_DIR}/midirecording.tex -            ${CMAKE_CURRENT_SOURCE_DIR}/installation.tex -            ${CMAKE_CURRENT_SOURCE_DIR}/automation.tex -      COMMAND ${TEXEXEC_PATH}/texexec -      ARGS  --language=en --verbose --batch --pdf -            --result=man-de.pdf -            ${CMAKE_CURRENT_SOURCE_DIR}/man-de.tex -      WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} -      ) - -install_files ( /share/${MusE_INSTALL_NAME}/doc/ .pdf -   ${CMAKE_CURRENT_BINARY_DIR}/man-de.pdf ) - -set (extraClean man-de.log man-de.tmp man-de.tuo man-de.tui -   man-de-mpgraph.mp mpgraph.mp ) - -set_directory_properties( PROPERTIES -   ADDITIONAL_MAKE_CLEAN_FILES "${extraClean}" -   ) - -configure_file( -   ${CMAKE_CURRENT_SOURCE_DIR}/figurepath.tex.in -   ${CMAKE_CURRENT_BINARY_DIR}/figurepath.tex -   ) - diff --git a/muse/doc/man/de/automation.tex b/muse/doc/man/de/automation.tex deleted file mode 100644 index 36e2872b..00000000 --- a/muse/doc/man/de/automation.tex +++ /dev/null @@ -1,33 +0,0 @@ - -%% \chapter{Automation} -\section{Betriebsarten} - -      In \M\ gibt es vier verschiedene Automations-Betriebsarten: - -      \blank[big] -      \Input{Manuell:}  -      Im manuellen Modus kommen Controllerveränderungen nur -      vom Mixer oder ChannelInfo. Die Schieber, Regler und -      Eigabefelder zeigen den aktuellen Zustand der Midigeräte. -      Wird z.B. der Volume Schieber bewegt, wo werden sofort -      entsprechende Midi Events zu den angeschlossenen Midigeräten -      geschickt. - -      \Input{Read:} -      Die aktuellen Controllerwerte kommen ausschließlich von den -      aufgezeichneten Controller Spuren. -      Schieber und Regler des Mixers und des ChannelInfo Windows -      können manuell nicht verändert werden. - -      \Input{Write:} -      Bei Play oder Record werden alte Controllerwerte -      durch die Werte der Schieber und Regler berschrieben. - -      \Input{Read/Write:} -      Wird ein Schieber oder Regler angeclickt, so wird die -      Automation Betriebsart bis zum ''release'' von ''read'' auf ''write'' -      umgeschaltet. Alle Controllerbewegungen werden aufgezeichnet -      und überschreiben alte Werte. - -      \blank[big] - diff --git a/muse/doc/man/de/figurepath.tex.in b/muse/doc/man/de/figurepath.tex.in deleted file mode 100644 index 0e2f7023..00000000 --- a/muse/doc/man/de/figurepath.tex.in +++ /dev/null @@ -1,2 +0,0 @@ -\setupexternalfigures[directory={@CMAKE_SOURCE_DIR@/doc/man}] - diff --git a/muse/doc/man/de/installation.tex b/muse/doc/man/de/installation.tex deleted file mode 100644 index 4b45531c..00000000 --- a/muse/doc/man/de/installation.tex +++ /dev/null @@ -1,63 +0,0 @@ -%% \chapter{Installation} -  \section{Tips für Ubuntu/Kubuntu} - -    \subsection{Alsa-Sequencer} - -      \M\ benötigt das ALSA Sequencer Modul. Dies wird von Ubuntu leider -      beim Systemstart nicht installiert. - -      Wir können das aber leicht durch einen Eintrag in {\tt /etc/modules} -      beheben: - -      \starttyping -            sudo bash -            modprobe snd-seq -            echo snd-seq >> /etc/modules -      \stoptyping - -      (Nachtrag: im aktuellen Ubuntu 04.07 ("festy") wird das Sequencer -      Modul standardmäßig geladen) - -    \subsection{Realtime Clock} - -      Normalen Programmen ist der Zugriff auf die Echtzeituhr -      (RTC = "realtime clock") von Linux -      verwehrt. \M\ benötigt jedoch eine genaue Uhr, um ein exaktes -      Miditiming erzeugen zu können. -      Zunächst wollen wir daher die RTC für alle Audioprogrammen -      verfügbar machen: - -      \starttyping -            sudo chown -vv root:audio /dev/rtc -            sudo chmod g+rw /dev/rtc -      \stoptyping - -      Jetzt haben alle Programme der audio Gruppe Zugriff auf die -      RTC, dürfen jedoch noch nicht die hohen von \M\ benötigten -      Auflösungen einstellen. -      Um dies zu Erlauben geben wir ein: - -      \starttyping -            sudo bash -            echo 1024 > /proc/sys/dev/rtc/max-user-freq -            echo dev.rtc.max-user-freq=1024 >> /etc/sysctl.conf -      \stoptyping - -      Durch den Eintrag in der Datei {\tt /etc/sysctl.conf} erfolgt diese -      Einstellung nun auch nach jedem Systemstart. - -    \subsection{Realtime Rechte} - -      Um Prozesse mit Echtzeit Privilegien starten zu können ergänzen -      wir die Datei {\tt /etc/security/limits.conf} um folgende Zeilen: - -      \starttyping -      @audio - rtprio 99 -      @audio - memlock 200000 -      @audio - nice -10 -      \stoptyping - -    \subsection{Low Latency Kernel} -      \subsubsection{Interrupt Thread Prioritäten} - - diff --git a/muse/doc/man/de/man-de.tex b/muse/doc/man/de/man-de.tex deleted file mode 100644 index 2269e25a..00000000 --- a/muse/doc/man/de/man-de.tex +++ /dev/null @@ -1,413 +0,0 @@ -%==================================================================== -%     MusE Manual -%     dies ist das MusE Manual -% -% (C) 2006 Copyright: Werner Schweer und Andere -%==================================================================== - -%---------------------------------------------------------- -%     Setup -%---------------------------------------------------------- - -%\showframe -%\showsetups -\usemodule[chart] -\setupcolors[state=start] -\setupbodyfont[Palatino] -\language[de] - -% typeset in unicode (utf8) -% \enableregime[il1] -\enableregime[utf] - -\startuseMPgraphic{FunnyFrame} -      picture p; numeric o; path a, b; pair c; -      p := textext.rt(\MPstring{FunnyFrame}); -      o := BodyFontSize; -      a := unitsquare xyscaled(OverlayWidth,OverlayHeight); -      p := p shifted (20, OverlayHeight-ypart center p); -      drawoptions (withpen pencircle scaled 1pt withcolor .625red); -      b := a superellipsed .95; -      fill b withcolor .85white; draw b; -      b := (boundingbox p) superellipsed .95; -      fill b withcolor .85white; draw b; -      draw p withcolor black; -      setbounds currentpicture to a; -    \stopuseMPgraphic - -\defineoverlay[FunnyFrame][\useMPgraphic{FunnyFrame}] -\defineframedtext[FunnyText][frame=off,background=FunnyFrame] -\def\StartFrame{\startFunnyText} -\def\StopFrame{\stopFunnyText} -\def\FrameTitle#1% - {\setMPtext{FunnyFrame}{\hbox spread 1em{\hss\strut#1\hss}}} -\setMPtext{FunnyFrame}{} - - -\define\M{MusE} -\define[1]\Index{{\it #1}\marginpar{#1}\index{#1}} - -\defineindenting[Cmdi][text=,separator=,width=fit,distance=1em] - -\define[1]\Cmd{ -  \Cmdi -  \framed[ -     background=color, -     width=fit, -     align=right, -     backgroundcolor=lightgray, -     framecolor=blue] -     {\tt\space #1}} - -\define[2]\CCmd{ -  \Cmdi -  \framed[ -     background=color, -     width=broad, -     align=right, -     backgroundcolor=lightgray, -     framecolor=blue] -     {\vbox{\hbox{\tt\space #1}\hbox{\tt\space #2}}}} - -%\define\startdescription{\startpacked} -\define\startdescription{} -%\define\stopdescription{\stoppacked} -\define\stopdescription{} - -\define[1]\Fig{\blank\hbox{\externalfigure[#1]}\blank} - -\define[2]\Screen{ -      \placefigure[here][fig:#1]{#2}{\externalfigure[#1][scale=1600]} -      } -\definedescription[Option][ -      location=left, -      headstyle=bold, -      width=4em, -      before={\startnarrower[left]\setupblank[0pt]}, -      after={\stopnarrower\setupblank}] - -\definedescription[Filetype][ -      location=left, -      headstyle=bold, -      width=6em, -      before={\startnarrower[left]\setupblank[0pt]}, -      after={\stopnarrower\setupblank}] - -\definedescription[FileList][ -      location=left, -      headstyle=bold, -      width=7em, -      before={\startnarrower[left]\setupblank[0pt]}, -      after={\stopnarrower\setupblank}] - -\definedescription[Input][ -      location=left, -      headstyle=bold, -      width=9em, -      before={\startnarrower[left]\setupblank[0pt]}, -      after={\stopnarrower\setupblank}] - -\definedescription[InputN][ -      location=left, -      headstyle=bold, -      width=6em, -      before={\startnarrower[left]\setupblank[0pt]}, -      after={\stopnarrower\setupblank}] - -\define[2]\Figure{ -      \placefigure -         [#1][fig:#2]{} -         {\externalfigure[pics/#2]} -         } - -\define[1]\Menu{ -      \placefigure[right][fig:#1]{} -         {\externalfigure[pics/#1][scale=2000]} -         } - -\definedescription[Opt][location=hanging,headstyle=bold,width=broad] - -\setuptyping[before=\blank\startbackground, after=\stopbackground\blank] % source code with background -\setupwhitespace[medium] - -\component figurepath.tex - -%---------------------------------------------------------- -%     Body -%---------------------------------------------------------- - -\starttext -   \language[de] -   \mainlanguage[de] -   \startstandardmakeup[doublesided=no] -      \definebodyfont[10pt,11pt,12pt][rm][tfe=Regular at 48pt] -      \tfe\setupinterlinespace -      \hfill \color[red]{\M}\par -      \hfill \color[blue]{Manual}\par -      \vfill -      \rightaligned{\externalfigure[titlelogo]} -      \vfill -      \hfill \color[blue]{DE}\par -      \definebodyfont[10pt,11pt,12pt][rm][tfb=Regular at 24pt] -      \tfb\setupinterlinespace -      \hfill Version 1.0pre1\par -      \stopstandardmakeup - -   \startstandardmakeup[page=no] -      \vfill -      \M\ wird von SourceForge gehostet:\par -      \type{http://sourceforge.net/projects/lmuse} -      \blank[line] -      Dieses Dokument wurde mit \pdfTeX\ und dem Macro Paket -      \ConTeXt\ erstellt. -      \blank -      \copyright 2006 Werner Schweer und Andere\par -      Titelgrafik \copyright Joachim Schiele  -      \stopstandardmakeup - -   \completecontent - -\chapter{\M\ Quickstart} -   \component midirecording.tex -   \section{Audio Playback} -   \section{Audio Recording} - -\component projekte.tex -\component struktur.tex -\component miditracks.tex - -\chapter{Automation} -      \component automation.tex - -\chapter{Funktionsreferenz} -   \section{Hauptfenster} -      \subsection{Menüs} -            Projekt -                  Open Project -                  Open Recent -                  Save Project -                  Import Midifile -                  Export Midifile -                  Import Wavefile -                  Quit -            Edit -                  Undo -                  Redo -                  Cut -                  Copy -                  Paste -                  Delete Parts -                  Delete Selected Tracks -                  Add Track -                        Add Midi Track -                        Add Midi Output -                        Add Midi Input -                        Add Midi Generator -                        Add Wave Track -                        Add Audio Output -                        Add Audio Group -                        Add Audio Input -                        Add Soft Synth -                  Select -                        Select All -                        Deselect All -                        Invert Selection -                        Inside Loop -                        Outside Loop -                        All Parts on Track -                  Pianoroll -                  Midi Tracker -                  Drums -                  List -                  Master Track -                  Project Properties - -            View -                  Transport Panel -                  Bigtime Window -                  Mixer 1 -                  Mixer 2 -                  Marker - -            Structure -                  Global Cut -                  Global Insert -                  Global Split -                  Copy Range -                  Cut Events -            Midi -                  Edit Instrument -                  Reset Instr. -                  Init Instr. -                  local off -            Audio -                  Bounce To Track -                  Bounce To File -                  Restart Audio -            Settings -                  Configure Shortcuts -                  Follow Song -                        dont follow Song -                        follow page -                        follow continuous -                  Midi Sync -                  Midi File Export -                  Preferences - -            Help -                  Manual -                  MusE Homepage -                  Report Bug -                  About MusE -                  About Qt -                  What's This - -      \subsection{Werkzeugleisten} -            Project Buttons -                  Open -                  Save -                  Whats This -                  Undo -                  Redo -            Edit Tools -                  Zeiger -                  Stift -                  Radiergummi -                  Schere -                  Kleber -                  Linientool -                  Mute -            Transport -                  Loop -                  Punch In -                  Punch Out -                  Gehe nach Anfang -                  Zurückspulen -                  Vorspulen -                  Stop -                  Play -                  Record -            Panic -            Arranger -                  Cursor -                  Snap -                  Len -                  Pitch -                  Tempo -                  50% -                  N -                  200% -            Trackliste -                  Einstellungen -                  m     global Mute -                  s     global Solo -                  aR    global AutomationRead -                  aW    global AutomationWrite - -            Info Button -            Mixer Button - -      \subsection{Trackliste} -            Midi Input -            Midi Output -            Midi Track -            Midi Synthesizer -            Audio Track -            Audio Input -            Audio Output -            Audio Group -            Audio Synthesizer - -      \subsection{Arranger} -            Lineal -            Marker -            Locator - -       -   \section{Globale Editor Funktionen} -      \subsection{Globaler Schnitt} -         Die ''Globaler Schnitt''-Funktion enfernt auf allen Spuren den Bereich  -         zwischen der linken und rechten Marke. Nachfolgende Events rücken  -         dabei auf. Auch Markerposition und Tempoevents werden -         verschoben. Lediglich stumm geschaltete Spuren werden nicht  -         berücksichtigt. - -      \subsection{Global Einfügen} -         Mit der ''Global Einfügen''-Funktion kann ein leerer Bereich eingefügt  -         werden. Der Bereich wird an der Position des linken Markers  -         eingefügt. Die Dauer des eingefügten Bereichs entspricht dem Abstand  -         zwischen linker und rechter Marke. Marker und Tempoevents hinter der  -         Einfügeposition werden entsprechend verschoben. -         Stumm geschaltete Spuren werden nicht verändert. - -      \subsection{Global Splitten} -         Die ''Global Splitten''-Funktion entspricht der Scheren-Funktion für  -         einzelne Parts. Im Gegensatz zur Scheren-Funktion wird jedoch nicht  -         ein Part, sondern alle Parts an der aktuellen Markerposition  -         geschnitten. Dies gilt nicht für stummgeschaltete Spuren. - -      \subsection{Bereich Kopieren}                  -         Mit der ''Global Kopieren''-Funktion können komplette Teile eines  -         Songs an eine andere Stelle kopiert werden: - -         \startitemize[packed] -         \item stellen Sie die linke Marke an den Anfang des zu kopierenden  -               Bereichs -         \item stellen Sie die rechte Marke an das Ende des zu kopierenden  -               Bereichs -         \item setzen Sie den Lokator an die Einfgestelle -         \item wählen Sie ''Copy Range'' aus dem ''Struktur'' Menü. -         \stopitemize - -         Wie bei allen anderen Strukturkommandos werden stummgeschaltete  -         Spuren nicht berücksichtigt. - -   \section{Arranger} -      \subsection{Spurtypen} -         \startitemize[packed] -            \item Midispur -            \item Audiospur -            \item Midiinput -            \item Midioutput -            \item Midigenerator -            \item Audioinput -            \item Audiooutput -            \item Audiogruppe -            \item Software Synthesizer -         \stopitemize - -      \subsection{Spur Operationen} -         \startitemize[packed] -            \item Spur erzeugen -            \item Spur löschen -            \item Spur verschieben -            \item Spur kopieren -         \stopitemize - -      \subsection{Part Operationen} -         \startitemize[packed] -            \item Part erzeugen -            \item Part löschen -            \item Part verschieben -            \item Part kopieren -            \item Part clonen -            \item Part declonen -            \item Part nach Vorne verlängern -            \item Part nach Hinten verlängern -            \item Part stummschalten -            \item Part einfärben -         \stopitemize -       -   \section{Pianoroll Editor} -   \section{Drum Editor} -   \section{Master Editor} - -\chapter{Installation} -   \component installation.tex - -\startappendices -   \component ../gpl.tex -   \completeindex -   \stopappendices -\stoptext -         diff --git a/muse/doc/man/de/midirecording.tex b/muse/doc/man/de/midirecording.tex deleted file mode 100644 index c0c0e4d6..00000000 --- a/muse/doc/man/de/midirecording.tex +++ /dev/null @@ -1,119 +0,0 @@ -\section{Midi Recording} -      Auf der ersten Tour werden wir mit \M\ eine Midi Spur -      mit einem externen Synthesizer, einem Yamaha S90 aufnehmen. - -   \subsection{Geräte verbinden} -      Für den Anschluß von Midigeräten gibt es verschiedene Möglichkeiten. - -      \subsubsection{Midi} -      Der serielle Midi-Anschluß eines Keyboards eignet sich nicht zum -      direkten Anschluß an den PC Serienport. Bei Midi handelt es sich -      um eine galvanisch per Optokoppler getrennte Stromschnittstelle, -      während der PC eine RS232 Schnittstelle mit 12 Volt Pegeln bedient. -      Ein einfaches Umrüsten der PC-Schnittstelle mit einem Optokoppler -      funktioniert nicht, da der PC die MIDI-Taktrate nicht erzeugen kann. - -      Als Lösung muß ein spezielles Midi-Interface her. Meist befindet sich -      eine Midi-Schnittstelle auf der Soundkarte. Doch Vorsicht, nicht -      alle Midi-Schnittstellen sind gleich gut, z.B. sind einige alte -      Soundblaster Modelle duch unglückliches Hardware-Design nicht in der -      Lage, die volle Midi Transferrate beim Senden von Midi Daten zu -      erreichen. - -      \subsubsection{USB} -      Viele aktuelle Midigeräte besitzen einen USB Anschluß. USB ist schnell -      und flexibel und damit die Schnittstelle der Wahl. - -      \subsubsection{ToHost} -      Einige ältere Midigeräte bieten einen einfachen PC Anschluß über  -      einen normalen Serienport (''ToHost'' Schnittstelle genannt). Es -      handelt sich um einen normalen RS232 Anschluß, der die PC-üblichen -      Übertragungsraten versteht. - -   \subsection{Neues Projekt erzeugen} -      Dann kanns losgehen. Wir starten \M\ und es erscheint das -      zuletzt bearbeitete Projekt so wie wir es verlassen haben. - -      Um ein neues Projekt anzulegen clicken wir auf das Projekt -      Icon und der Projektdialog erscheint: - -      \Fig{select_project} - -      Wenn \M\ zum allererstenmal gestartet wird, erscheint der -      Projektdialog natürlich sofort, da es ja kein letztes Projekt -      gibt. Zum Projektdialog gelangen wir auch über den Projekmenü -      Eintrag ''Öffnen'' oder wer es ganz eilig hat tippt einfach -      {\tt Ctrl+O}. - -      In der ''Projekt'' Eingabezeile geben wir nun einen Projektnamen -      für unser erstes Projekt ein und bestätigen dann durch clicken -      des ''Ok'' Buttons. - -      \M\ fragt nun nach einem Template, mit dem das Projekt -      initialisiert werden soll: - -      \Fig{select_template} - -      Wir selektieren kein Template und clicken einfach ''Ok''. -      \M\ zeigt dann ein leeres Projekt: - -      \Fig{main0} - -   \subsection{Setup} - -      \subsubsection{Spuren anlegen} - -      Zunächst erzeugen wir einen ''MidiInput'' Track und checken, -      ob das Keyboard richtig angeschlossen ist. - -      \subsubsection{Routing} - -      \subsubsection{Midi Instrument} -      Im ''MidiOutPort'' Strip kann ein Midi Instrument ausgewählt werden. -      Dies ermöglicht es \M\ u.A. die Instrument-Patches anstatt per Nummer  -      per Name anzuzeigen. Instrumente werden in einer ''{\tt *.idf}'' -      (Instrument Definition File) beschrieben. Dies sind normale XML Text -      Dateien, die für jedes angeschlossene Gerät individuell erstellt werden -      können. In einer {\tt *.idf} Datei kann in einem ''Init'' Eintrag eine -      Serien von Midi Events definiert werden, die immer dann gesendet werden, -      wenn in \M\ der {\tt Midi->InitInstr} Button aktiviert wird. Wir nutzen diese -      Möglichkeit, um den S90 zu initialisieren. - -      \subsubsection{Local Off} -      Wird ein Synthesizer ''standalone'' betrieben, dann ist die Tastatur -      intern direkt mit dem Tongenerator verbunden. Am Computer angeschlossen -      möchten wir jedoch Tastatur und Tongenerator als unabhängige Teile -      benutzen. Note On/Off Events sollen von der Tastatur nur zum Computer -      geschickt werden und nicht auch gleich zum internen Tongenerator. -      Der Tongenerator soll wiederum nur auf den Midi Input Anschluß hören -      und nicht auf die Tastatur. Für den S90 kann dieser ''Local Off'' -      Mode durch Senden des SysEx Strings - -      \starttyping -            0xf0 0x10 0x6b 0x00 0x00 0x09 0x00 -      \stoptyping - -      eingeschaltet werden. - -      \subsubsection{Sequencer Mode} -      Der S90 kenn Yamaha-Typisch verschiedene Modi. Wir benutzen den -      Sequencer Mode, in dem jedem Midi Kanal ein eigenes Instrument -      zugeordnet werden kann. Dieser Modus wird mit dem SysEx String - -      \starttyping -            0xf0 0x43 0x10 0x6b 0x0a 0x00 0x00 0x00 -      \stoptyping - -      eingeschaltet. Beide SysEx Kommandos sind unter dem ''init'' Label in -      der {\tt Yamaha-S90.idf} Datei eingetragen. - -      \subsubsection{Midi Input Filter} -      Die Tastatur des Yamaha S90 kann ''After Touch'' Events erzeugen, d.h. -      nach dem Drücken einer Taste werden fortlaufend Events über den -      Anpreßdruck der Taste erzeugt. Diese Informationen benötigen wir -      nicht und filtern deshalb alle After Touch Events gleich bei der -      Aufnahme mittels des Midi Input Filters aus. - -      \Fig{midifilter} - -      \subsection{Aufnehmen} diff --git a/muse/doc/man/de/miditracks.tex b/muse/doc/man/de/miditracks.tex deleted file mode 100644 index 6e3a06c2..00000000 --- a/muse/doc/man/de/miditracks.tex +++ /dev/null @@ -1,132 +0,0 @@ -  \section{Midi Routing} - -  \section{Midi Setup} -  \subsection{Einfaches Setup} - -      In einem einfachen Setup ist jeder Midi Anschluss des Rechners  -      jeweils mit nur einem Midi Gerät verbunden. Außerdem hat jede -      Midi Spur einen eigenen Midi Kanal. -      Dieses Setup ist am flexibelsten und sollte nach Möglichkeit -      immer verwendet werden. - -  \subsection{Erweitertes Setup} - -      \index{mehrere Midi Spuren für einen Midi Kanal} -      Im erweiterten Setup werden mehrere Midi Spuren auf den gleichen -      Midi Kanal geroutet. Es ist zu beachten, das Midi Controller -      natürlich immer für alle Spuren des Kanals gelten. Controller  -      können nicht individuell für jede Spur eingestellt werden. - -  \subsection{Komplexes Setup} -      \index{mehrere Geräte an einem Midi Anschluß} -      Als komplex bezeichnen wir ein Setup, in dem an einem Midi Anschluß -      mehrere Midi Geräte angeschlossen sind. -      Jedes Gerät belegt einen oder mehrere der verfügbaren 16 Midi -      Kanäle. Es ist darauf zu achten, das die vergebenen Kanäle nicht -      überlappen. Dazu müssen die angeschlossenen Midi Geräte so  -      konfiguriert werden, das sie nur auf die ihnen zugewiesenen Kanäle -      reagieren. - -      Midi Meldungen, die nicht kanalgebunden sind (wie z.B. Sysex  -      Meldungen) können an bestimmte Geräte gesendet werden, indem -      man jedem Gerät eine individuelle Geräte-Id gibt. Diese Geräte-Id -      muß dann in die entsprechenden Meldungen als Zieladresse angegeben -      werden.  - -      Da Midi Verbindungen nur eine sehr bescheidene \index{Midi Bandbreite} -      Bandbreite besitzen, sollte nach Möglichkeit das komplexe Setup  -      vermieden werden. -       -  \section{Midi Eingänge} -      Ein Midi Eingang wird im Mixer als Strip und im Arranger als -      eigene Spur gezeigt. - -      Ein Midi Eingang hat folgende Eigenschaften: - -      \blank[big] -      \Input{Alsa Port:} dies ist die Route zu einem ALSA Midi Eingangs -         Port. Ein ALSA Port kann mit mehreren Midi Eingängen verbunden -         werden. -      \Input{Plugins:} die von ALSA gelesenen Midi Events können durch -         mehrere Plugins geroutet werden. Verfügbare Plugins filtern oder -         verändern die Midi Events. -      \Input{Outputs:} ein Midi Eingang hat 16 Ausgänge, jeweils ein -         Ausgang für jeden Midi Kanal. Jeder Midi Kanal kann individuell -         zu einem oder mehreren Midi Spuren geroutet werden. -         Midi Events, die von den Midi Spuren empfangen werden, haben -         keine Kanal-Information mehr. -         In einem einfachen Setup werden alle Kanäle aller Midi Eingänge -         zu allen Midi Spuren geroutet. Dies ist die Standard Vorgabe. -         \par - -      \blank[big] - -  \section{Midi Spur} -      Die Midi Spur enthält alle Midi Note On/off Events. Sie wird im -      Mixer als Strip und im Arranger als Spur dargestellt. Die -      Strip Darstellung im Mixer ist nicht sehr interessant, da eine -      Midi Spur kaum eigene Mixer relevante Parameter besitzt. In einem  -      normalen Setup sollten Midi Spuren im Mixer ausgeblendet werden. - -      Midi Spur Eigenschaften: - -      \blank[big] -      \Input{Record:} schaltet die Spur in den Record Modus - -      \Input{Monitor:} ist der Monitor Schalter eingeschaltet, werden -            bei Record alle Input Events zum Ausgang weitergereicht. -            Achtung: dies kann möglicherweise zu Midi Rückkopplungen -            führen! - -      \Input{Mute:} schaltet die Spur stumm - -      \Input{Solo:} ---nocht nicht definiert--- - -      \Input{Eingang:} die Spur Eingänge können zu Midi Eingängen -            geroutet werden - -      \Input{Ausgang:} der Spur Ausgang kann zu einem oder mehreren -            Midi Kanälen geroutet werden. Midi Kanäle sind immer mit -            einem Midi Port verbunden. - -      \blank[big] - -  \section{Midi Kanäle} -      Midi Kanäle enthalten normalerweise alle Midi Controller Events. - -      Midi Kanal Eigenschaften: - -      \blank[big] - -      \blank[big] - -  \section{Midi Port} - -      \index{Midi Port} Ein Midi Port representiert ein externes Midi  -      Gerät und hat folgende Eigenschaften: - -      \blank[big] -      \Input{Instrument:} \index{Midi Instrument} beschreibt die  -        Eigenschaften des externen -        Midi Instruments. Das Instrument kann aus einer Liste verfügbarer -        Instrumentbeschreibungen ausgewählt werden. - -      \Input{Master Volume:} \index{Midi Master Volume} ist ein Midi  -      Controller, der die Lautstärke für alle Channel des Midi Ports  -      einstellt. - -      \Input{Geräte Id:} \index{Midi Geräte Id} werden mehrere Midigeräte  -      an einen Midi Port -      angeschlossen, so müssen alle Geräte eine eindeutige Geräte Id -      besitzen. Mit dieser Id kann dann ein bestimmtes Gerät -      ausgewählt werden. - -      \Input{Alsa Port:} dies ist die Route zu einem ALSA Midi Port. -      Ein Port Ausgang kann mit mehreren ALSA Ports verbunden werden. - -      \blank[big] - -      Jeder Midi Port besitzt 16 Kanäle. - -  \section{Midi Synthesizer} - diff --git a/muse/doc/man/de/projekte.tex b/muse/doc/man/de/projekte.tex deleted file mode 100644 index dcaa6c9a..00000000 --- a/muse/doc/man/de/projekte.tex +++ /dev/null @@ -1,102 +0,0 @@ -\chapter{Projekte} - -  \section{Projekte} - -      Ein \M\ Projekt \index{Projekt} ist ein Ordner, der alle  -      Dateien des Projekts enthält. Dies sind im wesentlichen die  -      aufgenommenen Wavedateien und die Projektdatei \index{Projektdatei}. -      Die Projektdatei enthält alle -      Informationen über das Projekt sowie alle Midi Daten soweit -      vorhanden. - -      Beispiel einer Projekt Ordnerstruktur: - -      \starttyping -      ~/MusE -            projects -                  song1              -                        song1.med -                        rec1.wav -                        rec1.wca -                        rec2.wav -                        rec2.wca -                  song2 -                          .              -                          .              -      \stoptyping - -      Im oberen Beispiel ist {\tt song1} der Projektordner -      \index{Projektordner} und -      {\tt song1.med} die Projektdatei. Die {\tt *.wav} Dateien sind -      Audio Aufzeichnungen und die zugehörigen {\tt *.wca} Dateien  -      enthalten vorberechnete Daten zum schnellen Zeichnen der  -      Wellenformdarstellung auf den Bildschirm. - -      Der Standard-Projektordner \index{Standard-Projektordners} -      {\tt ~/MusE/projects} kann im ''Präferenzen'' Menü eingestellt  -      werden. - -   \section{Projekt auswählen} - -      Nach dem Start von \M\ muß immer zunächst ein Projekt geladen oder -      ein neues Projekt erzeugt werden. - -      \Screen{select_project}{Projekt auswählen} - -      Normalerweise wird nach dem Start von \M\ das zuletzt bearbeitete -      Projekt geladen. Wer das nicht mag kann unter ''Präferenzen''  -      einstellen, ob beim Start ein Standardprojekt \index{Standardprojekt} -      geladen oder immer zunächst nach einen Projekt gefragt werden soll. - -   \section{Templates} - -      Wird bei der Projektauswahl ein neues Projekt ausgewählt, dann -      wird im nächsten Schritt ein Dialog gezeigt, in dem ein Template -      aus einer Liste von verfügbaren Templates ausgewählt werden kann. -      Ein Template bestimmt die Grundeinstellungen für ein neues -      Projekt. Ein Template kann ein komplettes Projekt sein, welches -      jedoch keine Audiodaten enthalten kann und welches in der Regel -      auch keine Midi Daten enthält. - -      \Screen{select_template}{Template auswählen} - -      \M\ sucht Templates an zwei Orten: -      im globalen \M\ Installationspfad (Factory Presets) sowie im  -      \M\ Verzeichnis relativ zum {\tt HOME} Verzeichnis des -      Anwenders (User Presets) - -   \section{Projekt sichern (Backup)} - -      Es gibt keine in \M\ eingebaute Funktion zum Sichern von Projekten. -      Da sich aber alle Projektdaten in einem Ordner befinden, -      können Standard-Tools zum Sichern verwendet werden. - -      Projekte sind immer in sich komplett und enthalten keine Verweise -      auf Dateien außerhalb des Projektordners. Dies gilt nicht -      für Soundfonts \index{Soundfonts}, die z.B. vom Fluid-Synthesizer  -      Plugin verwendet werden.  -      Es wird empfohlen, diese Soundfonts\index{Soundfonts}  -      auch als Kopie im Projektordner abzulegen. - -      Projekte können auf der Platte ohne Probleme verschoben werden, -      da sie keine absoluten Pfade enthalten. - -   \section{Wavedateien und Samplerate} - -      \index{Wavedateien}\index{Audioprojekte}\index{Midiprojekte} -      \index{Samplerate} -      MusE unterscheidet zwischen Midiprojekten und Audioprojekten. -      Audioprojekte enthalten zusätzlich zu eventuell vorhandenen -      Mididaten Wavedateien. -       -      Audioprojekte sind immer mit einer bestimmten Samplerate -      verbunden und können nur geladen und bearbeitet werden, wenn -      die Projekt Samplerate mit der aktuellen Samplerate übereinstimmt. - -      Die aktuelle Samplerate wird immer vom JACK Server bestimmt und -      kann von \M\ nicht verändert werden. - -      Werden Wavedateien mit einer anderen Samplerate als der aktuellen -      importiert, so müssen sie konvertiert (resampled\index{resample})  -      werden. - diff --git a/muse/doc/man/de/struktur.tex b/muse/doc/man/de/struktur.tex deleted file mode 100644 index bd762d79..00000000 --- a/muse/doc/man/de/struktur.tex +++ /dev/null @@ -1,43 +0,0 @@ -\chapter{Struktur} -  \section{Spuren} - -      Ein Projekt besteht aus Spuren analog einer analogen Bandmaschine. -      Die Spuren enthalten Midi- Audio- oder Controllerdaten. -      Spuren werden in \M\ in zwei Formen dargestellt: - -      \blank[big] -      \Input{Arranger:} im Arranger werden alle Spuren vertikal in einer -            Liste dargestellt - -      \Input{Mixer:} der Mixer zeigt alle Spuren in einer horizontalen -            Darstellung\par - -      \blank[big] - -      Tempo und Taktart sind interne Spuren, die nicht im Arranger oder -      Mixer gezeigt werden. - -  \section{Parts} - -      Midi- und Audiospuren können auf der Zeitachse in Parts unterteilt -      werden. Parts enthalten Midi- Audio- oder Conrollerdaten. - -      Folgenden Operationen sind mit Parts möglich: - -      \blank[big] -      \Input{verschieben} Parts können auf der Zeitachse und in andere -            Spuren des gleichen Typs verschoben werden. -      \Input{kopieren} klar! -      \Input{klonen} erzeugt einen Part, der sich die Midi- Audio- oder -            Controllerdaten mit dem Quellpart teilt. Wird ein Event in -            einem Clone-Parts verändert, so verändern sich auch alle -            Clones. - -      \Input{Stumm} Parts können stumm geschaltet werden. Stumme Parts -            werden im Arranger grau dargestellt. - -      \par -      \blank[big] - - - diff --git a/muse/doc/manual-de.odt b/muse/doc/manual-de.odt Binary files differnew file mode 100644 index 00000000..1a8fb669 --- /dev/null +++ b/muse/doc/manual-de.odt diff --git a/muse/muse/CMakeLists.txt b/muse/muse/CMakeLists.txt index 000a8787..9ef460c3 100644 --- a/muse/muse/CMakeLists.txt +++ b/muse/muse/CMakeLists.txt @@ -32,7 +32,6 @@ subdirs (        instruments        marker        liste -      arranger        waveedit        ) @@ -48,6 +47,9 @@ QT4_WRAP_UI  (muse_ui_headers        templatedialog.ui        importmidi.ui        routedialog.ui +      configtrack.ui +      midiportinfo.ui +      miditrackinfo.ui        )  QT4_WRAP_CPP ( muse_moc_headers @@ -85,6 +87,15 @@ QT4_WRAP_CPP ( muse_moc_headers        rack.h        routedialog.h        strip.h +      arranger.h +      canvas.h +      configtrack.h +      partdrag.h +      tllineedit.h +      tlswidget.h +      tlwidget.h +      trackdrag.h +      trackinfo.h        )  QT4_ADD_RESOURCES (muse_qrc_files muse.qrc) @@ -173,6 +184,17 @@ add_executable ( muse        rack.cpp        routedialog.cpp        strip.cpp + +      arranger.cpp +      canvas.cpp +      configtrack.cpp +      partdrag.cpp +      tllineedit.cpp +      tlswidget.cpp +      tlwidget.cpp +      tlwlayout.cpp +      trackdrag.cpp +      trackinfo.cpp        )  set_target_properties( muse @@ -186,7 +208,6 @@ target_link_libraries(muse        marker        liste        synti -      arranger        waveedit        widgets        al diff --git a/muse/muse/arranger/arranger.cpp b/muse/muse/arranger.cpp index 7b4be381..82c859cb 100644 --- a/muse/muse/arranger/arranger.cpp +++ b/muse/muse/arranger.cpp @@ -1226,7 +1226,7 @@ void Arranger::moveTrack(Track* src, Track* dst)  //!    @param e The key event  //--------------------------------------------------------- -void Arranger::keyPressEvent(QKeyEvent* e) +void Arranger::keyPressEvent(QKeyEvent* /*e*/)        {        printf("Arranger::keyPressEvent\n");  #if 0 //TODOB @@ -1328,7 +1328,7 @@ void Arranger::keyPressEvent(QKeyEvent* e)      @param t Track the selected part belongs to (null if no part selected)      @param p The selected Part (null if no part selected)   */ -void Arranger::kbdMovementUpdate(Track* t, Part* p) +void Arranger::kbdMovementUpdate(Track*, Part*)        {        printf("kbdMovementUpdate\n");  //       if (t && p ) { diff --git a/muse/muse/arranger/arranger.h b/muse/muse/arranger.h index 1c9f6e38..1c9f6e38 100644 --- a/muse/muse/arranger/arranger.h +++ b/muse/muse/arranger.h diff --git a/muse/muse/arranger/CMakeLists.txt b/muse/muse/arranger/CMakeLists.txt deleted file mode 100644 index b58f6114..00000000 --- a/muse/muse/arranger/CMakeLists.txt +++ /dev/null @@ -1,60 +0,0 @@ -#============================================================================= -#  MusE -#  Linux Music Editor -#  $Id:$ -# -#  Copyright (C) 2002-2006 by Werner Schweer and others -# -#  This program is free software; you can redistribute it and/or modify -#  it under the terms of the GNU General Public License version 2. -# -#  This program is distributed in the hope that it will be useful, -#  but WITHOUT ANY WARRANTY; without even the implied warranty of -#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -#  GNU General Public License for more details. -# -#  You should have received a copy of the GNU General Public License -#  along with this program; if not, write to the Free Software -#  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -#============================================================================= - -QT4_WRAP_CPP ( arranger_mocs -      arranger.h -      canvas.h -      configtrack.h -      partdrag.h -      tllineedit.h -      tlswidget.h -      tlwidget.h -      trackdrag.h -      trackinfo.h -      ) - -QT4_WRAP_UI ( arranger_ui_headers -      configtrack.ui -      midiportinfo.ui -      miditrackinfo.ui -      ) - -add_library ( arranger STATIC -      ${arranger_ui_headers} -      ${arranger_mocs} -      selectfilter.h -      tlwlayout.h -      trelement.h -      arranger.cpp -      canvas.cpp -      configtrack.cpp -      partdrag.cpp -      tllineedit.cpp -      tlswidget.cpp -      tlwidget.cpp -      tlwlayout.cpp -      trackdrag.cpp -      trackinfo.cpp -      ) - -set_target_properties( arranger -      PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h" -      ) - diff --git a/muse/muse/arranger/canvas.cpp b/muse/muse/canvas.cpp index 614cf3e3..614cf3e3 100644 --- a/muse/muse/arranger/canvas.cpp +++ b/muse/muse/canvas.cpp diff --git a/muse/muse/arranger/canvas.h b/muse/muse/canvas.h index 911936c2..911936c2 100644 --- a/muse/muse/arranger/canvas.h +++ b/muse/muse/canvas.h diff --git a/muse/muse/arranger/configtrack.cpp b/muse/muse/configtrack.cpp index a8fee6a3..a8fee6a3 100644 --- a/muse/muse/arranger/configtrack.cpp +++ b/muse/muse/configtrack.cpp diff --git a/muse/muse/arranger/configtrack.h b/muse/muse/configtrack.h index 47dd0f4a..47dd0f4a 100644 --- a/muse/muse/arranger/configtrack.h +++ b/muse/muse/configtrack.h diff --git a/muse/muse/arranger/configtrack.ui b/muse/muse/configtrack.ui index 350b405a..350b405a 100644 --- a/muse/muse/arranger/configtrack.ui +++ b/muse/muse/configtrack.ui diff --git a/muse/muse/importmidi.cpp b/muse/muse/importmidi.cpp index c995ed67..0bd33df8 100644 --- a/muse/muse/importmidi.cpp +++ b/muse/muse/importmidi.cpp @@ -36,7 +36,7 @@  #include "templatedialog.h"  #include "audio.h"  #include "mixer.h" -#include "arranger/arranger.h" +#include "arranger.h"  #include "midictrl.h"  #include "midiinport.h"  #include "midioutport.h" diff --git a/muse/muse/jack.cpp b/muse/muse/jack.cpp index ff32846e..bc372357 100644 --- a/muse/muse/jack.cpp +++ b/muse/muse/jack.cpp @@ -53,25 +53,6 @@ static void jack_thread_init (void* /*data*/)        if (loadVST)              fst_adopt_thread();  #endif -      int policy; -      if ( (policy = sched_getscheduler (0)) < 0) { -            printf("cannot get current client scheduler for JACK thread: %s!\n", strerror(errno)); -            } -      else { -            if (policy != SCHED_FIFO) -                  printf("JACK thread %d _NOT_ running SCHED_FIFO\n", getpid()); -            else if (debugMsg) { -            	struct sched_param rt_param; -            	memset(&rt_param, 0, sizeof(sched_param)); -            	int type; -            	int rv = pthread_getschedparam(pthread_self(), &type, &rt_param); -            	if (rv == -1) -                  	perror("get scheduler parameter"); -                  printf("JACK thread running SCHED_FIFO priority %d\n", -                     rt_param.sched_priority); -                  } -            } -        }  //--------------------------------------------------------- @@ -816,10 +797,10 @@ void JackAudio::putEvent(Port port, const MidiEvent& e)              }        void* pb = jack_port_get_buffer(port.jackPort(), segmentSize);        int ft = e.time() - _frameCounter; -      if (ft < 0 || ft >= (int)segmentSize) { +      if (ft < 0) +            ft = 0; +      if (ft >= (int)segmentSize) {              printf("JackAudio::putEvent: time out of range %d(seg=%d)\n", ft, segmentSize); -            if (ft < 0) -                  ft = 0;              if (ft > (int)segmentSize)                    ft = segmentSize - 1;              } diff --git a/muse/muse/arranger/midiportinfo.ui b/muse/muse/midiportinfo.ui index ad8ae201..ad8ae201 100644 --- a/muse/muse/arranger/midiportinfo.ui +++ b/muse/muse/midiportinfo.ui diff --git a/muse/muse/arranger/miditrackinfo.ui b/muse/muse/miditrackinfo.ui index c1624188..c1624188 100644 --- a/muse/muse/arranger/miditrackinfo.ui +++ b/muse/muse/miditrackinfo.ui diff --git a/muse/muse/mstrip.cpp b/muse/muse/mstrip.cpp index d4c48f5e..64b8132c 100644 --- a/muse/muse/mstrip.cpp +++ b/muse/muse/mstrip.cpp @@ -3,7 +3,7 @@  //  Linux Music Editor  //  $Id:$  // -//  Copyright (C) 2002-2006 by Werner Schweer and others +//  Copyright (C) 2002-2008 by Werner Schweer and others  //  //  This program is free software; you can redistribute it and/or modify  //  it under the terms of the GNU General Public License version 2. @@ -75,7 +75,7 @@ void addMidiTracks(QMenu* menu, Track* track, int channel, bool input)  //    can only be added to input route lists  //--------------------------------------------------------- -void addMidiInPorts(QMenu* menu, Track* dtrack, int channel) +void Strip::addMidiInPorts(QMenu* menu, Track* dtrack, int channel)        {        RouteList* rl = dtrack->inRoutes();        RouteNode dst(dtrack, channel, RouteNode::TRACK); @@ -84,8 +84,6 @@ void addMidiInPorts(QMenu* menu, Track* dtrack, int channel)        for (iMidiInPort i = tl->begin();i != tl->end(); ++i) {              MidiInPort* track = *i;              QMenu* m = menu->addMenu(track->name()); -            m->setSeparatorsCollapsible(false); -            m->addSeparator()->setText(QT_TR_NOOP("Channels"));              for (int ch = 0; ch < MIDI_CHANNELS; ++ch) {                    QAction* a = m->addAction(QString("Channel %1").arg(ch+1));                    a->setCheckable(true); @@ -102,7 +100,7 @@ void addMidiInPorts(QMenu* menu, Track* dtrack, int channel)  //    can only be added to output route lists  //--------------------------------------------------------- -static void addMidiOutPorts(QMenu* menu, Track* strack, int channel) +void Strip::addMidiOutPorts(QMenu* menu, Track* strack, int channel)        {        RouteList* rl = strack->outRoutes();        RouteNode src(strack, channel, RouteNode::TRACK); @@ -111,8 +109,6 @@ static void addMidiOutPorts(QMenu* menu, Track* strack, int channel)        for (iMidiOutPort i = tl->begin();i != tl->end(); ++i) {              MidiOutPort* op = *i;              QMenu* m = menu->addMenu(op->name()); -            m->setSeparatorsCollapsible(false); -            m->addSeparator()->setText(QT_TR_NOOP("Channels"));              for (int ch = 0; ch < MIDI_CHANNELS; ++ch) {                    QAction* a = m->addAction(QString("Channel %1").arg(ch+1));                    a->setCheckable(true); @@ -138,8 +134,6 @@ static void addSyntiPorts(QMenu* menu, Track* strack, int channel)        for (iSynthI i = sl->begin(); i != sl->end(); ++i) {              SynthI* sy = *i;              QMenu* m = menu->addMenu(sy->name()); -            m->setSeparatorsCollapsible(false); -            m->addSeparator()->setText(QT_TR_NOOP("Channels"));              for (int ch = 0; ch < MIDI_CHANNELS; ++ch) {                    QAction* a = m->addAction(QString("Channel %1").arg(ch+1));                    a->setCheckable(true); @@ -227,7 +221,6 @@ MidiStrip::MidiStrip(Mixer* m, MidiTrack* t, bool align)        sl = new Awl::MidiVolEntry(this);        sl->setId(CTRL_VOLUME); -//      sl->setFont(config.fonts[1]);        sl->setFixedHeight(entrySize.height());        connect(slider, SIGNAL(valueChanged(double,int)), SLOT(ctrlChanged(double, int))); @@ -287,13 +280,11 @@ MidiStrip::MidiStrip(Mixer* m, MidiTrack* t, bool align)        iR = newInRouteButton();        grid->addWidget(iR, 14, 0);        connect(iR->menu(), SIGNAL(aboutToShow()), SLOT(iRouteShow())); -      connect(iR->menu(), SIGNAL(aboutToHide()), SLOT(iRouteHide()));        connect(iR->menu(), SIGNAL(triggered(QAction*)), song, SLOT(routeChanged(QAction*)));        oR = newOutRouteButton();        grid->addWidget(oR, 14, 1);        connect(oR->menu(), SIGNAL(aboutToShow()), SLOT(oRouteShow())); -      connect(oR->menu(), SIGNAL(aboutToHide()), SLOT(oRouteHide()));        connect(oR->menu(), SIGNAL(triggered(QAction*)), song, SLOT(routeChanged(QAction*)));        connect(song,  SIGNAL(songChanged(int)), SLOT(songChanged(int))); @@ -311,34 +302,6 @@ MidiStrip::MidiStrip(Mixer* m, MidiTrack* t, bool align)        }  //--------------------------------------------------------- -//   iRouteHide -//--------------------------------------------------------- - -void MidiStrip::iRouteHide() -      { -      // dont leave the menu if SHIFT is pressed; this allows -      // for fast selecting of more than one input source -      // -      if (qApp->keyboardModifiers() & Qt::ShiftModifier) { -            iR->menu()->show(); -            } -      } - -//--------------------------------------------------------- -//   oRouteHide -//--------------------------------------------------------- - -void MidiStrip::oRouteHide() -      { -      // dont leave the menu if SHIFT is pressed; this allows -      // for fast selecting of more than one input source -      // -      if (qApp->keyboardModifiers() & Qt::ShiftModifier) { -            oR->menu()->show(); -            } -      } - -//---------------------------------------------------------  //   songChanged  //--------------------------------------------------------- @@ -508,7 +471,6 @@ void MidiStrip::iRouteShow()        {        QMenu* pup = iR->menu();        pup->clear(); -      pup->addSeparator()->setText(tr("Tracks"));        addMidiInPorts(pup, track, -1); // add midi inputs to menu        } @@ -520,7 +482,6 @@ void MidiStrip::oRouteShow()        {        QMenu* pup = oR->menu();        pup->clear(); -      pup->addSeparator()->setText(tr("OutputPorts"));        addMidiOutPorts(pup, track, -1);        addSyntiPorts(pup, track, -1);        } @@ -783,7 +744,6 @@ void MidiOutPortStrip::iRouteShow()        {        QMenu* pup = iR->menu();        pup->clear(); -      pup->addSeparator()->setText(tr("MidiChannel"));        for (int ch = 0; ch < MIDI_CHANNELS; ++ch) {              QMenu* m = pup->addMenu(QString("Channel %1").arg(ch+1)); @@ -1001,7 +961,6 @@ void MidiInPortStrip::oRouteShow()        {        QMenu* pup = oR->menu();        pup->clear(); -      pup->addSeparator()->setText(tr("MidiChannel"));        for (int ch = 0; ch < MIDI_CHANNELS; ++ch) {              QMenu* m = pup->addMenu(QString("Channel %1").arg(ch+1)); @@ -1230,33 +1189,7 @@ void MidiSyntiStrip::oRouteShow()        {        QMenu* pup = oR->menu();        pup->clear(); -      pup->addSeparator()->setText(tr("OutputPorts")); - -      MidiOutPortList* mpl = song->midiOutPorts(); -      int pn = 0; -      for (iMidiOutPort i = mpl->begin(); i != mpl->end(); ++i, ++pn) { -            MidiOutPort* op = *i; -            QMenu* m = pup->addMenu(op->name()); -            m->addSeparator()->setText(tr("Channel")); -#if 0 //TODO -            for (int channel = 0; channel < MIDI_CHANNELS; ++channel) { -                  QString s; -                  s.setNum(channel+1); -                  QAction* action = m->addAction(s); -                  MidiChannel* mc = op->channel(channel); -                  Route r(mc, -1, Route::TRACK); -                  action->setData(QVariant::fromValue(r)); -                  action->setCheckable(true); - -                  for (iRoute ir = orl->begin(); ir != orl->end(); ++ir) { -                        if (r == *ir) { -                              action->setChecked(true); -                              break; -                              } -                        } -                  } -#endif -            } +      addMidiOutPorts(pup, track, -1);        }  //--------------------------------------------------------- @@ -1268,7 +1201,6 @@ void MidiSyntiStrip::iRouteShow()        QMenu* pup = oR->menu();        pup->clear(); -      pup->addSeparator()->setText(tr("Input Ports"));        MidiOutPort* t = (MidiOutPort*)track;        for (int ch = 0; ch < MIDI_CHANNELS; ++ch) { diff --git a/muse/muse/mstrip.h b/muse/muse/mstrip.h index 4c3269de..058884db 100644 --- a/muse/muse/mstrip.h +++ b/muse/muse/mstrip.h @@ -74,11 +74,10 @@ class MidiStrip : public Strip {        void autoReadToggled(bool);        void autoWriteToggled(bool);        void iRouteShow(); -      void iRouteHide();        void oRouteShow(); -      void oRouteHide();        void recordToggled(bool);        void monitorToggled(bool); +      QMenu* sendMenu() const { return static_cast<QMenu*>(sender()); }     public slots:        virtual void songChanged(int); diff --git a/muse/muse/muse.cpp b/muse/muse/muse.cpp index 52767384..01f0d1c4 100644 --- a/muse/muse/muse.cpp +++ b/muse/muse/muse.cpp @@ -23,7 +23,7 @@  #include "muse.h"  #include "transport.h"  #include "widgets/bigtime.h" -#include "arranger/arranger.h" +#include "arranger.h"  #include "midiedit/pianoroll.h"  #include "al/al.h"  #include "al/xml.h" diff --git a/muse/muse/arranger/partdrag.cpp b/muse/muse/partdrag.cpp index c47d3c11..c47d3c11 100644 --- a/muse/muse/arranger/partdrag.cpp +++ b/muse/muse/partdrag.cpp diff --git a/muse/muse/arranger/partdrag.h b/muse/muse/partdrag.h index d8c2e978..d8c2e978 100644 --- a/muse/muse/arranger/partdrag.h +++ b/muse/muse/partdrag.h diff --git a/muse/muse/preferences.cpp b/muse/muse/preferences.cpp index 6b7580d5..022a24da 100644 --- a/muse/muse/preferences.cpp +++ b/muse/muse/preferences.cpp @@ -24,7 +24,7 @@  #include "muse.h"  #include "song.h"  #include "event.h" -#include "arranger/arranger.h" +#include "arranger.h"  #include "widgets/filedialog.h"  #include "waveedit/waveedit.h"  #include "globals.h" diff --git a/muse/muse/arranger/selectfilter.h b/muse/muse/selectfilter.h index a28e6947..a28e6947 100644 --- a/muse/muse/arranger/selectfilter.h +++ b/muse/muse/selectfilter.h diff --git a/muse/muse/seqmsg.cpp b/muse/muse/seqmsg.cpp index adf2a66e..cbd0d0dd 100644 --- a/muse/muse/seqmsg.cpp +++ b/muse/muse/seqmsg.cpp @@ -27,7 +27,7 @@  #include "audio.h"  #include "audiodev.h"  #include "audio.h" -#include "arranger/arranger.h" +#include "arranger.h"  #include "plugin.h"  #include "midi.h"  #include "midictrl.h" diff --git a/muse/muse/song.cpp b/muse/muse/song.cpp index 79e1f563..a1f3bff0 100644 --- a/muse/muse/song.cpp +++ b/muse/muse/song.cpp @@ -1103,8 +1103,12 @@ void Song::seqSignal(int fd)                 strerror(errno));              return;              } +      bool graphChangedCalled = false; +      bool seekDone = false; + +// printf("seqSignal %d\n", n);        for (int i = 0; i < n; ++i) { -// printf("seqSignal to gui:<%c>\n", buffer[i]); +// printf("   seqSignal to gui:<%c>\n", buffer[i]);              switch(buffer[i]) {                    case MSG_STOP:                          stopRolling(); @@ -1116,9 +1120,12 @@ void Song::seqSignal(int fd)                          setRecord(true);                          break;                    case MSG_SEEK: -	                  setPos(0, audio->seqTime()->curTickPos, true, false, !seekInProgress); -                  	seekInProgress = false; -                        beat();           // update controller guis +                        if (!seekDone) { +                              seekDone = true; +	                        setPos(0, audio->seqTime()->curTickPos, true, false, !seekInProgress); +                  	      seekInProgress = false; +                              beat();           // update controller guis +                              }                          break;                    case MSG_JACK_SHUTDOWN:                          restartJack(); @@ -1152,7 +1159,11 @@ void Song::seqSignal(int fd)                          break;                    case MSG_GRAPH_CHANGED: -                        audioDriver->graphChanged(); +                        if (!graphChangedCalled) { +                              printf("  graph changed\n"); +                              graphChangedCalled = true; +                              audioDriver->graphChanged(); +                              }                          break;                    default: diff --git a/muse/muse/songfile.cpp b/muse/muse/songfile.cpp index 4f701bae..ff89e41e 100644 --- a/muse/muse/songfile.cpp +++ b/muse/muse/songfile.cpp @@ -20,7 +20,7 @@  #include "muse.h"  #include "song.h" -#include "arranger/arranger.h" +#include "arranger.h"  #include "al/al.h"  #include "al/xml.h"  #include "midiedit/drummap.h" diff --git a/muse/muse/strip.h b/muse/muse/strip.h index f9bc06ea..1e5f7bd4 100644 --- a/muse/muse/strip.h +++ b/muse/muse/strip.h @@ -29,7 +29,6 @@ class Meter;  class SimpleButton;  class Mixer; -// static const QSize buttonSize(STRIP_WIDTH/2-2, BUTTON_HEIGHT);  static const QSize entrySize(STRIP_WIDTH/2-2, ENTRY_HEIGHT);  //--------------------------------------------------------- @@ -55,6 +54,8 @@ class Strip : public QFrame {        void recordToggled(bool);        void addAutomationButtons(int row); +      void addMidiInPorts(QMenu* menu, Track* dtrack, int channel); +      void addMidiOutPorts(QMenu* menu, Track* strack, int channel);     public slots:        void resetPeaks(); diff --git a/muse/muse/arranger/tllineedit.cpp b/muse/muse/tllineedit.cpp index 0581b858..0581b858 100644 --- a/muse/muse/arranger/tllineedit.cpp +++ b/muse/muse/tllineedit.cpp diff --git a/muse/muse/arranger/tllineedit.h b/muse/muse/tllineedit.h index 56bfdd55..56bfdd55 100644 --- a/muse/muse/arranger/tllineedit.h +++ b/muse/muse/tllineedit.h diff --git a/muse/muse/arranger/tlswidget.cpp b/muse/muse/tlswidget.cpp index 23b7fbc1..23b7fbc1 100644 --- a/muse/muse/arranger/tlswidget.cpp +++ b/muse/muse/tlswidget.cpp diff --git a/muse/muse/arranger/tlswidget.h b/muse/muse/tlswidget.h index ccdfa3b8..ccdfa3b8 100644 --- a/muse/muse/arranger/tlswidget.h +++ b/muse/muse/tlswidget.h diff --git a/muse/muse/arranger/tlwidget.cpp b/muse/muse/tlwidget.cpp index fdf08d0b..fdf08d0b 100644 --- a/muse/muse/arranger/tlwidget.cpp +++ b/muse/muse/tlwidget.cpp diff --git a/muse/muse/arranger/tlwidget.h b/muse/muse/tlwidget.h index fbe428e2..fbe428e2 100644 --- a/muse/muse/arranger/tlwidget.h +++ b/muse/muse/tlwidget.h diff --git a/muse/muse/arranger/tlwlayout.cpp b/muse/muse/tlwlayout.cpp index 076f07cf..076f07cf 100644 --- a/muse/muse/arranger/tlwlayout.cpp +++ b/muse/muse/tlwlayout.cpp diff --git a/muse/muse/arranger/tlwlayout.h b/muse/muse/tlwlayout.h index 1a9cc914..1a9cc914 100644 --- a/muse/muse/arranger/tlwlayout.h +++ b/muse/muse/tlwlayout.h diff --git a/muse/muse/arranger/trackdrag.cpp b/muse/muse/trackdrag.cpp index beab87dd..beab87dd 100644 --- a/muse/muse/arranger/trackdrag.cpp +++ b/muse/muse/trackdrag.cpp diff --git a/muse/muse/arranger/trackdrag.h b/muse/muse/trackdrag.h index 083a94b3..083a94b3 100644 --- a/muse/muse/arranger/trackdrag.h +++ b/muse/muse/trackdrag.h diff --git a/muse/muse/arranger/trackinfo.cpp b/muse/muse/trackinfo.cpp index 1a62b1c0..1a62b1c0 100644 --- a/muse/muse/arranger/trackinfo.cpp +++ b/muse/muse/trackinfo.cpp diff --git a/muse/muse/arranger/trackinfo.h b/muse/muse/trackinfo.h index bea98d70..bea98d70 100644 --- a/muse/muse/arranger/trackinfo.h +++ b/muse/muse/trackinfo.h diff --git a/muse/muse/arranger/trelement.h b/muse/muse/trelement.h index 478b5e51..4c702ae2 100644 --- a/muse/muse/arranger/trelement.h +++ b/muse/muse/trelement.h @@ -37,10 +37,10 @@ enum {  struct TrElement {        int id;        int grp;          // default group -      char* name; +      const char* name;        int trackMask; -      TrElement(int i, int g, char* s, int m) +      TrElement(int i, int g, const char* s, int m)          : id(i), grp(g), name(s), trackMask(m) {}        }; @@ -61,4 +61,3 @@ extern const int nTrElements;  extern TrGroupList glist[Track::TRACK_TYPES];  #endif - diff --git a/muse/muse/wave.cpp b/muse/muse/wave.cpp index 41682d88..dca9843b 100644 --- a/muse/muse/wave.cpp +++ b/muse/muse/wave.cpp @@ -26,7 +26,7 @@  #include "wave.h"  #include "muse.h"  #include "widgets/filedialog.h" -#include "arranger/arranger.h" +#include "arranger.h"  #include "globals.h"  #include "event.h"  #include "audio.h" @@ -65,9 +65,9 @@ static bool copyWaveFileToProject(const QString& path)              //       we cannot easily check for identity if destination              //       file is sample rate converted              // -            // for now we assume that the file has already  +            // for now we assume that the file has already              // be imported: -            //  +            //              printf("File already exists\n");              return true;              } @@ -90,7 +90,7 @@ static bool copyWaveFileToProject(const QString& path)        SNDFILE* sfDst       = sf_open(dstFile.fileName().toLatin1().data(),              SFM_WRITE, &sfinfoDst);        if (sfDst == 0) { -            printf("Cannot open destination file<%s>: %s\n",  +            printf("Cannot open destination file<%s>: %s\n",                 dstFile.fileName().toLatin1().data(), strerror(errno));              return false;              } @@ -119,7 +119,7 @@ static bool copyWaveFileToProject(const QString& path)        bool returnValue = true;        if (sfinfoSrc.samplerate != AL::sampleRate) {              // TODO: convertsample rate -            printf("wave file has samplerate of %d, our project has %d\n",  +            printf("wave file has samplerate of %d, our project has %d\n",                 sfinfoSrc.samplerate,AL::sampleRate);              int srcType = SRC_SINC_MEDIUM_QUALITY; @@ -161,7 +161,7 @@ static bool copyWaveFileToProject(const QString& path)                    int rv = src_process(src, &data);                    if (rv > 0) { -                        printf("error sampe rate conversion: %s\n",  +                        printf("error sampe rate conversion: %s\n",                             src_strerror(rv));                          src_delete(src);                          returnValue = false; @@ -171,7 +171,7 @@ static bool copyWaveFileToProject(const QString& path)                    // write buffer                    sf_count_t n = sf_writef_float(sfDst, outBuffer, data.output_frames_gen);                    if (n != data.output_frames_gen) { -                        printf("sound write failed: returns %lld, should return %ld\n",  +                        printf("sound write failed: returns %lld, should return %ld\n",                             n, data.output_frames_gen);                          returnValue = false;                          break; @@ -220,7 +220,7 @@ static bool copyWaveFileToProject(const QString& path)                    // write buffer                    nn = sf_writef_float(sfDst, buffer, n);                    if (n != nn) { -                        printf("sound write failed: returns %lld, should return %lld\n",  +                        printf("sound write failed: returns %lld, should return %lld\n",                             nn, n);                          returnValue = false;                          break;  | 
