[SCM] python-pyo/master: New upstream release - resolving conflicts.

tiago at users.alioth.debian.org tiago at users.alioth.debian.org
Tue Jul 28 21:25:06 UTC 2015


Imported Upstream version 0.7.6
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
X-Git-Refname: refs/heads/master
X-Git-Reftype: branch
X-Git-Oldrev: 104af6a56241010d0cb138c3fa088ae372f78ee2
X-Git-Newrev: d32d0500b54a537cd13b6e385668d1ee818652e9

The following commit has been merged in the master branch:
commit 0149ec8ddf93e9c1c0d676130a7d99d9480ce511
Merge: 104af6a56241010d0cb138c3fa088ae372f78ee2 963680012d6b505e428b8f1d52cca608ac329a49
Author: Tiago Bortoletto Vaz <tiago at debian.org>
Date:   Tue Jul 28 17:02:15 2015 -0400

    New upstream release - resolving conflicts.

diff --combined ChangeLog
index 0a20360,73619a4..8e6cf4c
--- a/ChangeLog
+++ b/ChangeLog
@@@ -1,6 -1,65 +1,69 @@@
  -------------------------------------------------------------------------------------
 +2015-03-05 belangeo <belangeo at gmail.com>
  
++<<<<<<< HEAD
++=======
+ 2015-07-27 belangeo <belangeo at gmail.com>
+ 
+     * Final revision for version 0.7.6.
+     - rev 1335
+ 
+ 2015-07-24 belangeo <belangeo at gmail.com>
+ 
+     * Release tag: 0.7.6.
+     - rev 1333
+ 
+ 2015-07-24 belangeo <belangeo at gmail.com>
+ 
+     * Added missing types to OscDataSend and OscDataReceive (char, blob, True, 
+     False, None and MIDI packet).
+     - rev 1332
+ 
+ 2015-07-21 belangeo <belangeo at gmail.com>
+ 
+     * Fixed Centroid output with silence as input.
+     - rev 1330
+ 
+ 2015-07-21 belangeo <belangeo at gmail.com>
+ 
+     * Added new objet: RawMidi, a raw Midi handler.
+     - rev 1329
+ 
+ 2015-07-21 belangeo <belangeo at gmail.com>
+ 
+     * Added pyoArgsAssert call in each object's methods.
+     - rev 1320, 1325, 1327, 1328
+ 
+ 2015-07-20 belangeo <belangeo at gmail.com>
+ 
+     * Fixed the "segmentation fault" that occur sometimes when deleting an object.
+     - rev 1326
+     
+ 2015-05-31 belangeo <belangeo at gmail.com>
+ 
+     * E-Pyo: Fixed project tree.
+     - rev 1315
+ 
+ 2015-05-29 belangeo <belangeo at gmail.com>
+ 
+     * E-Pyo: stderr now prints to the output panel.
+     - rev 1314
+  
+ 2015-05-25 belangeo <belangeo at gmail.com>
+ 
+     * E-Pyo: Added code block selection (#--> and #<-- are delimiters). 
+     The background server now prints to the output panel.
+     - rev 1313
+ 
+ 2015-04-29 belangeo <belangeo at gmail.com>
+ 
+     * Fixed CPU usage of PeakAmp.
+     - rev 1312
+ 
+ -------------------------------------------------------------------------------------
+ 2015-03-05 belangeo <belangeo at gmail.com>
+ 
++>>>>>>> upstream/0.7.6
      * Fixed crash when portaudio stream is stopped on OSX (created when fixed
  	for Windows). Rev 1310 is the sources for 0.7.5 release.
      - rev 1310
diff --combined doc-sphinx/source/index.rst
index 548d84b,c2c953b..016575b
--- a/doc-sphinx/source/index.rst
+++ b/doc-sphinx/source/index.rst
@@@ -3,7 -3,7 +3,11 @@@
     You can adapt this file completely to your liking, but it should at least
     contain the root `toctree` directive.
  
++<<<<<<< HEAD
 +Welcome to the Pyo 0.7.5 documentation
++=======
+ Welcome to the Pyo 0.7.6 documentation
++>>>>>>> upstream/0.7.6
  ===================================================
  
  .. toctree::
diff --combined include/pyomodule.h
index e6f8ee1,32a3f3c..04a0e85
--- a/include/pyomodule.h
+++ b/include/pyomodule.h
@@@ -21,7 -21,7 +21,11 @@@
  #include "Python.h"
  #include <math.h>
  
++<<<<<<< HEAD
 +#define PYO_VERSION "0.7.5"
++=======
+ #define PYO_VERSION "0.7.6"
++>>>>>>> upstream/0.7.6
  
  #ifndef __MYFLT_DEF
  #define __MYFLT_DEF
@@@ -485,6 -485,7 +489,10 @@@ extern PyTypeObject PeakAmpType
  extern PyTypeObject MainParticleType;
  extern PyTypeObject ParticleType;
  extern PyTypeObject AtanTableType;
++<<<<<<< HEAD
++=======
+ extern PyTypeObject RawMidiType;
++>>>>>>> upstream/0.7.6
  
  /* Constants */
  #define E M_E
@@@ -561,51 -562,57 +569,57 @@@
  
  /* VISIT & CLEAR */
  #define pyo_VISIT \
-     if (PyServer_get_server() != NULL) \
+     if (self->server != NULL) \
          Py_VISIT(self->server); \
-     Py_VISIT(self->stream); \
+     if (self->stream != NULL) \
+         Py_VISIT(self->stream); \
      Py_VISIT(self->mul); \
      Py_VISIT(self->mul_stream); \
      Py_VISIT(self->add); \
      Py_VISIT(self->add_stream);
  
  #define pyo_table_VISIT \
-     if (PyServer_get_server() != NULL) \
+     if (self->server != NULL) \
          Py_VISIT(self->server); \
-     Py_VISIT(self->tablestream); \
+     if (self->tablestream != NULL) \
+         Py_VISIT(self->tablestream); \
  
  #define pyo_matrix_VISIT \
-     if (PyServer_get_server() != NULL) \
+     if (self->server != NULL) \
          Py_VISIT(self->server); \
-     Py_VISIT(self->matrixstream); \
+     if (self->matrixstream != NULL) \
+         Py_VISIT(self->matrixstream); \
  
  #define pyo_CLEAR \
-     if (PyServer_get_server() != NULL) { \
+     if (self->server != NULL) { \
          Py_INCREF(self->server); \
          Py_CLEAR(self->server); \
      } \
-     Py_CLEAR(self->stream); \
+     if (self->stream != NULL) \
+         Py_CLEAR(self->stream); \
      Py_CLEAR(self->mul); \
      Py_CLEAR(self->mul_stream); \
      Py_CLEAR(self->add); \
      Py_CLEAR(self->add_stream); \
  
  #define pyo_table_CLEAR \
-     if (PyServer_get_server() != NULL) { \
+     if (self->server != NULL) { \
          Py_INCREF(self->server); \
          Py_CLEAR(self->server); \
      } \
-     Py_CLEAR(self->tablestream); \
+     if (self->tablestream != NULL) \
+         Py_CLEAR(self->tablestream); \
  
  #define pyo_matrix_CLEAR \
-     if (PyServer_get_server() != NULL) { \
+     if (self->server != NULL) { \
          Py_INCREF(self->server); \
          Py_CLEAR(self->server); \
      } \
-     Py_CLEAR(self->matrixstream); \
+     if (self->matrixstream != NULL) \
+         Py_CLEAR(self->matrixstream); \
  
  #define pyo_DEALLOC \
-     if (PyServer_get_server() != NULL) \
+     if (self->server != NULL && self->stream != NULL) \
          Server_removeStream((Server *)self->server, Stream_getStreamId(self->stream)); \
      free(self->data); \
  
diff --combined installers/osx/release_x86_64.sh
index 2779969,2275a10..a09bb17
--- a/installers/osx/release_x86_64.sh
+++ b/installers/osx/release_x86_64.sh
@@@ -7,9 -7,9 +7,15 @@@
  # 3. cd utils and build E-Pyo
  # 4. cd installer/osx and build the realease, only x86_64 version
  
++<<<<<<< HEAD
 +export PACKAGE_NAME=pyo_0.7.5_x86_64.pkg
 +export DMG_DIR="pyo 0.7.5 Universal"
 +export DMG_NAME="pyo_0.7.5_OSX-universal.dmg"
++=======
+ export PACKAGE_NAME=pyo_0.7.6_x86_64.pkg
+ export DMG_DIR="pyo 0.7.6 Universal"
+ export DMG_NAME="pyo_0.7.6_OSX-universal.dmg"
++>>>>>>> upstream/0.7.6
  export INSTALLER_DIR=`pwd`/installer
  export PYO_MODULE_DIR=$INSTALLER_DIR/PyoModule/Package_Contents/tmp
  export SUPPORT_LIBS_DIR=$INSTALLER_DIR/SupportLibs/Package_Contents/usr/local/lib
diff --combined installers/win/README-win32-py26.txt
index e482de4,b974713..e60f08e
--- a/installers/win/README-win32-py26.txt
+++ b/installers/win/README-win32-py26.txt
@@@ -1,21 -1,21 +1,45 @@@
++<<<<<<< HEAD
 +Pyo is a Python module written in C to help digital signal processing script creation.
 +
 +* Python 2.6 must be installed on your system before running this installer. *
 +
 +http://www.python.org/download/releases/2.6.6/
 +
 +To use the WxPython toolkit for widgets, you need to install wxPython 3.0 for python 2.6:
 +
 +http://www.wxpython.org/download.php#stable
 +
 +This installer will leave a folder called pyo_examples on the Desktop, 
 +it's a good starting point to explore the library!
 +
 +In a Command Prompt:
 +
 +cd Desktop\pyo_examples\algorithmic
 +python 01_music_box.py
 +
 +Please, send comments and bugs to:
 +
 +belangeo at gmail.com
++=======
+ Pyo is a Python module written in C to help digital signal processing script creation.
+ 
+ * Python 2.6 must be installed on your system before running this installer. *
+ 
+ http://www.python.org/download/releases/2.6.6/
+ 
+ To use the WxPython toolkit for widgets, you need to install wxPython 3.0 for python 2.6:
+ 
+ http://www.wxpython.org/download.php#stable
+ 
+ This installer will leave a folder called pyo_examples on the Desktop, 
+ it's a good starting point to explore the library!
+ 
+ In a Command Prompt:
+ 
+ cd Desktop\pyo_examples\algorithmic
+ python 01_music_box.py
+ 
+ Please, send comments and bugs to:
+ 
+ belangeo at gmail.com
++>>>>>>> upstream/0.7.6
diff --combined installers/win/README-win32-py27.txt
index eddb84d,e3f8d78..3ae160e
--- a/installers/win/README-win32-py27.txt
+++ b/installers/win/README-win32-py27.txt
@@@ -1,21 -1,21 +1,45 @@@
++<<<<<<< HEAD
 +Pyo is a Python module written in C to help digital signal processing script creation.
 +
 +* Python 2.7 must be installed on your system before running this installer. *
 +
 +http://www.python.org/download/
 +
 +To use the WxPython toolkit for widgets, you need to install wxPython 3.0 for python 2.7:
 +
 +http://www.wxpython.org/download.php#stable
 +
 +This installer will leave a folder called pyo_examples on the Desktop, 
 +it's a good starting point to explore the library!
 +
 +In a Command Prompt:
 +
 +cd Desktop\pyo_examples\algorithmic
 +python 01_music_box.py
 +
 +Please, send comments and bugs to:
 +
 +belangeo at gmail.com
++=======
+ Pyo is a Python module written in C to help digital signal processing script creation.
+ 
+ * Python 2.7 must be installed on your system before running this installer. *
+ 
+ http://www.python.org/download/
+ 
+ To use the WxPython toolkit for widgets, you need to install wxPython 3.0 for python 2.7:
+ 
+ http://www.wxpython.org/download.php#stable
+ 
+ This installer will leave a folder called pyo_examples on the Desktop, 
+ it's a good starting point to explore the library!
+ 
+ In a Command Prompt:
+ 
+ cd Desktop\pyo_examples\algorithmic
+ python 01_music_box.py
+ 
+ Please, send comments and bugs to:
+ 
+ belangeo at gmail.com
++>>>>>>> upstream/0.7.6
diff --combined installers/win/win_installer_py26.iss
index 8f0acd5,969ccb3..c569ddd
--- a/installers/win/win_installer_py26.iss
+++ b/installers/win/win_installer_py26.iss
@@@ -1,15 -1,15 +1,30 @@@
++<<<<<<< HEAD
 +; Script generated by the Inno Setup Script Wizard.
 +; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
 +
 +#define appName "pyo"
 +#define pyVer "2.6"
 +#define appVer "0.7.5"
 +
 +[Setup]
 +; NOTE: The value of AppId uniquely identifies this application.
 +; Do not use the same AppId value in installers for other applications.
 +; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
 +AppId={{AC79C5C4-BE36-419E-B94A-98C6D0DCF4B9}
++=======
+ ; Script generated by the Inno Setup Script Wizard.
+ ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
+ 
+ #define appName "pyo"
+ #define pyVer "2.6"
+ #define appVer "0.7.6"
+ 
+ [Setup]
+ ; NOTE: The value of AppId uniquely identifies this application.
+ ; Do not use the same AppId value in installers for other applications.
+ ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
+ AppId={{AC79C5C4-BE36-419E-B94A-98C6D0DCF4B9}
++>>>>>>> upstream/0.7.6
  AppName={#appName}
  AppVersion={#appVer}
  AppPublisher=iACT.umontreal.ca
@@@ -21,82 -21,82 +36,161 @@@ DisableDirPage=n
  AlwaysShowDirOnReadyPage=yes
  DefaultGroupName={#appName}
  AllowNoIcons=yes
++<<<<<<< HEAD
 +InfoBeforeFile=C:\Users\olipet\svn\pyo\installers\win\\README-win32-py26.txt
 +LicenseFile=C:\Users\olipet\svn\pyo\COPYING.txt
 +OutputBaseFilename={#appName}_{#appVer}_py{#pyVer}_setup
 +Compression=lzma
 +SolidCompression=yes
 +ChangesAssociations=yes
 +ChangesEnvironment=yes
 +DirExistsWarning=no
 +SetupIconFile=C:\Users\olipet\svn\pyo\utils\E-PyoIcon.ico
 +
 +[Languages]
 +Name: "english"; MessagesFile: "compiler:Default.isl"
 +
 +; should use PYTHONPATH variable
 +[Files]
 +Source: "C:\Python26\Lib\site-packages\pyo.py"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
 +Source: "C:\Python26\Lib\site-packages\pyo64.py"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
 +Source: "C:\Python26\Lib\site-packages\pyolib\*"; DestDir: "{app}\Lib\site-packages\pyolib"; Flags: ignoreversion recursesubdirs createallsubdirs
 +Source: "C:\Python26\Lib\site-packages\_pyo.pyd"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
 +Source: "C:\Python26\Lib\site-packages\_pyo64.pyd"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
 +Source: "C:\Python26\Lib\site-packages\libsndfile-1.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
 +Source: "C:\Python26\Lib\site-packages\lo.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
 +Source: "C:\Python26\Lib\site-packages\portaudio.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
 +Source: "C:\Python26\Lib\site-packages\portmidi.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
 +Source: "C:\Python26\Lib\site-packages\porttime.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
 +Source: "C:\Python26\Lib\site-packages\pthreadVC2.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
 +Source: "C:\Python26\Lib\site-packages\msvcr90.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
 +Source: "C:\MinGW\bin\libgcc_s_dw2-1.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
 +Source: "C:\MinGW\bin\libstdc++-6.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
 +Source: "C:\Python26\Lib\site-packages\pyo-{#appVer}-py{#pyVer}.egg-info"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
 +Source: "C:\Users\olipet\svn\pyo\examples\*"; DestDir: "{userdesktop}\pyo_examples\"; Flags: ignoreversion recursesubdirs createallsubdirs
 +Source: "C:\Users\olipet\svn\pyo\installers\win\README-win32-py26.txt"; DestDir: "{userdesktop}"; Flags: ignoreversion
 +; NOTE: Don't use "Flags: ignoreversion" on any shared system files
 +
 +; E-Pyo stuff
 +Source: "C:\Users\olipet\svn\pyo\utils\E-Pyo_py26\E-Pyo.exe"; DestDir: "{pf}\E-Pyo"; Flags: ignoreversion
 +Source: "C:\Users\olipet\svn\pyo\utils\E-Pyo_py26\Resources\*"; DestDir: "{pf}\E-Pyo\Resources"; Flags: ignoreversion recursesubdirs createallsubdirs
 +
 +[Tasks]
 +Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"
 +
 +[Icons]
 +Name: "{group}\E-Pyo"; Filename: "{pf}\E-Pyo\E-Pyo.exe"; WorkingDir: "{pf}\E-Pyo"
 +Name: "{commondesktop}\E-Pyo"; Filename: "{pf}\E-Pyo\E-Pyo.exe"; Tasks: desktopicon
 +
 +[Run]
 +Filename: "{pf}\E-Pyo\E-Pyo.exe"; Description: "{cm:LaunchProgram,E-Pyo}"; Flags: nowait postinstall skipifsilent
 +
 +[InstallDelete]
 +Type: filesandordirs; Name: "{userdesktop}\pyo_examples";
 +Type: filesandordirs; Name: "{userdocs}\.epyo";
 +;;;;;;;;;;;;;
 +
 +[Registry]
 +Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: expandsz; ValueName: "Path"; ValueData: "C:\Python26;{olddata}"; Check: NeedsAddPath('{app}')
 +
 +[Code]
 +procedure ExitProcess(exitCode:integer);
 +  external 'ExitProcess at kernel32.dll stdcall';
 +
 +function NeedsAddPath(Param: string): boolean;
 +var
 +  OrigPath: string;
 +begin
 +  if not RegQueryStringValue(HKEY_LOCAL_MACHINE,
 +    'SYSTEM\CurrentControlSet\Control\Session Manager\Environment',
 +    'Path', OrigPath)
 +  then begin
 +    Result := True;
 +    exit;
 +  end;
 +  // look for the path with leading and trailing semicolon
 +  // Pos() returns 0 if not found
 +  Result := Pos(';' + Param + ';', ';' + OrigPath + ';') = 0;
 +end;
 +
++=======
+ InfoBeforeFile=C:\Users\olivier\svn\pyo\installers\win\\README-win32-py26.txt
+ LicenseFile=C:\Users\olivier\svn\pyo\COPYING.txt
+ OutputBaseFilename={#appName}_{#appVer}_py{#pyVer}_setup
+ Compression=lzma
+ SolidCompression=yes
+ ChangesAssociations=yes
+ ChangesEnvironment=yes
+ DirExistsWarning=no
+ SetupIconFile=C:\Users\olivier\svn\pyo\utils\E-PyoIcon.ico
+ 
+ [Languages]
+ Name: "english"; MessagesFile: "compiler:Default.isl"
+ 
+ ; should use PYTHONPATH variable
+ [Files]
+ Source: "C:\Python26\Lib\site-packages\pyo.py"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
+ Source: "C:\Python26\Lib\site-packages\pyo64.py"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
+ Source: "C:\Python26\Lib\site-packages\pyolib\*"; DestDir: "{app}\Lib\site-packages\pyolib"; Flags: ignoreversion recursesubdirs createallsubdirs
+ Source: "C:\Python26\Lib\site-packages\_pyo.pyd"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
+ Source: "C:\Python26\Lib\site-packages\_pyo64.pyd"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
+ Source: "C:\Python26\Lib\site-packages\libsndfile-1.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
+ Source: "C:\Python26\Lib\site-packages\lo.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
+ Source: "C:\Python26\Lib\site-packages\portaudio.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
+ Source: "C:\Python26\Lib\site-packages\portmidi.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
+ Source: "C:\Python26\Lib\site-packages\porttime.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
+ Source: "C:\Python26\Lib\site-packages\pthreadVC2.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
+ Source: "C:\Python26\Lib\site-packages\msvcr90.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
+ Source: "C:\MinGW\bin\libgcc_s_dw2-1.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
+ Source: "C:\MinGW\bin\libstdc++-6.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
+ Source: "C:\Python26\Lib\site-packages\pyo-{#appVer}-py{#pyVer}.egg-info"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
+ Source: "C:\Users\olivier\svn\pyo\examples\*"; DestDir: "{userdesktop}\pyo_examples\"; Flags: ignoreversion recursesubdirs createallsubdirs
+ Source: "C:\Users\olivier\svn\pyo\installers\win\README-win32-py26.txt"; DestDir: "{userdesktop}"; Flags: ignoreversion
+ ; NOTE: Don't use "Flags: ignoreversion" on any shared system files
+ 
+ ; E-Pyo stuff
+ Source: "C:\Users\olivier\svn\pyo\utils\E-Pyo_py26\E-Pyo.exe"; DestDir: "{pf}\E-Pyo"; Flags: ignoreversion
+ Source: "C:\Users\olivier\svn\pyo\utils\E-Pyo_py26\Resources\*"; DestDir: "{pf}\E-Pyo\Resources"; Flags: ignoreversion recursesubdirs createallsubdirs
+ 
+ [Tasks]
+ Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"
+ 
+ [Icons]
+ Name: "{group}\E-Pyo"; Filename: "{pf}\E-Pyo\E-Pyo.exe"; WorkingDir: "{pf}\E-Pyo"
+ Name: "{commondesktop}\E-Pyo"; Filename: "{pf}\E-Pyo\E-Pyo.exe"; Tasks: desktopicon
+ 
+ [Run]
+ Filename: "{pf}\E-Pyo\E-Pyo.exe"; Description: "{cm:LaunchProgram,E-Pyo}"; Flags: nowait postinstall skipifsilent
+ 
+ [InstallDelete]
+ Type: filesandordirs; Name: "{userdesktop}\pyo_examples";
+ Type: filesandordirs; Name: "{userdocs}\.epyo";
+ ;;;;;;;;;;;;;
+ 
+ [Registry]
+ Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: expandsz; ValueName: "Path"; ValueData: "C:\Python26;{olddata}"; Check: NeedsAddPath('{app}')
+ 
+ [Code]
+ procedure ExitProcess(exitCode:integer);
+   external 'ExitProcess at kernel32.dll stdcall';
+ 
+ function NeedsAddPath(Param: string): boolean;
+ var
+   OrigPath: string;
+ begin
+   if not RegQueryStringValue(HKEY_LOCAL_MACHINE,
+     'SYSTEM\CurrentControlSet\Control\Session Manager\Environment',
+     'Path', OrigPath)
+   then begin
+     Result := True;
+     exit;
+   end;
+   // look for the path with leading and trailing semicolon
+   // Pos() returns 0 if not found
+   Result := Pos(';' + Param + ';', ';' + OrigPath + ';') = 0;
+ end;
+ 
++>>>>>>> upstream/0.7.6
  function GetDirName(Value: string): string;
  var          
    InstallPath: string;
@@@ -128,6 -128,6 +222,12 @@@ begi
      BEGIN
      Result := 'C:\Python26';
     END
++<<<<<<< HEAD
 +end;
 +
 +
++=======
+ end;
+ 
+ 
++>>>>>>> upstream/0.7.6
diff --combined installers/win/win_installer_py27.iss
index af16bc9,797e6f4..10c214c
--- a/installers/win/win_installer_py27.iss
+++ b/installers/win/win_installer_py27.iss
@@@ -1,99 -1,99 +1,198 @@@
++<<<<<<< HEAD
 +; Script generated by the Inno Setup Script Wizard.
 +; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
 +
 +#define appName "pyo"
 +#define pyVer "2.7"
 +#define appVer "0.7.5"
 +
 +[Setup]
 +; NOTE: The value of AppId uniquely identifies this application.
 +; Do not use the same AppId value in installers for other applications.
 +; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
 +AppId={{59447873-F994-4BC7-8B1D-0DDCA5B6AFFD}
 +AppName={#appName}
 +AppVersion={#appVer}
 +AppPublisher=iACT.umontreal.ca
 +AppPublisherURL=http://code.google.com/p/pyo
 +AppSupportURL=http://code.google.com/p/pyo
 +AppUpdatesURL=http://code.google.com/p/pyo
 +DefaultDirName={code:GetDirName}
 +DisableDirPage=no
 +AlwaysShowDirOnReadyPage=yes
 +DefaultGroupName={#appName}
 +AllowNoIcons=yes
 +InfoBeforeFile=C:\Users\olipet\svn\pyo\installers\win\\README-win32-py27.txt
 +LicenseFile=C:\Users\olipet\svn\pyo\COPYING.txt
 +OutputBaseFilename={#appName}_{#appVer}_py{#pyVer}_setup
 +Compression=lzma
 +SolidCompression=yes
 +ChangesAssociations=yes
 +ChangesEnvironment=yes
 +DirExistsWarning=no
 +SetupIconFile=C:\Users\olipet\svn\pyo\utils\E-PyoIcon.ico
 +
 +[Languages]
 +Name: "english"; MessagesFile: "compiler:Default.isl"
 +
 +[Files]
 +Source: "C:\Python27\Lib\site-packages\pyo.py"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion 
 +Source: "C:\Python27\Lib\site-packages\pyo64.py"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
 +Source: "C:\Python27\Lib\site-packages\pyolib\*"; DestDir: "{app}\Lib\site-packages\pyolib"; Flags: ignoreversion recursesubdirs createallsubdirs
 +Source: "C:\Python27\Lib\site-packages\_pyo.pyd"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
 +Source: "C:\Python27\Lib\site-packages\_pyo64.pyd"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
 +Source: "C:\Python27\Lib\site-packages\libsndfile-1.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
 +Source: "C:\Python27\Lib\site-packages\lo.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
 +Source: "C:\Python27\Lib\site-packages\portaudio.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
 +Source: "C:\Python27\Lib\site-packages\portmidi.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
 +Source: "C:\Python27\Lib\site-packages\porttime.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
 +Source: "C:\Python27\Lib\site-packages\pthreadVC2.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
 +Source: "C:\Python27\Lib\site-packages\msvcr90.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
 +Source: "C:\MinGW\bin\libgcc_s_dw2-1.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
 +Source: "C:\MinGW\bin\libstdc++-6.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
 +Source: "C:\Python27\Lib\site-packages\pyo-{#appVer}-py{#pyVer}.egg-info"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
 +Source: "C:\Users\olipet\svn\pyo\examples\*"; DestDir: "{userdesktop}\pyo_examples\"; Flags: ignoreversion recursesubdirs createallsubdirs
 +; NOTE: Don't use "Flags: ignoreversion" on any shared system files
 +
 +; E-Pyo stuff
 +Source: "C:\Users\olipet\svn\pyo\utils\E-Pyo_py27\E-Pyo.exe"; DestDir: "{pf}\E-Pyo"; Flags: ignoreversion
 +Source: "C:\Users\olipet\svn\pyo\utils\E-Pyo_py27\Resources\*"; DestDir: "{pf}\E-Pyo\Resources"; Flags: ignoreversion recursesubdirs createallsubdirs
 +
 +[Tasks]
 +Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"
 +
 +[Icons]
 +Name: "{group}\E-Pyo"; Filename: "{pf}\E-Pyo\E-Pyo.exe"; WorkingDir: "{pf}\E-Pyo"
 +Name: "{commondesktop}\E-Pyo"; Filename: "{pf}\E-Pyo\E-Pyo.exe"; Tasks: desktopicon
 +
 +[Run]
 +Filename: "{pf}\E-Pyo\E-Pyo.exe"; Description: "{cm:LaunchProgram,E-Pyo}"; Flags: nowait postinstall skipifsilent
 +
 +[InstallDelete]
 +Type: filesandordirs; Name: "{userdesktop}\pyo_examples";
 +Type: filesandordirs; Name: "{userdocs}\.epyo";
 +;;;;;;;;;;;;;
 +
 +[Registry]
 +Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: expandsz; ValueName: "Path"; ValueData: "{app};{olddata}"; Check: NeedsAddPath('{app}')
 +
 +[Code]
 +procedure ExitProcess(exitCode:integer);
 +  external 'ExitProcess at kernel32.dll stdcall';
 +
 +function NeedsAddPath(Param: string): boolean;
 +var
 +  OrigPath: string;
 +begin
 +  if not RegQueryStringValue(HKEY_LOCAL_MACHINE,
 +    'SYSTEM\CurrentControlSet\Control\Session Manager\Environment',
 +    'Path', OrigPath)
 +  then begin
 +    Result := True;
 +    exit;
 +  end;
 +  // look for the path with leading and trailing semicolon
 +  // Pos() returns 0 if not found
 +  Result := Pos(';' + Param + ';', ';' + OrigPath + ';') = 0;
 +end;
++=======
+ ; Script generated by the Inno Setup Script Wizard.
+ ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
+ 
+ #define appName "pyo"
+ #define pyVer "2.7"
+ #define appVer "0.7.6"
+ 
+ [Setup]
+ ; NOTE: The value of AppId uniquely identifies this application.
+ ; Do not use the same AppId value in installers for other applications.
+ ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
+ AppId={{59447873-F994-4BC7-8B1D-0DDCA5B6AFFD}
+ AppName={#appName}
+ AppVersion={#appVer}
+ AppPublisher=iACT.umontreal.ca
+ AppPublisherURL=http://code.google.com/p/pyo
+ AppSupportURL=http://code.google.com/p/pyo
+ AppUpdatesURL=http://code.google.com/p/pyo
+ DefaultDirName={code:GetDirName}
+ DisableDirPage=no
+ AlwaysShowDirOnReadyPage=yes
+ DefaultGroupName={#appName}
+ AllowNoIcons=yes
+ InfoBeforeFile=C:\Users\olivier\svn\pyo\installers\win\\README-win32-py27.txt
+ LicenseFile=C:\Users\olivier\svn\pyo\COPYING.txt
+ OutputBaseFilename={#appName}_{#appVer}_py{#pyVer}_setup
+ Compression=lzma
+ SolidCompression=yes
+ ChangesAssociations=yes
+ ChangesEnvironment=yes
+ DirExistsWarning=no
+ SetupIconFile=C:\Users\olivier\svn\pyo\utils\E-PyoIcon.ico
+ 
+ [Languages]
+ Name: "english"; MessagesFile: "compiler:Default.isl"
+ 
+ [Files]
+ Source: "C:\Python27\Lib\site-packages\pyo.py"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion 
+ Source: "C:\Python27\Lib\site-packages\pyo64.py"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
+ Source: "C:\Python27\Lib\site-packages\pyolib\*"; DestDir: "{app}\Lib\site-packages\pyolib"; Flags: ignoreversion recursesubdirs createallsubdirs
+ Source: "C:\Python27\Lib\site-packages\_pyo.pyd"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
+ Source: "C:\Python27\Lib\site-packages\_pyo64.pyd"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
+ Source: "C:\Python27\Lib\site-packages\libsndfile-1.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
+ Source: "C:\Python27\Lib\site-packages\lo.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
+ Source: "C:\Python27\Lib\site-packages\portaudio.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
+ Source: "C:\Python27\Lib\site-packages\portmidi.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
+ Source: "C:\Python27\Lib\site-packages\porttime.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
+ Source: "C:\Python27\Lib\site-packages\pthreadVC2.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
+ Source: "C:\Python27\Lib\site-packages\msvcr90.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
+ Source: "C:\MinGW\bin\libgcc_s_dw2-1.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
+ Source: "C:\MinGW\bin\libstdc++-6.dll"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
+ Source: "C:\Python27\Lib\site-packages\pyo-{#appVer}-py{#pyVer}.egg-info"; DestDir: "{app}\Lib\site-packages"; Flags: ignoreversion
+ Source: "C:\Users\olivier\svn\pyo\examples\*"; DestDir: "{userdesktop}\pyo_examples\"; Flags: ignoreversion recursesubdirs createallsubdirs
+ ; NOTE: Don't use "Flags: ignoreversion" on any shared system files
+ 
+ ; E-Pyo stuff
+ Source: "C:\Users\olivier\svn\pyo\utils\E-Pyo_py27\E-Pyo.exe"; DestDir: "{pf}\E-Pyo"; Flags: ignoreversion
+ Source: "C:\Users\olivier\svn\pyo\utils\E-Pyo_py27\Resources\*"; DestDir: "{pf}\E-Pyo\Resources"; Flags: ignoreversion recursesubdirs createallsubdirs
+ 
+ [Tasks]
+ Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"
+ 
+ [Icons]
+ Name: "{group}\E-Pyo"; Filename: "{pf}\E-Pyo\E-Pyo.exe"; WorkingDir: "{pf}\E-Pyo"
+ Name: "{commondesktop}\E-Pyo"; Filename: "{pf}\E-Pyo\E-Pyo.exe"; Tasks: desktopicon
+ 
+ [Run]
+ Filename: "{pf}\E-Pyo\E-Pyo.exe"; Description: "{cm:LaunchProgram,E-Pyo}"; Flags: nowait postinstall skipifsilent
+ 
+ [InstallDelete]
+ Type: filesandordirs; Name: "{userdesktop}\pyo_examples";
+ Type: filesandordirs; Name: "{userdocs}\.epyo";
+ ;;;;;;;;;;;;;
+ 
+ [Registry]
+ Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: expandsz; ValueName: "Path"; ValueData: "{app};{olddata}"; Check: NeedsAddPath('{app}')
+ 
+ [Code]
+ procedure ExitProcess(exitCode:integer);
+   external 'ExitProcess at kernel32.dll stdcall';
+ 
+ function NeedsAddPath(Param: string): boolean;
+ var
+   OrigPath: string;
+ begin
+   if not RegQueryStringValue(HKEY_LOCAL_MACHINE,
+     'SYSTEM\CurrentControlSet\Control\Session Manager\Environment',
+     'Path', OrigPath)
+   then begin
+     Result := True;
+     exit;
+   end;
+   // look for the path with leading and trailing semicolon
+   // Pos() returns 0 if not found
+   Result := Pos(';' + Param + ';', ';' + OrigPath + ';') = 0;
+ end;
++>>>>>>> upstream/0.7.6
  
  function GetDirName(Value: string): string;
  var          
diff --combined pyo.py
index 02ae816,8c2eb72..48131ba
--- a/pyo.py
+++ b/pyo.py
@@@ -97,7 -97,7 +97,11 @@@ OBJECTS_TREE = {'functions': sorted(['p
                                                          'BrownNoise', 'Rossler', 'Lorenz', 'LFO', 'SumOsc', 'SuperSaw', 'RCOsc']),
                                    'internals': sorted(['Dummy', 'InputFader', 'Mix', 'VarPort']),
                                    'midi': sorted(['Midictl', 'CtlScan', 'CtlScan2', 'Notein', 'MidiAdsr', 'MidiDelAdsr', 'Bendin',
++<<<<<<< HEAD
 +                                                  'Touchin', 'Programin']),
++=======
+                                                   'Touchin', 'Programin', 'RawMidi']),
++>>>>>>> upstream/0.7.6
                                    'opensndctrl': sorted(['OscReceive', 'OscSend', 'OscDataSend', 'OscDataReceive', 'OscListReceive']),
                                    'pan': sorted(['Pan', 'SPan', 'Switch', 'Selector', 'Mixer', 'VoiceManager']),
                                    'pattern': sorted(['Pattern', 'Score', 'CallAfter']),
diff --combined pyolib/_core.py
index 64f875d,5549858..cb42326
--- a/pyolib/_core.py
+++ b/pyolib/_core.py
@@@ -18,7 -18,7 +18,11 @@@ GNU Lesser General Public License for m
  You should have received a copy of the GNU Lesser General Public
  License along with pyo.  If not, see <http://www.gnu.org/licenses/>.
  """
++<<<<<<< HEAD
 +from types import ListType, TupleType, SliceType, FloatType, StringType, UnicodeType, NoneType
++=======
+ from types import BooleanType, ListType, TupleType, SliceType, LongType, IntType, FloatType, StringType, UnicodeType, NoneType
++>>>>>>> upstream/0.7.6
  import random, os, sys, inspect, tempfile
  from subprocess import call
  from weakref import proxy
@@@ -64,6 -64,147 +68,147 @@@ FUNCTIONS_INIT_LINES = {"pa_count_host_
                          "wrap": "wrap(arg, i)", "floatmap": "floatmap(x, min=0, max=1, exp=1)"
                          }
  
+ class PyoError(Exception):
+     """Base class for all pyo exceptions."""
+ 
+ class PyoServerStateException(PyoError):
+     """Error raised when an operation requires the server to be booted."""
+ 
+ class PyoArgumentTypeError(PyoError):
+     """Error raised when if an object got an invalid argument."""
+ 
+ def isAudioObject(obj):
+     return isinstance(obj, PyoObject) or hasattr(obj, "stream")
+ 
+ def isTableObject(obj):
+     return isinstance(obj, PyoTableObject) or hasattr(obj, "tablestream")
+ 
+ def isMatrixObject(obj):
+     return isinstance(obj, PyoMatrixObject) or hasattr(obj, "matrixstream")
+ 
+ def isPVObject(obj):
+     return isinstance(obj, PyoPVObject) or hasattr(obj, "pv_stream")
+     
+ def pyoArgsAssert(obj, format, *args):
+     """
+     Raise an Exception if an object got an invalid argument.
+     
+     :Args:
+         
+         obj : Pyo object on which method is called.
+             Usually "self" in the function call.
+         format :
+             String of length equal to the number of arguments. Each character
+             indicating the expected argument type.
+             
+             - O : float or PyoObject
+             - o : PyoObject
+             - T : float or PyoTableObject
+             - t : PyoTableObject
+             - m : PyoMatrixObject
+             - p : PyoPVObject
+             - n : any number (int or float)
+             - N : any number (no list-expansion)
+             - f : float
+             - F : float (no list-expansion)
+             - i : integer
+             - I : integer (no list-expansion)
+             - s : string or unicode
+             - S : string or unicode (no list-expansion)
+             - b : boolean
+             - B : boolean (no list-expansion)
+             - l : list
+             - L : list or None
+             - u : tuple
+             - x : sequence (list or tuple)
+             - c : callable
+             - C : callable (no list-expansion)
+             - z : anything
+         *args : any
+             Arguments passed to the object's method.
+             
+     """
+     expected = ""
+     for i in range(len(args)):
+         f = format[i]
+         argtype = type(args[i])
+         if f == "O":
+             if not isAudioObject(args[i]) and \
+                     argtype not in [ListType, IntType, LongType, FloatType]:
+                 expected = "float or PyoObject"
+         elif f == "o":
+             if not isAudioObject(args[i]) and argtype not in [ListType]:
+                 expected = "PyoObject"
+         elif f == "T":
+             if not isTableObject(args[i]) and argtype not in [FloatType, ListType]:
+                 expected = "float or PyoTableObject"
+         elif f == "t":
+             if not isTableObject(args[i]) and argtype not in [ListType]:
+                 expected = "PyoTableObject"
+         elif f == "m":
+             if not isMatrixObject(args[i]) and argtype not in [ListType]:
+                 expected = "PyoMatrixObject"
+         elif f == "p":
+             if not isPVObject(args[i]) and argtype not in [ListType]:
+                 expected = "PyoPVObject"
+         elif f == "n":
+             if argtype not in [ListType, IntType, LongType, FloatType]:
+                 expected = "any number"
+         elif f == "N":
+             if argtype not in [IntType, LongType, FloatType]:
+                 expected = "any number - list not allowed"
+         elif f == "f":
+             if argtype not in [ListType, FloatType]:
+                 expected = "float"
+         elif f == "F":
+             if argtype not in [FloatType]:
+                 expected = "float - list not allowed"
+         elif f == "i":
+             if argtype not in [ListType, IntType, LongType]:
+                 expected = "integer"
+         elif f == "I":
+             if argtype not in [IntType, LongType]:
+                 expected = "integer - list not allowed"
+         elif f == "s":
+             if argtype not in [ListType, StringType, UnicodeType]:
+                 expected = "string"
+         elif f == "S":
+             if argtype not in [StringType, UnicodeType]:
+                 expected = "string - list not allowed"
+         elif f == "b":
+             if argtype not in [BooleanType, ListType, IntType, LongType]:
+                 expected = "boolean"
+         elif f == "B":
+             if argtype not in [BooleanType, IntType, LongType]:
+                 expected = "boolean - list not allowed"
+         elif f == "l":
+             if argtype not in [ListType]:
+                 expected = "list"
+         elif f == "L":
+             if argtype not in [ListType, NoneType]:
+                 expected = "list or None"
+         elif f == "u":
+             if argtype not in [TupleType]:
+                 expected = "tuple"
+         elif f == "x":
+             if argtype not in [ListType, TupleType]:
+                 expected = "list or tuple"
+         elif f == "c":
+             if not callable(args[i]) and argtype not in [ListType, TupleType, NoneType]:
+                 expected = "callable"
+         elif f == "C":
+             if not callable(args[i]) and argtype not in [NoneType]:
+                 expected = "callable - list not allowed"
+         elif f == "z":
+             pass
+                 
+         if expected:
+             break
+ 
+     if expected:
+         name = obj.__class__.__name__
+         raise PyoArgumentTypeError('bad argument at position %d to "%s" (%s expected, got %s)' % (i, name, expected, argtype))
+ 
  def convertStringToSysEncoding(str):
      """
      Convert a string to the current platform file system encoding.
@@@ -245,19 -386,13 +390,26 @@@ class WeakMethod(object)
          else:
              self.method = callobj
              self.isMethod = False
++<<<<<<< HEAD
 +
 +    def __call__(self, *args, **kwargs):
 +        """Call the method with args and kwargs as needed."""
 +        if self.isMethod:
 +            return self.method(self.target, *args, **kwargs)
 +        else:
 +            return self.method(*args, **kwargs)
 +
 +class PyoError(Exception):
 +    """Base class for all pyo exceptions."""
++=======
++>>>>>>> upstream/0.7.6
  
- class PyoServerStateException(PyoError):
-     """Error raised when an operation requires the server to be booted."""
+     def __call__(self, *args, **kwargs):
+         """Call the method with args and kwargs as needed."""
+         if self.isMethod:
+             return self.method(self.target, *args, **kwargs)
+         else:
+             return self.method(*args, **kwargs)
  
  ######################################################################
  ### PyoObjectBase -> abstract class for pyo objects
@@@ -317,17 -452,17 +469,32 @@@ class PyoObjectBase(object)
          return self._base_objs
  
      def getServer(self):
++<<<<<<< HEAD
+         """
+         Return a reference to the current Server object.
+ 
+         """
+         return self._base_objs[0].getServer()
+ 
+     def getSamplingRate(self):
+         """
+         Return the current sampling rate (samples per second), as a float.
++=======
 +        """
 +        Return a reference to the current Server object.
 +
 +        """
 +        return self._base_objs[0].getServer()
++>>>>>>> upstream/0.7.6
 +
 +    def getSamplingRate(self):
 +        """
++<<<<<<< HEAD
++=======
 +        Return the current sampling rate (samples per second), as a float.
  
          """
++>>>>>>> upstream/0.7.6
          return self._base_objs[0].getServer().getSamplingRate()
  
      def getBufferSize(self):
@@@ -606,6 -741,7 +773,7 @@@ class PyoObject(PyoObjectBase)
                  of the first stream.
  
          """
+         pyoArgsAssert(self, "B", all)
          if all:
              return [obj._getStream().isPlaying() for obj in self._base_objs]
          else:
@@@ -625,6 -761,7 +793,7 @@@
                  of the first stream.
  
          """
+         pyoArgsAssert(self, "B", all)
          if all:
              return [obj._getStream().isOutputting() for obj in self._base_objs]
          else:
@@@ -651,6 -788,7 +820,7 @@@
                  will be returned as a float.
  
          """
+         pyoArgsAssert(self, "B", all)
          if not all:
              return self._base_objs[0]._getStream().getValue()
          else:
@@@ -673,9 -811,15 +843,15 @@@
                  Delay, in seconds, before the object's activation. Defaults to 0.
  
          """
+         pyoArgsAssert(self, "nn", dur, delay)
          dur, delay, lmax = convertArgsToLists(dur, delay)
          if hasattr(self, "_trig_objs"):
-             self._trig_objs.play(dur, delay)
+             if type(self._trig_objs) == ListType:
+                 for i in range(lmax):
+                     for obj in self._trig_objs:
+                         obj.play(wrap(dur,i), wrap(delay,i))
+             else:
+                 self._trig_objs.play(dur, delay)
          if hasattr(self, "_base_players"):
              [obj.play(wrap(dur,i), wrap(delay,i)) for i, obj in enumerate(self._base_players)]
          [obj.play(wrap(dur,i), wrap(delay,i)) for i, obj in enumerate(self._base_objs)]
@@@ -712,9 -856,15 +888,15 @@@
          assigned to successive streams.
  
          """
+         pyoArgsAssert(self, "iInn", chnl, inc, dur, delay)
          dur, delay, lmax = convertArgsToLists(dur, delay)
          if hasattr(self, "_trig_objs"):
-             self._trig_objs.play(dur, delay)
+             if type(self._trig_objs) == ListType:
+                 for i in range(lmax):
+                     for obj in self._trig_objs:
+                         obj.play(wrap(dur,i), wrap(delay,i))
+             else:
+                 self._trig_objs.play(dur, delay)
          if hasattr(self, "_base_players"):
              [obj.play(wrap(dur,i), wrap(delay,i)) for i, obj in enumerate(self._base_players)]
          if type(chnl) == ListType:
@@@ -735,7 -885,10 +917,10 @@@
  
          """
          if hasattr(self, "_trig_objs"):
-             self._trig_objs.stop()
+             if type(self._trig_objs) == ListType:
+                 [obj.stop() for obj in self._trig_objs]
+             else:
+                 self._trig_objs.stop()
          if hasattr(self, "_base_players"):
              [obj.stop() for obj in self._base_players]
          [obj.stop() for obj in self._base_objs]
@@@ -778,6 -931,7 +963,7 @@@
                  Maximum value of the output signal.
  
          """
+         pyoArgsAssert(self, "nn", min, max)
          min, max, lmax = convertArgsToLists(min, max)
          if lmax > 1:
              mul = [(wrap(max,i) - wrap(min,i)) * 0.5 for i in range(lmax)]
@@@ -799,6 -953,7 +985,7 @@@
                  New `mul` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._mul = x
          x, lmax = convertArgsToLists(x)
          [obj.setMul(wrap(x,i/self._op_duplicate)) for i, obj in enumerate(self._base_objs)]
@@@ -813,6 -968,7 +1000,7 @@@
                  New `add` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._add = x
          x, lmax = convertArgsToLists(x)
          [obj.setAdd(wrap(x,i/self._op_duplicate)) for i, obj in enumerate(self._base_objs)]
@@@ -827,6 -983,7 +1015,7 @@@
                  New inversed `add` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._add = x
          x, lmax = convertArgsToLists(x)
          [obj.setSub(wrap(x,i/self._op_duplicate)) for i, obj in enumerate(self._base_objs)]
@@@ -841,6 -998,7 +1030,7 @@@
                  New inversed `mul` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._mul = x
          x, lmax = convertArgsToLists(x)
          [obj.setDiv(wrap(x,i/self._op_duplicate)) for i, obj in enumerate(self._base_objs)]
@@@ -863,6 -1021,7 +1053,7 @@@
                  Time, in seconds, to reach the new value.
  
          """
+         pyoArgsAssert(self, "Snn", attr, value, port)
          self._target_dict[attr] = value
          init = getattr(self, attr)
          if self._signal_dict.has_key(attr):
@@@ -987,6 -1146,7 +1178,7 @@@ class PyoTableObject(PyoObjectBase)
                      6. A-Law encoded
  
          """
+         pyoArgsAssert(self, "SII", path, format, sampletype)
          ext = path.rsplit('.')
          if len(ext) >= 2:
              ext = ext[-1].lower()
@@@ -1012,6 -1172,7 +1204,7 @@@
                  per line.
  
          """
+         pyoArgsAssert(self, "SB", path, oneline)
          f = open(path, "w")
          if oneline:
              f.write(str([obj.getTable() for obj in self._base_objs]))
@@@ -1047,6 -1208,7 +1240,7 @@@
          length of the lists.
  
          """
+         pyoArgsAssert(self, "S", path)
          f = open(path, "r")
          f_list = eval(f.read())
          f_len = len(f_list)
@@@ -1066,6 -1228,7 +1260,7 @@@
                  New table size in samples.
  
          """
+         pyoArgsAssert(self, "I", size)
          self._size = size
          [obj.setSize(size) for obj in self._base_objs]
          self.refreshView()
@@@ -1082,6 -1245,7 +1277,7 @@@
                  first size as an int. Defaults to False.
  
          """
+         pyoArgsAssert(self, "B", all)
          if all:
              return [obj.getSize() for obj in self._base_objs]
          else:
@@@ -1106,6 -1270,7 +1302,7 @@@
                  Position, in samples, where to record value. Defaults to 0.
  
          """
+         pyoArgsAssert(self, "NI", value, pos)
          [obj.put(value, pos) for obj in self._base_objs]
          self.refreshView()
  
@@@ -1123,6 -1288,7 +1320,7 @@@
                  Position, in samples, where to read the value. Defaults to 0.
  
          """
+         pyoArgsAssert(self, "I", pos)
          values = [obj.get(pos) for obj in self._base_objs]
          if len(values) == 1: return values[0]
          else: return values
@@@ -1141,6 -1307,7 +1339,7 @@@
                  subtable (or the only one) is returned.
  
          """
+         pyoArgsAssert(self, "B", all)
          if all:
              return [obj.getTable() for obj in self._base_objs]
          else:
@@@ -1210,6 -1377,7 +1409,7 @@@
                  Exponent factor. Defaults to 10.
  
          """
+         pyoArgsAssert(self, "N", exp)
          [obj.pow(exp) for obj in self._base_objs]
          self.refreshView()
          return self
@@@ -1226,6 -1394,7 +1426,7 @@@
                  Gain factor for negative samples. Defaults to 1.
  
          """
+         pyoArgsAssert(self, "NN", gpos, gneg)
          [obj.bipolarGain(gpos, gneg) for obj in self._base_objs]
          self.refreshView()
          return self
@@@ -1240,6 -1409,7 +1441,7 @@@
                  Filter's cutoff, in Hertz. Defaults to 1000.
  
          """
+         pyoArgsAssert(self, "N", freq)
          [obj.lowpass(freq) for obj in self._base_objs]
          self.refreshView()
          return self
@@@ -1254,6 -1424,7 +1456,7 @@@
                  Fade in duration, in seconds. Defaults to 0.1.
  
          """
+         pyoArgsAssert(self, "N", dur)
          [obj.fadein(dur) for obj in self._base_objs]
          self.refreshView()
          return self
@@@ -1268,6 -1439,7 +1471,7 @@@
                  Fade out duration, in seconds. Defaults to 0.1.
  
          """
+         pyoArgsAssert(self, "N", dur)
          [obj.fadeout(dur) for obj in self._base_objs]
          self.refreshView()
          return self
@@@ -1285,6 -1457,7 +1489,10 @@@
                  value(s) to add.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "T", x)
++>>>>>>> upstream/0.7.6
          if type(x) == ListType:
              if type(x[0]) == ListType:
                  [obj.add(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1309,6 -1482,7 +1517,10 @@@
                  value(s) to substract.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "T", x)
++>>>>>>> upstream/0.7.6
          if type(x) == ListType:
              if type(x[0]) == ListType:
                  [obj.sub(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1333,6 -1507,7 +1545,10 @@@
                  value(s) to multiply.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "T", x)
++>>>>>>> upstream/0.7.6
          if type(x) == ListType:
              if type(x[0]) == ListType:
                  [obj.mul(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1381,6 -1556,7 +1597,10 @@@
          the server GUI before showing the controller window.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "SB", title, wxnoserver)
++>>>>>>> upstream/0.7.6
          samples = self._base_objs[0].getViewTable((500,200))
          createViewTableWindow(samples, title, wxnoserver, self.__class__.__name__, self)
  
@@@ -1444,6 -1620,7 +1664,7 @@@ class PyoMatrixObject(PyoObjectBase)
                  Full path of the generated file.
  
          """
+         pyoArgsAssert(self, "S", path)
          f = open(path, "w")
          f.write(str([obj.getData() for obj in self._base_objs]))
          f.close()
@@@ -1469,6 -1646,7 +1690,7 @@@
                  Full path of the file to read.
  
          """
+         pyoArgsAssert(self, "S", path)
          f = open(path, "r")
          f_list = eval(f.read())
          f_len = len(f_list)
@@@ -1511,6 -1689,7 +1733,7 @@@
                  Amount of boost applied on each value. Defaults to 0.01.
  
          """
+         pyoArgsAssert(self, "NNN", min, max, boost)
          [obj.boost(min, max, boost) for obj in self._base_objs]
  
      def put(self, value, x=0, y=0):
@@@ -1531,6 -1710,7 +1754,7 @@@
                  Y position where to record value. Defaults to 0.
  
          """
+         pyoArgsAssert(self, "NII", value, x, y)
          [obj.put(value, x, y) for obj in self._base_objs]
  
      def get(self, x, y):
@@@ -1549,6 -1729,7 +1773,7 @@@
                  Y position where to get value. Defaults to 0.
  
          """
+         pyoArgsAssert(self, "II", x, y)
          values = [obj.get(x, y) for obj in self._base_objs]
          if len(values) == 1: return values[0]
          else: return values
@@@ -1569,6 -1750,7 +1794,10 @@@
          the server GUI before showing the controller window.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "SB", title, wxnoserver)
++>>>>>>> upstream/0.7.6
          samples = self._base_objs[0].getViewData()
          createViewMatrixWindow(samples, self.getSize(), title, wxnoserver, self)
  
@@@ -1619,6 -1801,7 +1848,7 @@@ class PyoPVObject(PyoObjectBase)
                  of the first stream.
  
          """
+         pyoArgsAssert(self, "B", all)
          if all:
              return [obj._getStream().isPlaying() for obj in self._base_objs]
          else:
@@@ -1641,6 -1824,7 +1871,7 @@@
                  Delay, in seconds, before the object's activation. Defaults to 0.
  
          """
+         pyoArgsAssert(self, "nn", dur, delay)
          dur, delay, lmax = convertArgsToLists(dur, delay)
          if hasattr(self, "_trig_objs"):
              self._trig_objs.play(dur, delay)
@@@ -1682,6 -1866,7 +1913,7 @@@
                  Time, in seconds, to reach the new value.
  
          """
+         pyoArgsAssert(self, "Snn", attr, value, port)
          self._target_dict[attr] = value
          init = getattr(self, attr)
          if self._signal_dict.has_key(attr):
@@@ -1771,6 -1956,7 +2003,7 @@@ class Mix(PyoObject)
  
      """
      def __init__(self, input, voices=1, mul=1, add=0):
+         pyoArgsAssert(self, "oIOO", input, voices, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          mul, add, lmax = convertArgsToLists(mul, add)
@@@ -1874,6 -2060,7 +2107,7 @@@ class InputFader(PyoObject)
  
      """
      def __init__(self, input):
+         pyoArgsAssert(self, "o", input)
          PyoObject.__init__(self)
          self._input = input
          input, lmax = convertArgsToLists(input)
@@@ -1891,6 -2078,7 +2125,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          x, lmax = convertArgsToLists(x)
          [obj.setInput(wrap(x,i), fadetime) for i, obj in enumerate(self._base_objs)]
@@@ -1926,6 -2114,7 +2161,7 @@@ class Sig(PyoObject)
  
      """
      def __init__(self, value, mul=1, add=0):
+         pyoArgsAssert(self, "OOO", value, mul, add)
          PyoObject.__init__(self, mul, add)
          self._value = value
          value, mul ,add, lmax = convertArgsToLists(value, mul, add)
@@@ -1941,6 -2130,7 +2177,7 @@@
                  Numerical value to convert.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._value = x
          x, lmax = convertArgsToLists(x)
          [obj.setValue(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1996,6 -2186,7 +2233,7 @@@ class VarPort(PyoObject)
  
      """
      def __init__(self, value, time=0.025, init=0.0, function=None, arg=None, mul=1, add=0):
+         pyoArgsAssert(self, "nnnczOO", value, time, init, function, arg, mul, add)
          PyoObject.__init__(self, mul, add)
          self._value = value
          self._time = time
@@@ -2013,6 -2204,7 +2251,7 @@@
                  Numerical value to convert.
  
          """
+         pyoArgsAssert(self, "n", x)
          self._value = x
          x, lmax = convertArgsToLists(x)
          [obj.setValue(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2027,6 -2219,7 +2266,7 @@@
                  New ramp time.
  
          """
+         pyoArgsAssert(self, "n", x)
          self._time = x
          x, lmax = convertArgsToLists(x)
          [obj.setTime(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2041,6 -2234,7 +2281,10 @@@
                  new `function` attribute.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "c", x)
++>>>>>>> upstream/0.7.6
          self._function = getWeakMethodRef(x)
          x, lmax = convertArgsToLists(x)
          [obj.setFunction(WeakMethod(wrap(x,i))) for i, obj in enumerate(self._base_objs)]
@@@ -2088,6 -2282,7 +2332,7 @@@ class Pow(PyoObject)
  
      """
      def __init__(self, base=10, exponent=1, mul=1, add=0):
+         pyoArgsAssert(self, "OOOO", base, exponent, mul, add)
          PyoObject.__init__(self, mul, add)
          self._base = base
          self._exponent = exponent
@@@ -2104,6 -2299,7 +2349,7 @@@
                  new `base` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._base = x
          x, lmax = convertArgsToLists(x)
          [obj.setBase(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2118,6 -2314,7 +2364,7 @@@
                  new `exponent` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._exponent = x
          x, lmax = convertArgsToLists(x)
          [obj.setExponent(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2172,6 -2369,7 +2419,7 @@@ class Wrap(PyoObject)
  
      """
      def __init__(self, input, min=0.0, max=1.0, mul=1, add=0):
+         pyoArgsAssert(self, "oOOOO", input, min, max, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._min = min
@@@ -2192,6 -2390,7 +2440,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -2205,6 -2404,7 +2454,7 @@@
                  New `min` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._min = x
          x, lmax = convertArgsToLists(x)
          [obj.setMin(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2219,6 -2419,7 +2469,7 @@@
                  New `max` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._max = x
          x, lmax = convertArgsToLists(x)
          [obj.setMax(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2280,13 -2481,10 +2531,14 @@@ class Compare(PyoObject)
  
      """
      def __init__(self, input, comp, mode="<", mul=1, add=0):
+         pyoArgsAssert(self, "oOsOO", input, comp, mode, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
 -        self._comp = comp
 +        if type(comp) in [StringType, UnicodeType, NoneType]:
 +            print 'TypeError: "comp" argument of %s must be a float or a PyoObject. Set to 0.\n' % self.__class__.__name__
 +            comp = self._comp = 0
 +        else:
 +            self._comp = comp
          self._mode = mode
          self._in_fader = InputFader(input)
          self.comp_dict = {"<": 0, "<=": 1, ">": 2, ">=": 3, "==": 4, "!=": 5}
@@@ -2308,6 -2506,7 +2560,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -2321,9 -2520,7 +2574,13 @@@
                  New comparison signal.
  
          """
++<<<<<<< HEAD
 +        if type(x) in [StringType, UnicodeType, NoneType]:
 +            print >> sys.stderr, 'TypeError: "comp" argument of %s must be a float or a PyoObject.\n' % self.__class__.__name__
 +            return
++=======
+         pyoArgsAssert(self, "O", x)
++>>>>>>> upstream/0.7.6
          self._comp = x
          x, lmax = convertArgsToLists(x)
          [obj.setComp(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2340,6 -2537,7 +2597,7 @@@
                  New `mode` attribute.
  
          """
+         pyoArgsAssert(self, "s", x)
          self._mode = x
          x, lmax = convertArgsToLists(x)
          [obj.setMode(self.comp_dict[wrap(x,i)]) for i, obj in enumerate(self._base_objs)]
diff --combined pyolib/_wxwidgets.py
index aeec4fe,137eb23..491b0ee
--- a/pyolib/_wxwidgets.py
+++ b/pyolib/_wxwidgets.py
@@@ -1576,7 -1576,7 +1576,11 @@@ class ScopeDisplay(wx.Frame)
          self.toolBox.Add(self.activeTog, 0, wx.TOP|wx.LEFT|wx.RIGHT, 5)
          self.toolBox.AddSpacer(10)
          self.toolBox.Add(wx.StaticText(self.panel, -1, label="Window length (ms):"), 0, wx.TOP, 11)
++<<<<<<< HEAD
 +        self.lenSlider = ControlSlider(self.panel, 10, 60, length * 1000, outFunction=self.setLength)
++=======
+         self.lenSlider = ControlSlider(self.panel, 10, 1000, length * 1000, log=True, outFunction=self.setLength)
++>>>>>>> upstream/0.7.6
          self.toolBox.Add(self.lenSlider, 1, wx.TOP|wx.LEFT|wx.RIGHT, 11)
          self.toolBox.AddSpacer(40)
          self.mainBox.Add(self.toolBox, 0, wx.EXPAND)
@@@ -1584,9 -1584,9 +1588,15 @@@
          self.box = wx.BoxSizer(wx.VERTICAL)
          self.scopePanel = ScopePanel(self.panel, self.obj)
          self.box.Add(self.scopePanel, 1, wx.EXPAND|wx.LEFT|wx.RIGHT, 5)
++<<<<<<< HEAD
 +        self.dispBox.Add(self.box, 1, wx.EXPAND, 0)
 +        self.gainSlider = ControlSlider(self.panel, -24, 24, 20.0 * math.log10(gain), outFunction=self.setGain, orient=wx.VERTICAL)
 +        self.dispBox.Add(self.gainSlider, 0, wx.EXPAND)
++=======
+         self.dispBox.Add(self.box, 1, wx.EXPAND|wx.BOTTOM, 5)
+         self.gainSlider = ControlSlider(self.panel, -24, 24, 20.0 * math.log10(gain), outFunction=self.setGain, orient=wx.VERTICAL)
+         self.dispBox.Add(self.gainSlider, 0, wx.EXPAND|wx.BOTTOM, 5)
++>>>>>>> upstream/0.7.6
          self.dispBox.AddSpacer(5)
          self.mainBox.Add(self.dispBox, 1, wx.EXPAND)
          self.panel.SetSizer(self.mainBox)
@@@ -1641,7 -1641,6 +1651,10 @@@ class ScopePanel(wx.Panel)
  
      def setGain(self, gain):
          self.gain = gain
++<<<<<<< HEAD
 +        print self.gain
++=======
++>>>>>>> upstream/0.7.6
  
      def setLength(self, length):
          self.length = length
diff --combined pyolib/analysis.py
index a71fc86,81f1db6..bb2b93b
--- a/pyolib/analysis.py
+++ b/pyolib/analysis.py
@@@ -60,6 -60,7 +60,7 @@@ class Follower(PyoObject)
  
      """
      def __init__(self, input, freq=20, mul=1, add=0):
+         pyoArgsAssert(self, "oOOO", input, freq, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._freq = freq
@@@ -79,6 -80,7 +80,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -92,6 -94,7 +94,7 @@@
                  New `freq` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._freq = x
          x, lmax = convertArgsToLists(x)
          [obj.setFreq(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -147,6 -150,7 +150,7 @@@ class Follower2(PyoObject)
  
      """
      def __init__(self, input, risetime=0.01, falltime=0.1, mul=1, add=0):
+         pyoArgsAssert(self, "oOOOO", input, risetime, falltime, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._risetime = risetime
@@@ -167,6 -171,7 +171,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -180,6 -185,7 +185,7 @@@
                  New `risetime` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._risetime = x
          x, lmax = convertArgsToLists(x)
          [obj.setRisetime(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -194,6 -200,7 +200,7 @@@
                  New `falltime` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._falltime = x
          x, lmax = convertArgsToLists(x)
          [obj.setFalltime(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -256,6 -263,7 +263,7 @@@ class ZCross(PyoObject)
  
      """
      def __init__(self, input, thresh=0., mul=1, add=0):
+         pyoArgsAssert(self, "onOO", input, thresh, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._thresh = thresh
@@@ -275,6 -283,7 +283,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -288,6 -297,7 +297,7 @@@
                  New amplitude difference threshold.
  
          """
+         pyoArgsAssert(self, "n", x)
          self._thresh = x
          x, lmax = convertArgsToLists(x)
          [obj.setThresh(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -363,6 -373,7 +373,7 @@@ class Yin(PyoObject)
  
      """
      def __init__(self, input, tolerance=0.2, minfreq=40, maxfreq=1000, cutoff=1000, winsize=1024, mul=1, add=0):
+         pyoArgsAssert(self, "onnnniOO", input, tolerance, minfreq, maxfreq, cutoff, winsize, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._tolerance = tolerance
@@@ -385,6 -396,7 +396,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -398,6 -410,7 +410,7 @@@
                  New parameter for minima selection, between 0 and 1.
  
          """
+         pyoArgsAssert(self, "n", x)
          self._tolerance = x
          x, lmax = convertArgsToLists(x)
          [obj.setTolerance(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -412,6 -425,7 +425,7 @@@
                  New minimum frequency detected.
  
          """
+         pyoArgsAssert(self, "n", x)
          self._minfreq = x
          x, lmax = convertArgsToLists(x)
          [obj.setMinfreq(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -426,6 -440,7 +440,7 @@@
                  New maximum frequency detected.
  
          """
+         pyoArgsAssert(self, "n", x)
          self._maxfreq = x
          x, lmax = convertArgsToLists(x)
          [obj.setMaxfreq(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -440,6 -455,7 +455,7 @@@
                  New input lowpass filter cutoff frequency.
  
          """
+         pyoArgsAssert(self, "n", x)
          self._cutoff = x
          x, lmax = convertArgsToLists(x)
          [obj.setCutoff(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -526,6 -542,7 +542,10 @@@ class Centroid(PyoObject)
  
      """
      def __init__(self, input, size=1024, mul=1, add=0):
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "oiOO", input, size, mul, add)
++>>>>>>> upstream/0.7.6
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._size = size
@@@ -545,6 -562,7 +565,10 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "oN", x, fadetime)
++>>>>>>> upstream/0.7.6
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -566,7 -584,7 +590,11 @@@ class AttackDetector(PyoObject)
      """
      Audio signal onset detection.
  
++<<<<<<< HEAD
 +    AttackDetector anaylises an audio signal in input an output a trigger each
++=======
+     AttackDetector analyses an audio signal in input and output a trigger each
++>>>>>>> upstream/0.7.6
      time an onset is detected. An onset is a sharp amplitude rising while the
      signal had previously fall below a minimum threshold. Parameters must be
      carefully tuned depending on the nature of the analysed signal and the level
@@@ -605,6 -623,7 +633,10 @@@
  
      """
      def __init__(self, input, deltime=0.005, cutoff=10, maxthresh=3, minthresh=-30, reltime=0.1, mul=1, add=0):
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "onnnnnOO", input, deltime, cutoff, maxthresh, minthresh, reltime, mul, add)
++>>>>>>> upstream/0.7.6
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._deltime = deltime
@@@ -628,6 -647,7 +660,10 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "oN", x, fadetime)
++>>>>>>> upstream/0.7.6
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -641,6 -661,7 +677,10 @@@
                  New delay between rms analysis.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "n", x)
++>>>>>>> upstream/0.7.6
          self._deltime = x
          x, lmax = convertArgsToLists(x)
          [obj.setDeltime(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -655,6 -676,7 +695,10 @@@
                  New cutoff for the follower lowpass filter.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "n", x)
++>>>>>>> upstream/0.7.6
          self._cutoff = x
          x, lmax = convertArgsToLists(x)
          [obj.setCutoff(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -669,6 -691,7 +713,10 @@@
                  New attack threshold in dB.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "n", x)
++>>>>>>> upstream/0.7.6
          self._maxthresh = x
          x, lmax = convertArgsToLists(x)
          [obj.setMaxthresh(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -683,6 -706,7 +731,10 @@@
                  New minimum threshold in dB.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "n", x)
++>>>>>>> upstream/0.7.6
          self._minthresh = x
          x, lmax = convertArgsToLists(x)
          [obj.setMinthresh(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -697,6 -721,7 +749,10 @@@
                  Time, in seconds, to wait before reporting a new attack.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "n", x)
++>>>>>>> upstream/0.7.6
          self._reltime = x
          x, lmax = convertArgsToLists(x)
          [obj.setReltime(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -803,6 -828,7 +859,10 @@@ class Spectrum(PyoObject)
  
      """
      def __init__(self, input, size=1024, wintype=2, function=None):
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "oiiC", input, size, wintype, function)
++>>>>>>> upstream/0.7.6
          PyoObject.__init__(self)
          self.points = None
          self.viewFrame = None
@@@ -836,6 -862,7 +896,10 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "oN", x, fadetime)
++>>>>>>> upstream/0.7.6
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -849,6 -876,7 +913,10 @@@
                  new `size` attribute.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "i", x)
++>>>>>>> upstream/0.7.6
          self._size = x
          x, lmax = convertArgsToLists(x)
          [obj.setSize(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -863,6 -891,7 +931,10 @@@
                  new `wintype` attribute.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "i", x)
++>>>>>>> upstream/0.7.6
          self._wintype = x
          x, lmax = convertArgsToLists(x)
          [obj.setWinType(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -879,6 -908,7 +951,10 @@@
                  and will receive the data as a list of lists (one list per channel).
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "C", function)
++>>>>>>> upstream/0.7.6
          self._function = getWeakMethodRef(function)
  
      def poll(self, active):
@@@ -892,6 -922,7 +968,10 @@@
                  defaults to True.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "B", active)
++>>>>>>> upstream/0.7.6
          if active:
              self._timer.play()
          else:
@@@ -908,6 -939,7 +988,10 @@@
                  retrieve the current analysis frame. defaults to 0.05.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "N", time)
++>>>>>>> upstream/0.7.6
          self._timer.time = time
  
      def setLowbound(self, x):
@@@ -922,6 -954,7 +1006,10 @@@
                  new `lowbound` attribute.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "n", x)
++>>>>>>> upstream/0.7.6
          self._lowbound = x
          x, lmax = convertArgsToLists(x)
          tmp = [obj.setLowbound(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -939,6 -972,7 +1027,10 @@@
                  new `highbound` attribute.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "n", x)
++>>>>>>> upstream/0.7.6
          self._highbound = x
          x, lmax = convertArgsToLists(x)
          tmp = [obj.setHighbound(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -971,6 -1005,7 +1063,10 @@@
                  new `width` attribute.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "i", x)
++>>>>>>> upstream/0.7.6
          self._width = x
          x, lmax = convertArgsToLists(x)
          [obj.setWidth(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -987,6 -1022,7 +1083,10 @@@
                  new `height` attribute.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "i", x)
++>>>>>>> upstream/0.7.6
          self._height = x
          x, lmax = convertArgsToLists(x)
          [obj.setHeight(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1002,6 -1038,7 +1102,10 @@@
                  it back to linear. Defaults to False.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "b", x)
++>>>>>>> upstream/0.7.6
          self._fscaling = x
          x, lmax = convertArgsToLists(x)
          [obj.setFscaling(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1019,6 -1056,7 +1123,10 @@@
                  False turns it back to linear. Defaults to True.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "b", x)
++>>>>>>> upstream/0.7.6
          self._mscaling = x
          x, lmax = convertArgsToLists(x)
          [obj.setMscaling(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1053,6 -1091,7 +1161,10 @@@
                  new `gain` attribute, as linear values.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "n", x)
++>>>>>>> upstream/0.7.6
          self._gain = x
          x, lmax = convertArgsToLists(x)
          [obj.setGain(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1073,6 -1112,7 +1185,10 @@@
          the server GUI before showing the controller window.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "SB", title, wxnoserver)
++>>>>>>> upstream/0.7.6
          createSpectrumWindow(self, title, wxnoserver)
  
      def _setViewFrame(self, frame):
@@@ -1196,6 -1236,7 +1312,10 @@@ class Scope(PyoObject)
  
      """
      def __init__(self, input, length=0.05, gain=0.67):
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "oNN", input, length, gain)
++>>>>>>> upstream/0.7.6
          PyoObject.__init__(self)
          self.points = None
          self.viewFrame = None
@@@ -1222,6 -1263,7 +1342,10 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "oN", x, fadetime)
++>>>>>>> upstream/0.7.6
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -1235,6 -1277,7 +1359,10 @@@
                  new `length` attribute.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "N", x)
++>>>>>>> upstream/0.7.6
          self._length = x
          self._timer.time = x
          [obj.setLength(x) for obj in self._base_objs]
@@@ -1249,6 -1292,7 +1377,10 @@@
                  new `gain` attribute, as linear values.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "n", x)
++>>>>>>> upstream/0.7.6
          self._gain = x
          x, lmax = convertArgsToLists(x)
          [obj.setGain(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1264,6 -1308,7 +1396,10 @@@
                  defaults to True.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "B", active)
++>>>>>>> upstream/0.7.6
          if active:
              self._timer.play()
          else:
@@@ -1283,6 -1328,7 +1419,10 @@@
                  width is 500.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "I", x)
++>>>>>>> upstream/0.7.6
          self._width = x
          [obj.setWidth(x) for obj in self._base_objs]
  
@@@ -1300,6 -1346,7 +1440,10 @@@
                  height is 400.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "I", x)
++>>>>>>> upstream/0.7.6
          self._height = x
          [obj.setHeight(x) for obj in self._base_objs]
  
@@@ -1319,6 -1366,7 +1463,10 @@@
          the server GUI before showing the controller window.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "SB", title, wxnoserver)
++>>>>>>> upstream/0.7.6
          createScopeWindow(self, title, wxnoserver)
  
      def _setViewFrame(self, frame):
@@@ -1393,6 -1441,7 +1541,10 @@@ class PeakAmp(PyoObject)
  
      """
      def __init__(self, input, function=None, mul=1, add=0):
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "oCOO", input, function, mul, add)
++>>>>>>> upstream/0.7.6
          PyoObject.__init__(self, mul, add)
          self._input = input
          if callable(function):
@@@ -1404,7 -1453,7 +1556,11 @@@
          self._base_objs = [PeakAmp_base(wrap(in_fader,i), wrap(mul,i), wrap(add,i)) for i in range(lmax)]
          sr = self.getSamplingRate()
          bs = self.getBufferSize()
++<<<<<<< HEAD
 +        self._timer = Pattern(self._buildList, bs/sr).play()
++=======
+         self._timer = Pattern(self._buildList, 0.06).play()
++>>>>>>> upstream/0.7.6
  
      def setInput(self, x, fadetime=0.05):
          """
@@@ -1418,6 -1467,7 +1574,10 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "oN", x, fadetime)
++>>>>>>> upstream/0.7.6
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -1431,9 -1481,23 +1591,29 @@@
                  New function to call with amplitude values in arguments.
  
          """
++<<<<<<< HEAD
 +        if callable(x):
 +            self._function = getWeakMethodRef(x)
 +
++=======
+         pyoArgsAssert(self, "C", x)
+         if callable(x):
+             self._function = getWeakMethodRef(x)
+ 
+     def polltime(self, x):
+         """
+         Sets the delay, in seconds, between each call of the function.
+ 
+         :Args:
+ 
+             x : float
+                 New polling time in seconds.
+ 
+         """
+         pyoArgsAssert(self, "N", x)
+         self._timer.time = x
+ 
++>>>>>>> upstream/0.7.6
      def out(self, chnl=0, inc=1, dur=0, delay=0):
          return self.play(dur, delay)
  
diff --combined pyolib/arithmetic.py
index 3c12942,f1a476b..3895dda
--- a/pyolib/arithmetic.py
+++ b/pyolib/arithmetic.py
@@@ -47,6 -47,7 +47,7 @@@ class Sin(PyoObject)
      """
  
      def __init__(self, input, mul=1, add=0):
+         pyoArgsAssert(self, "oOO", input, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._in_fader = InputFader(input)
@@@ -65,6 -66,7 +66,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -96,6 -98,7 +98,7 @@@ class Cos(PyoObject)
  
      """
      def __init__(self, input, mul=1, add=0):
+         pyoArgsAssert(self, "oOO", input, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._in_fader = InputFader(input)
@@@ -114,6 -117,7 +117,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -152,6 -156,7 +156,7 @@@ class Tan(PyoObject)
  
      """
      def __init__(self, input, mul=1, add=0):
+         pyoArgsAssert(self, "oOO", input, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._in_fader = InputFader(input)
@@@ -170,6 -175,7 +175,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -203,6 -209,7 +209,7 @@@ class Abs(PyoObject)
      """
  
      def __init__(self, input, mul=1, add=0):
+         pyoArgsAssert(self, "oOO", input, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._in_fader = InputFader(input)
@@@ -221,6 -228,7 +228,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -259,6 -267,7 +267,7 @@@ class Sqrt(PyoObject)
      """
  
      def __init__(self, input, mul=1, add=0):
+         pyoArgsAssert(self, "oOO", input, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._in_fader = InputFader(input)
@@@ -277,6 -286,7 +286,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -311,6 -321,7 +321,7 @@@ class Log(PyoObject)
      """
  
      def __init__(self, input, mul=1, add=0):
+         pyoArgsAssert(self, "oOO", input, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._in_fader = InputFader(input)
@@@ -329,6 -340,7 +340,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -363,6 -375,7 +375,7 @@@ class Log2(PyoObject)
      """
  
      def __init__(self, input, mul=1, add=0):
+         pyoArgsAssert(self, "oOO", input, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._in_fader = InputFader(input)
@@@ -381,6 -394,7 +394,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -415,6 -429,7 +429,7 @@@ class Log10(PyoObject)
      """
  
      def __init__(self, input, mul=1, add=0):
+         pyoArgsAssert(self, "oOO", input, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._in_fader = InputFader(input)
@@@ -433,6 -448,7 +448,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -470,6 -486,7 +486,7 @@@ class Atan2(PyoObject)
  
      """
      def __init__(self, b=1, a=1, mul=1, add=0):
+         pyoArgsAssert(self, "OOOO", b, a, mul, add)
          PyoObject.__init__(self, mul, add)
          self._b = b
          self._a = a
@@@ -486,6 -503,7 +503,7 @@@
                  new `b` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._b = x
          x, lmax = convertArgsToLists(x)
          [obj.setB(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -500,6 -518,7 +518,7 @@@
                  new `a` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._a = x
          x, lmax = convertArgsToLists(x)
          [obj.setA(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -542,6 -561,7 +561,7 @@@ class Floor(PyoObject)
      """
  
      def __init__(self, input, mul=1, add=0):
+         pyoArgsAssert(self, "oOO", input, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._in_fader = InputFader(input)
@@@ -560,6 -580,7 +580,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -594,6 -615,7 +615,7 @@@ class Ceil(PyoObject)
      """
  
      def __init__(self, input, mul=1, add=0):
+         pyoArgsAssert(self, "oOO", input, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._in_fader = InputFader(input)
@@@ -612,6 -634,7 +634,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -646,6 -669,7 +669,7 @@@ class Round(PyoObject)
      """
  
      def __init__(self, input, mul=1, add=0):
+         pyoArgsAssert(self, "oOO", input, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._in_fader = InputFader(input)
@@@ -664,6 -688,7 +688,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -696,6 -721,7 +721,10 @@@ class Tanh(PyoObject)
      """
  
      def __init__(self, input, mul=1, add=0):
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "oOO", input, mul, add)
++>>>>>>> upstream/0.7.6
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._in_fader = InputFader(input)
@@@ -714,6 -740,7 +743,10 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "oN", x, fadetime)
++>>>>>>> upstream/0.7.6
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
diff --combined pyolib/dynamics.py
index dbe2ca2,5867977..2fa10a6
--- a/pyolib/dynamics.py
+++ b/pyolib/dynamics.py
@@@ -49,6 -49,7 +49,7 @@@ class Clip(PyoObject)
  
      """
      def __init__(self, input, min=-1.0, max=1.0, mul=1, add=0):
+         pyoArgsAssert(self, "oOOOO", input, min, max, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._min = min
@@@ -69,6 -70,7 +70,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -82,6 -84,7 +84,7 @@@
                  New `min` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._min = x
          x, lmax = convertArgsToLists(x)
          [obj.setMin(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -96,6 -99,7 +99,7 @@@
                  New `max` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._max = x
          x, lmax = convertArgsToLists(x)
          [obj.setMax(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -159,6 -163,7 +163,7 @@@ class Mirror(PyoObject)
  
      """
      def __init__(self, input, min=0.0, max=1.0, mul=1, add=0):
+         pyoArgsAssert(self, "oOOOO", input, min, max, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._min = min
@@@ -179,6 -184,7 +184,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -192,6 -198,7 +198,7 @@@
                  New `min` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._min = x
          x, lmax = convertArgsToLists(x)
          [obj.setMin(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -206,6 -213,7 +213,7 @@@
                  New `max` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._max = x
          x, lmax = convertArgsToLists(x)
          [obj.setMax(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -267,6 -275,7 +275,7 @@@ class Degrade(PyoObject)
  
      """
      def __init__(self, input, bitdepth=16, srscale=1.0, mul=1, add=0):
+         pyoArgsAssert(self, "oOOOO", input, bitdepth, srscale, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._bitdepth = bitdepth
@@@ -287,6 -296,7 +296,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -300,6 -310,7 +310,7 @@@
                  New `bitdepth` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._bitdepth = x
          x, lmax = convertArgsToLists(x)
          [obj.setBitdepth(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -314,6 -325,7 +325,7 @@@
                  New `srscale` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._srscale = x
          x, lmax = convertArgsToLists(x)
          [obj.setSrscale(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -395,6 -407,7 +407,7 @@@ class Compress(PyoObject)
  
      """
      def __init__(self, input, thresh=-20, ratio=2, risetime=0.01, falltime=0.1, lookahead=5.0, knee=0, outputAmp=False, mul=1, add=0):
+         pyoArgsAssert(self, "oOOOOnnbOO", input, thresh, ratio, risetime, falltime, lookahead, knee, outputAmp, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._thresh = thresh
@@@ -419,6 -432,7 +432,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -432,6 -446,7 +446,7 @@@
                  New `thresh` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._thresh = x
          x, lmax = convertArgsToLists(x)
          [obj.setThresh(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -446,6 -461,7 +461,7 @@@
                  New `ratio` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._ratio = x
          x, lmax = convertArgsToLists(x)
          [obj.setRatio(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -460,6 -476,7 +476,7 @@@
                  New `risetime` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._risetime = x
          x, lmax = convertArgsToLists(x)
          [obj.setRiseTime(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -474,6 -491,7 +491,7 @@@
                  New `falltime` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._falltime = x
          x, lmax = convertArgsToLists(x)
          [obj.setFallTime(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -488,6 -506,7 +506,7 @@@
                  New `lookahead` attribute.
  
          """
+         pyoArgsAssert(self, "n", x)
          self._lookahead = x
          x, lmax = convertArgsToLists(x)
          [obj.setLookAhead(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -502,6 -521,7 +521,7 @@@
                  New `knee` attribute.
  
          """
+         pyoArgsAssert(self, "n", x)
          self._knee = x
          x, lmax = convertArgsToLists(x)
          [obj.setKnee(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -607,6 -627,7 +627,7 @@@ class Gate(PyoObject)
  
      """
      def __init__(self, input, thresh=-70, risetime=0.01, falltime=0.05, lookahead=5.0, outputAmp=False, mul=1, add=0):
+         pyoArgsAssert(self, "oOOOnbOO", input, thresh, risetime, falltime, lookahead, outputAmp, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._thresh = thresh
@@@ -629,6 -650,7 +650,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -642,6 -664,7 +664,7 @@@
                  New `thresh` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._thresh = x
          x, lmax = convertArgsToLists(x)
          [obj.setThresh(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -656,6 -679,7 +679,7 @@@
                  New `risetime` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._risetime = x
          x, lmax = convertArgsToLists(x)
          [obj.setRiseTime(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -670,6 -694,7 +694,7 @@@
                  New `falltime` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._falltime = x
          x, lmax = convertArgsToLists(x)
          [obj.setFallTime(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -684,6 -709,7 +709,7 @@@
                  New `lookahead` attribute.
  
          """
+         pyoArgsAssert(self, "n", x)
          self._lookahead = x
          x, lmax = convertArgsToLists(x)
          [obj.setLookAhead(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -756,6 -782,7 +782,7 @@@ class Balance(PyoObject)
  
      """
      def __init__(self, input, input2, freq=10, mul=1, add=0):
+         pyoArgsAssert(self, "ooOOO", input, input2, freq, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._input2 = input2
@@@ -779,6 -806,7 +806,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -796,6 -824,7 +824,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input2 = x
          self._in_fader2.setInput(x, fadetime)
  
@@@ -811,6 -840,7 +840,7 @@@
                  New `freq` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._freq = x
          x, lmax = convertArgsToLists(x)
          [obj.setFreq(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -863,6 -893,7 +893,7 @@@ class Min(PyoObject)
  
      """
      def __init__(self, input, comp=0.5, mul=1, add=0):
+         pyoArgsAssert(self, "oOOO", input, comp, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._comp = comp
@@@ -882,6 -913,7 +913,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -895,6 -927,7 +927,7 @@@
                  New `comp` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._comp = x
          x, lmax = convertArgsToLists(x)
          [obj.setComp(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -940,6 -973,7 +973,7 @@@ class Max(PyoObject)
  
      """
      def __init__(self, input, comp=0.5, mul=1, add=0):
+         pyoArgsAssert(self, "oOOO", input, comp, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._comp = comp
@@@ -959,6 -993,7 +993,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -972,6 -1007,7 +1007,7 @@@
                  New `comp` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._comp = x
          x, lmax = convertArgsToLists(x)
          [obj.setComp(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -992,4 -1028,4 +1028,4 @@@
          """float or PyoObject. Comparison value."""
          return self._comp
      @comp.setter
 -    def comp(self, x): self.setComp(x)
 +    def comp(self, x): self.setComp(x)
diff --combined pyolib/effects.py
index aa6ca12,0e4e915..1a6ba56
--- a/pyolib/effects.py
+++ b/pyolib/effects.py
@@@ -55,6 -55,7 +55,7 @@@ class Disto(PyoObject)
  
      """
      def __init__(self, input, drive=.75, slope=.5, mul=1, add=0):
+         pyoArgsAssert(self, "oOOOO", input, drive, slope, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._drive = drive
@@@ -75,6 -76,7 +76,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -88,6 -90,7 +90,7 @@@
                  New `drive` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._drive = x
          x, lmax = convertArgsToLists(x)
          [obj.setDrive(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -102,6 -105,7 +105,7 @@@
                  New `slope` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._slope = x
          x, lmax = convertArgsToLists(x)
          [obj.setSlope(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -170,6 -174,7 +174,7 @@@ class Delay(PyoObject)
  
      """
      def __init__(self, input, delay=0.25, feedback=0, maxdelay=1, mul=1, add=0):
+         pyoArgsAssert(self, "oOOnOO", input, delay, feedback, maxdelay, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._delay = delay
@@@ -191,6 -196,7 +196,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -204,6 -210,7 +210,7 @@@
                  New `delay` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._delay = x
          x, lmax = convertArgsToLists(x)
          [obj.setDelay(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -218,6 -225,7 +225,7 @@@
                  New `feedback` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._feedback = x
          x, lmax = convertArgsToLists(x)
          [obj.setFeedback(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -285,6 -293,7 +293,7 @@@ class SDelay(PyoObject)
  
      """
      def __init__(self, input, delay=0.25, maxdelay=1, mul=1, add=0):
+         pyoArgsAssert(self, "oOnOO", input, delay, maxdelay, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._delay = delay
@@@ -305,6 -314,7 +314,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -318,6 -328,7 +328,7 @@@
                  New `delay` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._delay = x
          x, lmax = convertArgsToLists(x)
          [obj.setDelay(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -379,6 -390,7 +390,7 @@@ class Waveguide(PyoObject)
  
      """
      def __init__(self, input, freq=100, dur=10, minfreq=20, mul=1, add=0):
+         pyoArgsAssert(self, "oOOnOO", input, freq, dur, minfreq, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._freq = freq
@@@ -399,6 -411,7 +411,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -412,6 -425,7 +425,7 @@@
                  New `freq` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._freq = x
          x, lmax = convertArgsToLists(x)
          [obj.setFreq(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -426,6 -440,7 +440,7 @@@
                  New `dur` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._dur = x
          x, lmax = convertArgsToLists(x)
          [obj.setDur(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -493,6 -508,7 +508,7 @@@ class AllpassWG(PyoObject)
  
      """
      def __init__(self, input, freq=100, feed=0.95, detune=0.5, minfreq=20, mul=1, add=0):
+         pyoArgsAssert(self, "oOOOnOO", input, freq, feed, detune, minfreq, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._freq = freq
@@@ -514,6 -530,7 +530,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -527,6 -544,7 +544,7 @@@
                  New `freq` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._freq = x
          x, lmax = convertArgsToLists(x)
          [obj.setFreq(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -541,6 -559,7 +559,7 @@@
                  New `feed` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._feed = x
          x, lmax = convertArgsToLists(x)
          [obj.setFeed(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -555,6 -574,7 +574,7 @@@
                  New `detune` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._detune = x
          x, lmax = convertArgsToLists(x)
          [obj.setDetune(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -627,6 -647,7 +647,7 @@@ class Freeverb(PyoObject)
  
      """
      def __init__(self, input, size=.5, damp=.5, bal=.5, mul=1, add=0):
+         pyoArgsAssert(self, "oOOOOO", input, size, damp, bal, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._size = size
@@@ -648,6 -669,7 +669,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -661,6 -683,7 +683,7 @@@
                  New `size` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._size = x
          x, lmax = convertArgsToLists(x)
          [obj.setSize(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -675,6 -698,7 +698,7 @@@
                  New `damp` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._damp = x
          x, lmax = convertArgsToLists(x)
          [obj.setDamp(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -689,6 -713,7 +713,7 @@@
                  New `bal` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._bal = x
          x, lmax = convertArgsToLists(x)
          [obj.setMix(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -772,6 -797,7 +797,7 @@@ class Convolve(PyoObject)
  
      """
      def __init__(self, input, table, size, mul=1, add=0):
+         pyoArgsAssert(self, "otiOO", input, table, size, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._table = table
@@@ -792,6 -818,7 +818,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -805,6 -832,7 +832,7 @@@
                  new `table` attribute.
  
          """
+         pyoArgsAssert(self, "t", x)
          self._table = x
          x, lmax = convertArgsToLists(x)
          [obj.setTable(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -825,9 -853,9 +853,13 @@@
  
  class WGVerb(PyoObject):
      """
-     8 delay line mono FDN reverb.
+     8 delay lines mono FDN reverb.
  
++<<<<<<< HEAD
 +    8 delay line FDN reverb, with feedback matrix based upon physical
++=======
+     8 delay lines FDN reverb, with feedback matrix based upon physical
++>>>>>>> upstream/0.7.6
      modeling scattering junction of 8 lossless waveguides of equal
      characteristic impedance.
  
@@@ -857,6 -885,7 +889,7 @@@
  
      """
      def __init__(self, input, feedback=0.5, cutoff=5000, bal=0.5, mul=1, add=0):
+         pyoArgsAssert(self, "oOOOOO", input, feedback, cutoff, bal, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._feedback = feedback
@@@ -878,6 -907,7 +911,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -891,6 -921,7 +925,7 @@@
                  New `feedback` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._feedback = x
          x, lmax = convertArgsToLists(x)
          [obj.setFeedback(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -905,6 -936,7 +940,7 @@@
                  New `cutoff` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._cutoff = x
          x, lmax = convertArgsToLists(x)
          [obj.setCutoff(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -919,6 -951,7 +955,7 @@@
                  New `bal` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._bal = x
          x, lmax = convertArgsToLists(x)
          [obj.setMix(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -987,6 -1020,7 +1024,7 @@@ class Chorus(PyoObject)
  
      """
      def __init__(self, input, depth=1, feedback=0.25, bal=0.5, mul=1, add=0):
+         pyoArgsAssert(self, "oOOOOO", input, depth, feedback, bal, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._depth = depth
@@@ -1008,6 -1042,7 +1046,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -1021,6 -1056,7 +1060,7 @@@
                  New `depth` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._depth = x
          x, lmax = convertArgsToLists(x)
          [obj.setDepth(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1035,6 -1071,7 +1075,7 @@@
                  New `feedback` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._feedback = x
          x, lmax = convertArgsToLists(x)
          [obj.setFeedback(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1049,6 -1086,7 +1090,7 @@@
                  New `bal` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._bal = x
          x, lmax = convertArgsToLists(x)
          [obj.setMix(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1114,6 -1152,7 +1156,7 @@@ class Harmonizer(PyoObject)
  
      """
      def __init__(self, input, transpo=-7.0, feedback=0, winsize=0.1, mul=1, add=0):
+         pyoArgsAssert(self, "oOOnOO", input, transpo, feedback, winsize, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._transpo = transpo
@@@ -1135,6 -1174,7 +1178,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -1148,6 -1188,7 +1192,7 @@@
                  New `transpo` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._transpo = x
          x, lmax = convertArgsToLists(x)
          [obj.setTranspo(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1162,6 -1203,7 +1207,7 @@@
                  New `feedback` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._feedback = x
          x, lmax = convertArgsToLists(x)
          [obj.setFeedback(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1176,6 -1218,7 +1222,7 @@@
                  New `winsize` attribute.
  
          """
+         pyoArgsAssert(self, "n", x)
          self._winsize = x
          x, lmax = convertArgsToLists(x)
          [obj.setWinsize(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1238,6 -1281,7 +1285,7 @@@ class Delay1(PyoObject)
  
      """
      def __init__(self, input, mul=1, add=0):
+         pyoArgsAssert(self, "oOO", input, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._in_fader = InputFader(input)
@@@ -1256,6 -1300,7 +1304,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -1312,6 -1357,7 +1361,7 @@@ class STRev(PyoObject)
  
      """
      def __init__(self, input, inpos=0.5, revtime=1, cutoff=5000, bal=.5, roomSize=1, firstRefGain=-3, mul=1, add=0):
+         pyoArgsAssert(self, "oOOOOnnOO", input, inpos, revtime, cutoff, bal, roomSize, firstRefGain, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._inpos = inpos
@@@ -1337,6 -1383,7 +1387,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -1350,6 -1397,7 +1401,7 @@@
                  New `inpos` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._inpos = x
          x, lmax = convertArgsToLists(x)
          [obj.setInpos(wrap(x,i)) for i, obj in enumerate(self._base_players)]
@@@ -1364,6 -1412,7 +1416,7 @@@
                  New `revtime` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._revtime = x
          x, lmax = convertArgsToLists(x)
          [obj.setRevtime(wrap(x,i)) for i, obj in enumerate(self._base_players)]
@@@ -1378,6 -1427,7 +1431,7 @@@
                  New `cutoff` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._cutoff = x
          x, lmax = convertArgsToLists(x)
          [obj.setCutoff(wrap(x,i)) for i, obj in enumerate(self._base_players)]
@@@ -1392,6 -1442,7 +1446,7 @@@
                  New `bal` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._bal = x
          x, lmax = convertArgsToLists(x)
          [obj.setMix(wrap(x,i)) for i, obj in enumerate(self._base_players)]
@@@ -1406,6 -1457,7 +1461,7 @@@
                  Room size scaler, between 0.25 and 4.0.
  
          """
+         pyoArgsAssert(self, "n", x)
          self._roomSize = x
          x, lmax = convertArgsToLists(x)
          [obj.setRoomSize(wrap(x,i)) for i, obj in enumerate(self._base_players)]
@@@ -1420,6 -1472,7 +1476,7 @@@
                  Gain, in dB, of the first reflexions.
  
          """
+         pyoArgsAssert(self, "n", x)
          self._firstRefGain = x
          x, lmax = convertArgsToLists(x)
          [obj.setFirstRefGain(wrap(x,i)) for i, obj in enumerate(self._base_players)]
@@@ -1527,6 -1580,7 +1584,10 @@@ class SmoothDelay(PyoObject)
  
      """
      def __init__(self, input, delay=0.25, feedback=0, crossfade=0.05, maxdelay=1, mul=1, add=0):
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "oOOnnOO", input, delay, feedback, crossfade, maxdelay, mul, add)
++>>>>>>> upstream/0.7.6
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._delay = delay
@@@ -1549,6 -1603,7 +1610,10 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "oN", x, fadetime)
++>>>>>>> upstream/0.7.6
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -1562,6 -1617,7 +1627,10 @@@
                  New `delay` attribute.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "O", x)
++>>>>>>> upstream/0.7.6
          self._delay = x
          x, lmax = convertArgsToLists(x)
          [obj.setDelay(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1576,6 -1632,7 +1645,10 @@@
                  New `feedback` attribute.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "O", x)
++>>>>>>> upstream/0.7.6
          self._feedback = x
          x, lmax = convertArgsToLists(x)
          [obj.setFeedback(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1590,6 -1647,7 +1663,10 @@@
                  New `crossfade` attribute.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "n", x)
++>>>>>>> upstream/0.7.6
          self._crossfade = x
          x, lmax = convertArgsToLists(x)
          [obj.setCrossfade(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1665,6 -1723,7 +1742,10 @@@ class FreqShift(PyoObject)
  
      """
      def __init__(self, input, shift=100, mul=1, add=0):
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "oOOO", input, shift, mul, add)
++>>>>>>> upstream/0.7.6
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._shift = shift
@@@ -1719,6 -1778,7 +1800,10 @@@
              Crossfade time between old and new input. Defaults to 0.05.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "oN", x, fadetime)
++>>>>>>> upstream/0.7.6
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -1732,6 -1792,7 +1817,10 @@@
              New `shift` attribute.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "O", x)
++>>>>>>> upstream/0.7.6
          self._shift = x
          x, lmax = convertArgsToLists(x)
          [obj.setFreq(wrap(x,i)) for i, obj in enumerate(self._sin_objs)]
diff --combined pyolib/generators.py
index bb15550,db2fa97..aa59fd3
--- a/pyolib/generators.py
+++ b/pyolib/generators.py
@@@ -55,6 -55,7 +55,7 @@@ class Sine(PyoObject)
  
      """
      def __init__(self, freq=1000, phase=0, mul=1, add=0):
+         pyoArgsAssert(self, "OOOO", freq, phase, mul, add)
          PyoObject.__init__(self, mul, add)
          self._freq = freq
          self._phase = phase
@@@ -71,6 -72,7 +72,7 @@@
                  new `freq` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._freq = x
          x, lmax = convertArgsToLists(x)
          [obj.setFreq(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -85,6 -87,7 +87,7 @@@
                  new `phase` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._phase = x
          x, lmax = convertArgsToLists(x)
          [obj.setPhase(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -143,6 -146,7 +146,7 @@@ class SineLoop(PyoObject)
  
      """
      def __init__(self, freq=1000, feedback=0, mul=1, add=0):
+         pyoArgsAssert(self, "OOOO", freq, feedback, mul, add)
          PyoObject.__init__(self, mul, add)
          self._freq = freq
          self._feedback = feedback
@@@ -159,6 -163,7 +163,7 @@@
                  new `freq` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._freq = x
          x, lmax = convertArgsToLists(x)
          [obj.setFreq(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -173,6 -178,7 +178,7 @@@
                  new `feedback` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._feedback = x
          x, lmax = convertArgsToLists(x)
          [obj.setFeedback(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -222,6 -228,7 +228,7 @@@ class Phasor(PyoObject)
  
      """
      def __init__(self, freq=100, phase=0, mul=1, add=0):
+         pyoArgsAssert(self, "OOOO", freq, phase, mul, add)
          PyoObject.__init__(self, mul, add)
          self._freq = freq
          self._phase = phase
@@@ -238,6 -245,7 +245,7 @@@
                  new `freq` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._freq = x
          x, lmax = convertArgsToLists(x)
          [obj.setFreq(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -252,6 -260,7 +260,7 @@@
                  new `phase` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._phase = x
          x, lmax = convertArgsToLists(x)
          [obj.setPhase(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -304,6 -313,7 +313,7 @@@ class Input(PyoObject)
  
      """
      def __init__(self, chnl=0, mul=1, add=0):
+         pyoArgsAssert(self, "iOO", chnl, mul, add)
          PyoObject.__init__(self, mul, add)
          self._chnl = chnl
          chnl, mul, add, lmax = convertArgsToLists(chnl, mul, add)
@@@ -325,6 -335,7 +335,7 @@@ class Noise(PyoObject)
  
      """
      def __init__(self, mul=1, add=0):
+         pyoArgsAssert(self, "OO", mul, add)
          PyoObject.__init__(self, mul, add)
          self._type = 0
          mul, add, lmax = convertArgsToLists(mul, add)
@@@ -341,6 -352,7 +352,7 @@@
                  1 uses a simple linear congruential generator, cheaper than rand().
  
          """
+         pyoArgsAssert(self, "i", x)
          self._type = x
          x, lmax = convertArgsToLists(x)
          [obj.setType(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -374,6 -386,7 +386,7 @@@ class PinkNoise(PyoObject)
  
      """
      def __init__(self, mul=1, add=0):
+         pyoArgsAssert(self, "OO", mul, add)
          PyoObject.__init__(self, mul, add)
          mul, add, lmax = convertArgsToLists(mul, add)
          self._base_objs = [PinkNoise_base(wrap(mul,i), wrap(add,i)) for i in range(lmax)]
@@@ -397,6 -410,7 +410,7 @@@ class BrownNoise(PyoObject)
  
      """
      def __init__(self, mul=1, add=0):
+         pyoArgsAssert(self, "OO", mul, add)
          PyoObject.__init__(self, mul, add)
          mul, add, lmax = convertArgsToLists(mul, add)
          self._base_objs = [BrownNoise_base(wrap(mul,i), wrap(add,i)) for i in range(lmax)]
@@@ -433,6 -447,7 +447,7 @@@ class FM(PyoObject)
  
      """
      def __init__(self, carrier=100, ratio=0.5, index=5, mul=1, add=0):
+         pyoArgsAssert(self, "OOOOO", carrier, ratio, index, mul, add)
          PyoObject.__init__(self, mul, add)
          self._carrier = carrier
          self._ratio = ratio
@@@ -450,6 -465,7 +465,7 @@@
                  new `carrier` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._carrier = x
          x, lmax = convertArgsToLists(x)
          [obj.setCarrier(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -464,6 -480,7 +480,7 @@@
                  new `ratio` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._ratio = x
          x, lmax = convertArgsToLists(x)
          [obj.setRatio(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -478,6 -495,7 +495,7 @@@
                  new `index` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._index = x
          x, lmax = convertArgsToLists(x)
          [obj.setIndex(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -546,6 -564,7 +564,7 @@@ class CrossFM(PyoObject)
  
      """
      def __init__(self, carrier=100, ratio=0.5, ind1=2, ind2=2, mul=1, add=0):
+         pyoArgsAssert(self, "OOOOOO", carrier, ratio, ind1, ind2, mul, add)
          PyoObject.__init__(self, mul, add)
          self._carrier = carrier
          self._ratio = ratio
@@@ -564,6 -583,7 +583,7 @@@
                  new `carrier` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._carrier = x
          x, lmax = convertArgsToLists(x)
          [obj.setCarrier(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -578,6 -598,7 +598,7 @@@
                  new `ratio` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._ratio = x
          x, lmax = convertArgsToLists(x)
          [obj.setRatio(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -592,6 -613,7 +613,7 @@@
                  new `ind1` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._ind1 = x
          x, lmax = convertArgsToLists(x)
          [obj.setInd1(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -606,6 -628,7 +628,7 @@@
                  new `ind2` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._ind2 = x
          x, lmax = convertArgsToLists(x)
          [obj.setInd2(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -670,6 -693,7 +693,7 @@@ class Blit(PyoObject)
  
      """
      def __init__(self, freq=100, harms=40, mul=1, add=0):
+         pyoArgsAssert(self, "OOOO", freq, harms, mul, add)
          PyoObject.__init__(self, mul, add)
          self._freq = freq
          self._harms = harms
@@@ -686,6 -710,7 +710,7 @@@
                  new `freq` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._freq = x
          x, lmax = convertArgsToLists(x)
          [obj.setFreq(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -700,6 -725,7 +725,7 @@@
                  new `harms` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._harms = x
          x, lmax = convertArgsToLists(x)
          [obj.setHarms(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -763,6 -789,7 +789,7 @@@ class Rossler(PyoObject)
  
      """
      def __init__(self, pitch=0.25, chaos=0.5, stereo=False, mul=1, add=0):
+         pyoArgsAssert(self, "OObOO", pitch, chaos, stereo, mul, add)
          PyoObject.__init__(self, mul, add)
          self._pitch = pitch
          self._chaos = chaos
@@@ -785,6 -812,7 +812,7 @@@
                  new `pitch` attribute. {0. -> 1.}
  
          """
+         pyoArgsAssert(self, "O", x)
          self._pitch = x
          x, lmax = convertArgsToLists(x)
          if self._stereo:
@@@ -802,6 -830,7 +830,7 @@@
                  new `chaos` attribute. {0. -> 1.}
  
          """
+         pyoArgsAssert(self, "O", x)
          self._chaos = x
          x, lmax = convertArgsToLists(x)
          if self._stereo:
@@@ -867,6 -896,7 +896,7 @@@ class Lorenz(PyoObject)
  
      """
      def __init__(self, pitch=0.25, chaos=0.5, stereo=False, mul=1, add=0):
+         pyoArgsAssert(self, "OObOO", pitch, chaos, stereo, mul, add)
          PyoObject.__init__(self, mul, add)
          self._pitch = pitch
          self._chaos = chaos
@@@ -889,6 -919,7 +919,7 @@@
                  new `pitch` attribute. {0. -> 1.}
  
          """
+         pyoArgsAssert(self, "O", x)
          self._pitch = x
          x, lmax = convertArgsToLists(x)
          if self._stereo:
@@@ -906,6 -937,7 +937,7 @@@
                  new `chaos` attribute. {0. -> 1.}
  
          """
+         pyoArgsAssert(self, "O", x)
          self._chaos = x
          x, lmax = convertArgsToLists(x)
          if self._stereo:
@@@ -965,6 -997,7 +997,7 @@@ class LFO(PyoObject)
  
      """
      def __init__(self, freq=100, sharp=0.5, type=0, mul=1, add=0):
+         pyoArgsAssert(self, "OOiOO", freq, sharp, type, mul, add)
          PyoObject.__init__(self, mul, add)
          self._freq = freq
          self._sharp = sharp
@@@ -982,6 -1015,7 +1015,7 @@@
                  New `freq` attribute, in cycles per seconds.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._freq = x
          x, lmax = convertArgsToLists(x)
          [obj.setFreq(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -996,6 -1030,7 +1030,7 @@@
                  New `sharp` attribute, in the range 0 -> 1.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._sharp = x
          x, lmax = convertArgsToLists(x)
          [obj.setSharp(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1019,6 -1054,7 +1054,10 @@@
  
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "i", x)
++>>>>>>> upstream/0.7.6
          self._type = x
          x, lmax = convertArgsToLists(x)
          [obj.setType(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1102,6 -1138,7 +1141,7 @@@ class SumOsc(PyoObject)
  
      """
      def __init__(self, freq=100, ratio=0.5, index=0.5, mul=1, add=0):
+         pyoArgsAssert(self, "OOOOO", freq, ratio, index, mul, add)
          PyoObject.__init__(self, mul, add)
          self._freq = freq
          self._ratio = ratio
@@@ -1119,6 -1156,7 +1159,7 @@@
                  new `freq` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._freq = x
          x, lmax = convertArgsToLists(x)
          [obj.setFreq(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1133,6 -1171,7 +1174,7 @@@
                  new `ratio` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._ratio = x
          x, lmax = convertArgsToLists(x)
          [obj.setRatio(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1147,6 -1186,7 +1189,7 @@@
                  new `index` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._index = x
          x, lmax = convertArgsToLists(x)
          [obj.setIndex(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1215,6 -1255,7 +1258,7 @@@ class SuperSaw(PyoObject)
  
      """
      def __init__(self, freq=100, detune=0.5, bal=0.7, mul=1, add=0):
+         pyoArgsAssert(self, "OOOOO", freq, detune, bal, mul, add)
          PyoObject.__init__(self, mul, add)
          self._freq = freq
          self._detune = detune
@@@ -1232,6 -1273,7 +1276,7 @@@
                  new `freq` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._freq = x
          x, lmax = convertArgsToLists(x)
          [obj.setFreq(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1246,6 -1288,7 +1291,7 @@@
                  new `detune` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._detune = x
          x, lmax = convertArgsToLists(x)
          [obj.setDetune(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1260,6 -1303,7 +1306,7 @@@
                  new `bal` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._bal = x
          x, lmax = convertArgsToLists(x)
          [obj.setBal(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1320,6 -1364,7 +1367,7 @@@ class RCOsc(PyoObject)
  
      """
      def __init__(self, freq=100, sharp=0.25, mul=1, add=0):
+         pyoArgsAssert(self, "OOOO", freq, sharp, mul, add)
          PyoObject.__init__(self, mul, add)
          self._freq = freq
          self._sharp = sharp
@@@ -1336,6 -1381,7 +1384,7 @@@
                  new `freq` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._freq = x
          x, lmax = convertArgsToLists(x)
          [obj.setFreq(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1350,6 -1396,7 +1399,7 @@@
                  new `sharp` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._sharp = x
          x, lmax = convertArgsToLists(x)
          [obj.setSharp(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
diff --combined pyolib/midi.py
index dbed36d,588fc88..9b8c0da
--- a/pyolib/midi.py
+++ b/pyolib/midi.py
@@@ -71,6 -71,7 +71,7 @@@ class Midictl(PyoObject)
  
      """
      def __init__(self, ctlnumber, minscale=0, maxscale=1, init=0, channel=0, mul=1, add=0):
+         pyoArgsAssert(self, "innniOO", ctlnumber, minscale, maxscale, init, channel, mul, add)
          PyoObject.__init__(self, mul, add)
          self._ctlnumber = ctlnumber
          self._minscale = minscale
@@@ -92,6 -93,7 +93,7 @@@
                  new `ctlnumber` attribute.
  
          """
+         pyoArgsAssert(self, "i", x)
          self._ctlnumber = x
          x, lmax = convertArgsToLists(x)
          [obj.setCtlNumber(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -102,10 -104,11 +104,11 @@@
  
          :Args:
  
-             x : int
+             x : float
                  new `minscale` attribute.
  
          """
+         pyoArgsAssert(self, "n", x)
          self._minscale = x
          x, lmax = convertArgsToLists(x)
          [obj.setMinScale(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -116,10 -119,11 +119,11 @@@
  
          :Args:
  
-             x : int
+             x : float
                  new `maxscale` attribute.
  
          """
+         pyoArgsAssert(self, "n", x)
          self._maxscale = x
          x, lmax = convertArgsToLists(x)
          [obj.setMaxScale(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -134,6 -138,7 +138,7 @@@
                  new `channel` attribute.
  
          """
+         pyoArgsAssert(self, "i", x)
          self._channel = x
          x, lmax = convertArgsToLists(x)
          [obj.setChannel(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -148,6 -153,7 +153,7 @@@
                  new current value.
  
          """
+         pyoArgsAssert(self, "n", x)
          x, lmax = convertArgsToLists(x)
          [obj.setValue(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
  
@@@ -161,6 -167,7 +167,7 @@@
                  True activates the interpolation, False deactivates it.
  
          """
+         pyoArgsAssert(self, "b", x)
          x, lmax = convertArgsToLists(x)
          [obj.setInterpolation(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
  
@@@ -234,10 -241,8 +241,14 @@@ class CtlScan(PyoObject)
  
      """
      def __init__(self, function, toprint=True):
+         pyoArgsAssert(self, "CB", function, toprint)
          PyoObject.__init__(self)
++<<<<<<< HEAD
 +        if not callable(function):
 +            print >> sys.stderr, 'TypeError: "function" argument of %s must be callable.\n' % self.__class__.__name__
 +            exit()
++=======
++>>>>>>> upstream/0.7.6
          self._function = WeakMethod(function)
          self._toprint = toprint
          self._base_objs = [CtlScan_base(self._function, self._toprint)]
@@@ -274,6 -279,7 +285,10 @@@
                  new `function` attribute.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "C", x)
++>>>>>>> upstream/0.7.6
          self._function = WeakMethod(x)
          [obj.setFunction(self._function) for i, obj in enumerate(self._base_objs)]
  
@@@ -287,6 -293,7 +302,7 @@@
                  new `toprint` attribute.
  
          """
+         pyoArgsAssert(self, "b", x)
          self._toprint = x
          x, lmax = convertArgsToLists(x)
          [obj.setToprint(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -345,10 -352,8 +361,14 @@@ class CtlScan2(PyoObject)
  
      """
      def __init__(self, function, toprint=True):
+         pyoArgsAssert(self, "CB", function, toprint)
          PyoObject.__init__(self)
++<<<<<<< HEAD
 +        if not callable(function):
 +            print >> sys.stderr, 'TypeError: "function" argument of %s must be callable.\n' % self.__class__.__name__
 +            exit()
++=======
++>>>>>>> upstream/0.7.6
          self._function = WeakMethod(function)
          self._toprint = toprint
          self._base_objs = [CtlScan2_base(self._function, self._toprint)]
@@@ -385,6 -390,7 +405,10 @@@
                  new `function` attribute.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "C", x)
++>>>>>>> upstream/0.7.6
          self._function = WeakMethod(x)
          [obj.setFunction(self._function) for i, obj in enumerate(self._base_objs)]
  
@@@ -398,6 -404,7 +422,7 @@@
                  new `toprint` attribute.
  
          """
+         pyoArgsAssert(self, "b", x)
          self._toprint = x
          x, lmax = convertArgsToLists(x)
          [obj.setToprint(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -478,6 -485,7 +503,7 @@@ class Notein(PyoObject)
  
      """
      def __init__(self, poly=10, scale=0, first=0, last=127, channel=0, mul=1, add=0):
+         pyoArgsAssert(self, "IIIIIOO", poly, scale, first, last, channel, mul, add)
          PyoObject.__init__(self, mul, add)
          self._pitch_dummy = []
          self._velocity_dummy = []
@@@ -522,6 -530,7 +548,7 @@@
                  new `channel` attribute.
  
          """
+         pyoArgsAssert(self, "I", x)
          self._channel = x
          self._base_handler.setChannel(x)
  
@@@ -538,6 -547,7 +565,7 @@@
                  new centralkey value.
  
          """
+         pyoArgsAssert(self, "I", x)
          self._base_handler.setCentralKey(x)
  
      def setStealing(self, x):
@@@ -554,6 -564,7 +582,7 @@@
                  True for stealing mode, False for non-stealing.
  
          """
+         pyoArgsAssert(self, "B", x)
          self._base_handler.setStealing(x)
  
      def get(self, identifier="pitch", all=False):
@@@ -642,6 -653,7 +671,7 @@@ class Bendin(PyoObject)
  
      """
      def __init__(self, brange=2, scale=0, channel=0, mul=1, add=0):
+         pyoArgsAssert(self, "niiOO", brange, scale, channel, mul, add)
          PyoObject.__init__(self, mul, add)
          self._brange = brange
          self._scale = scale
@@@ -658,10 -670,11 +688,11 @@@
  
          :Args:
  
-             x : int
+             x : float
                  new `brange` attribute.
  
          """
+         pyoArgsAssert(self, "n", x)
          self._brange = x
          x, lmax = convertArgsToLists(x)
          [obj.setBrange(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -676,6 -689,7 +707,7 @@@
                  new `scale` attribute.
  
          """
+         pyoArgsAssert(self, "i", x)
          self._scale = x
          x, lmax = convertArgsToLists(x)
          [obj.setScale(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -690,6 -704,7 +722,7 @@@
                  new `channel` attribute.
  
          """
+         pyoArgsAssert(self, "i", x)
          self._channel = x
          x, lmax = convertArgsToLists(x)
          [obj.setChannel(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -751,6 -766,7 +784,7 @@@ class Touchin(PyoObject)
  
      """
      def __init__(self, minscale=0, maxscale=1, init=0, channel=0, mul=1, add=0):
+         pyoArgsAssert(self, "nnniOO", minscale, maxscale, init, channel, mul, add)
          PyoObject.__init__(self, mul, add)
          self._minscale = minscale
          self._maxscale = maxscale
@@@ -767,10 -783,11 +801,11 @@@
  
          :Args:
  
-             x : int
+             x : float
                  new `minscale` attribute.
  
          """
+         pyoArgsAssert(self, "n", x)
          self._minscale = x
          x, lmax = convertArgsToLists(x)
          [obj.setMinScale(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -781,10 -798,11 +816,11 @@@
  
          :Args:
  
-             x : int
+             x : float
                  new `maxscale` attribute.
  
          """
+         pyoArgsAssert(self, "n", x)
          self._maxscale = x
          x, lmax = convertArgsToLists(x)
          [obj.setMaxScale(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -799,6 -817,7 +835,7 @@@
                  new `channel` attribute.
  
          """
+         pyoArgsAssert(self, "i", x)
          self._channel = x
          x, lmax = convertArgsToLists(x)
          [obj.setChannel(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -856,6 -875,7 +893,7 @@@ class Programin(PyoObject)
  
      """
      def __init__(self, channel=0, mul=1, add=0):
+         pyoArgsAssert(self, "iOO", channel, mul, add)
          PyoObject.__init__(self, mul, add)
          self._channel = channel
          channel, mul, add, lmax = convertArgsToLists(channel, mul, add)
@@@ -874,6 -894,7 +912,7 @@@
                  new `channel` attribute.
  
          """
+         pyoArgsAssert(self, "i", x)
          self._channel = x
          x, lmax = convertArgsToLists(x)
          [obj.setChannel(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -928,6 -949,7 +967,7 @@@ class MidiAdsr(PyoObject)
  
      """
      def __init__(self, input, attack=0.01, decay=0.05, sustain=0.7, release=0.1, mul=1, add=0):
+         pyoArgsAssert(self, "onnnnOO", input, attack, decay, sustain, release, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._attack = attack
@@@ -953,6 -975,7 +993,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -966,6 -989,7 +1007,7 @@@
                  new `attack` attribute.
  
          """
+         pyoArgsAssert(self, "n", x)
          self._attack = x
          x, lmax = convertArgsToLists(x)
          [obj.setAttack(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -980,6 -1004,7 +1022,7 @@@
                  new `decay` attribute.
  
          """
+         pyoArgsAssert(self, "n", x)
          self._decay = x
          x, lmax = convertArgsToLists(x)
          [obj.setDecay(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -994,6 -1019,7 +1037,7 @@@
                  new `sustain` attribute.
  
          """
+         pyoArgsAssert(self, "n", x)
          self._sustain = x
          x, lmax = convertArgsToLists(x)
          [obj.setSustain(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1008,6 -1034,7 +1052,7 @@@
                  new `sustain` attribute.
  
          """
+         pyoArgsAssert(self, "n", x)
          self._release = x
          x, lmax = convertArgsToLists(x)
          [obj.setRelease(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1086,6 -1113,7 +1131,7 @@@ class MidiDelAdsr(PyoObject)
  
      """
      def __init__(self, input, delay=0, attack=0.01, decay=0.05, sustain=0.7, release=0.1, mul=1, add=0):
+         pyoArgsAssert(self, "onnnnnOO", input, delay, attack, decay, sustain, release, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._delay = delay
@@@ -1112,6 -1140,7 +1158,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -1125,6 -1154,7 +1172,7 @@@
                  new `delay` attribute.
  
          """
+         pyoArgsAssert(self, "n", x)
          self._delay = x
          x, lmax = convertArgsToLists(x)
          [obj.setDelay(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1139,6 -1169,7 +1187,7 @@@
                  new `attack` attribute.
  
          """
+         pyoArgsAssert(self, "n", x)
          self._attack = x
          x, lmax = convertArgsToLists(x)
          [obj.setAttack(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1153,6 -1184,7 +1202,7 @@@
                  new `decay` attribute.
  
          """
+         pyoArgsAssert(self, "n", x)
          self._decay = x
          x, lmax = convertArgsToLists(x)
          [obj.setDecay(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1167,6 -1199,7 +1217,7 @@@
                  new `sustain` attribute.
  
          """
+         pyoArgsAssert(self, "n", x)
          self._sustain = x
          x, lmax = convertArgsToLists(x)
          [obj.setSustain(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1181,6 -1214,7 +1232,7 @@@
                  new `sustain` attribute.
  
          """
+         pyoArgsAssert(self, "n", x)
          self._release = x
          x, lmax = convertArgsToLists(x)
          [obj.setRelease(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1218,4 -1252,80 +1270,84 @@@
          """float. Duration of the release phase in seconds."""
          return self._release
      @release.setter
-     def release(self, x): self.setRelease(x)
++<<<<<<< HEAD
++    def release(self, x): self.setRelease(x)
++=======
+     def release(self, x): self.setRelease(x)
+ 
+ class RawMidi(PyoObject):
+     """
+     Raw Midi handler.
+ 
+     This object calls a python function for each raw midi data 
+     (status, data1, data2) event for further processing in Python.
+ 
+     :Parent: :py:class:`PyoObject`
+ 
+     :Args:
+ 
+         function : Python function (can't be a list)
+             Function to be called. The function must be declared
+             with three arguments, one for the status byte and two
+             for the data bytes. Ex.:
+ 
+             def event(status, data1, data2):
+                 print status, data1, data2
+ 
+     .. note::
+ 
+         The out() method is bypassed. RawMidi's signal can not be sent
+         to audio outs.
+ 
+     >>> s = Server()
+     >>> s.setMidiInputDevice(99) # opens all devices
+     >>> s.boot()
+     >>> s.start()
+     >>> def event(status, data1, data2):
+     ...     print status, data1, data2
+     >>> a = RawMidi(event)
+ 
+     """
+     def __init__(self, function):
+         pyoArgsAssert(self, "C", function)
+         PyoObject.__init__(self)
+         self._function = WeakMethod(function)
+         self._base_objs = [RawMidi_base(self._function)]
+ 
+     def out(self, chnl=0, inc=1, dur=0, delay=0):
+         return self.play(dur, delay)
+ 
+     def setMul(self, x):
+         pass
+ 
+     def setAdd(self, x):
+         pass
+ 
+     def setSub(self, x):
+         pass
+ 
+     def setDiv(self, x):
+         pass
+ 
+     def setFunction(self, x):
+         """
+         Replace the `function` attribute.
+ 
+         :Args:
+ 
+             x : Python function
+                 new `function` attribute.
+ 
+         """
+         pyoArgsAssert(self, "C", x)
+         self._function = WeakMethod(x)
+         [obj.setFunction(self._function) for i, obj in enumerate(self._base_objs)]
+ 
+     @property
+     def function(self):
+         """Python function. Function to be called."""
+         return self._function
+     @function.setter
+     def function(self, x):
+         self.setFunction(x)
++>>>>>>> upstream/0.7.6
diff --combined pyolib/opensndctrl.py
index c92a9a5,163cd94..c856def
--- a/pyolib/opensndctrl.py
+++ b/pyolib/opensndctrl.py
@@@ -31,10 -31,9 +31,9 @@@ GNU Lesser General Public License for m
  You should have received a copy of the GNU Lesser General Public
  License along with pyo.  If not, see <http://www.gnu.org/licenses/>.
  """
- import sys
  from _core import *
  from _maps import *
- from types import IntType, ListType
+ from types import ListType
  
  ######################################################################
  ### Open Sound Control
@@@ -77,6 -76,7 +76,7 @@@ class OscSend(PyoObject)
  
      """
      def __init__(self, input, port, address, host="127.0.0.1"):
+         pyoArgsAssert(self, "oiss", input, port, address, host)
          PyoObject.__init__(self)
          self._input = input
          self._in_fader = InputFader(input)
@@@ -95,6 -95,7 +95,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -118,6 -119,7 +119,7 @@@
                  Should be greater or equal to 1.
  
          """
+         pyoArgsAssert(self, "I", x)
          [obj.setBufferRate(x) for obj in self._base_objs]
  
      @property
@@@ -169,10 -171,8 +171,8 @@@ class OscReceive(PyoObject)
      """
  
      def __init__(self, port, address, mul=1, add=0):
+         pyoArgsAssert(self, "IsOO", port, address, mul, add)
          PyoObject.__init__(self, mul, add)
-         if type(port) != IntType:
-             print >> sys.stderr, 'TypeError: "port" argument of %s must be an integer.\n' % self.__class__.__name__
-             exit()
          address, mul, add, lmax = convertArgsToLists(address, mul, add)
          self._address = address
          self._mainReceiver = OscReceiver_base(port, address)
@@@ -207,6 -207,7 +207,7 @@@
                  Addition factor. Defaults to 0.
  
          """
+         pyoArgsAssert(self, "sOO", path, mul, add)
          path, lmax = convertArgsToLists(path)
          mul, add, lmax2 = convertArgsToLists(mul, add)
          for i, p in enumerate(path):
@@@ -225,6 -226,7 +226,7 @@@
                  Path(s) to remove.
  
          """
+         pyoArgsAssert(self, "s", path)
          path, lmax = convertArgsToLists(path)
          self._mainReceiver.delAddress(path)
          indexes = [self._address.index(p) for p in path]
@@@ -242,6 -244,7 +244,7 @@@
                  True activates the interpolation, False deactivates it.
  
          """
+         pyoArgsAssert(self, "B", x)
          [obj.setInterpolation(x) for obj in self._base_objs]
  
      def setValue(self, path, value):
@@@ -256,6 -259,7 +259,7 @@@
                  Value to attribute to the given address.
  
          """
+         pyoArgsAssert(self, "sn", path, value)
          path, value, lmax = convertArgsToLists(path, value)
          for i in range(lmax):
              p = wrap(path,i)
@@@ -309,11 -313,17 +313,25 @@@ class OscDataSend(PyoObject)
          types : str
              String specifying the types sequence of the message to be sent.
              Possible values are:
++<<<<<<< HEAD
 +                - integer : "i"
 +                - long integer : "h"
 +                - float : "f"
 +                - double : "d"
 +                - string : "s"
++=======
+                 - "i" : integer
+                 - "h" : long integer
+                 - "f" : float
+                 - "d" : double
+                 - "s" ; string
+                 - "b" : blob (list of chars)
+                 - "m" : MIDI packet (list of 4 bytes: [midi port, status, data1, data2])
+                 - "c" : char
+                 - "T" : True
+                 - "F" : False
+                 - "N" : None (nil)
++>>>>>>> upstream/0.7.6
  
              The string "ssfi" indicates that the value to send will be a list
              containing two strings followed by a float and an integer.
@@@ -335,16 -345,26 +353,29 @@@
  
      >>> s = Server().boot()
      >>> s.start()
-     >>> a = OscDataSend("fissif", 9900, "/data/test")
      >>> def pp(address, *args):
      ...     print address
      ...     print args
-     >>> b = OscDataReceive(9900, "/data/test", pp)
+     >>> r = OscDataReceive(9900, "/data/test", pp)
+     >>> # Send various types
+     >>> a = OscDataSend("fissif", 9900, "/data/test")
      >>> msg = [3.14159, 1, "Hello", "world!", 2, 6.18]
      >>> a.send(msg)
+     >>> # Send a blob
+     >>> b = OscDataSend("b", 9900, "/data/test")
+     >>> msg = [[chr(i) for i in range(10)]]
+     >>> b.send(msg)
+     >>> # Send a MIDI noteon on port 0
+     >>> c = OscDataSend("m", 9900, "/data/test")
+     >>> msg = [[0, 144, 60, 100]]
+     >>> c.send(msg)
  
      """
      def __init__(self, types, port, address, host="127.0.0.1"):
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "siss", types, port, address, host)
++>>>>>>> upstream/0.7.6
          PyoObject.__init__(self)
          types, port, address, host, lmax = convertArgsToLists(types, port, address, host)
          self._base_objs = [OscDataSend_base(wrap(types,i), wrap(port,i), wrap(address,i), wrap(host,i)) for i in range(lmax)]
@@@ -396,6 -416,7 +427,7 @@@
                  is the localhost.
  
          """
+         pyoArgsAssert(self, "siss", types, port, address, host)
          types, port, address, host, lmax = convertArgsToLists(types, port, address, host)
          objs = [OscDataSend_base(wrap(types,i), wrap(port,i), wrap(address,i), wrap(host,i)) for i in range(lmax)]
          self._base_objs.extend(objs)
@@@ -412,6 -433,7 +444,7 @@@
                  Path(s) to remove.
  
          """
+         pyoArgsAssert(self, "s", path)
          path, lmax = convertArgsToLists(path)
          for p in path:
              self._base_objs.remove(self._addresses[p])
@@@ -433,8 -455,10 +466,10 @@@
  
          """
          if address == None:
+             pyoArgsAssert(self, "l", msg)
              [obj.send(msg) for obj in self._base_objs]
          else:
+             pyoArgsAssert(self, "lS", msg, address)
              self._addresses[address].send(msg)
  
  class OscDataReceive(PyoObject):
@@@ -477,25 -501,29 +512,35 @@@
  
      >>> s = Server().boot()
      >>> s.start()
-     >>> a = OscDataSend("fissif", 9900, "/data/test")
      >>> def pp(address, *args):
      ...     print address
      ...     print args
-     >>> b = OscDataReceive(9900, "/data/test", pp)
+     >>> r = OscDataReceive(9900, "/data/test", pp)
+     >>> # Send various types
+     >>> a = OscDataSend("fissif", 9900, "/data/test")
      >>> msg = [3.14159, 1, "Hello", "world!", 2, 6.18]
      >>> a.send(msg)
+     >>> # Send a blob
+     >>> b = OscDataSend("b", 9900, "/data/test")
+     >>> msg = [[chr(i) for i in range(10)]]
+     >>> b.send(msg)
+     >>> # Send a MIDI noteon on port 0
+     >>> c = OscDataSend("m", 9900, "/data/test")
+     >>> msg = [[0, 144, 60, 100]]
+     >>> c.send(msg)
  
      """
  
      def __init__(self, port, address, function):
+         pyoArgsAssert(self, "IsC", port, address, function)
          PyoObject.__init__(self)
-         if type(port) != IntType:
-             print >> sys.stderr, 'TypeError: "port" argument of %s must be an integer.\n' % self.__class__.__name__
-             exit()
          self._port = port
++<<<<<<< HEAD
 +        if not callable(function):
 +            print >> sys.stderr, 'TypeError: "function" argument of %s must be callable.\n' % self.__class__.__name__
 +            exit()
++=======
++>>>>>>> upstream/0.7.6
          self._function = WeakMethod(function)
          self._address, lmax = convertArgsToLists(address)
          # self._address is linked with list at C level
@@@ -527,6 -555,7 +572,7 @@@
                  New path(s) to receive from.
  
          """
+         pyoArgsAssert(self, "s", path)
          path, lmax = convertArgsToLists(path)
          for p in path:
              if p not in self._address:
@@@ -542,6 -571,7 +588,7 @@@
                  Path(s) to remove.
  
          """
+         pyoArgsAssert(self, "s", path)
          path, lmax = convertArgsToLists(path)
          for p in path:
              index = self._address.index(p)
@@@ -592,13 -622,8 +639,8 @@@ class OscListReceive(PyoObject)
      """
  
      def __init__(self, port, address, num=8, mul=1, add=0):
+         pyoArgsAssert(self, "IsIOO", port, address, num, mul, add)
          PyoObject.__init__(self, mul, add)
-         if type(port) != IntType:
-             print >> sys.stderr, 'TypeError: "port" argument of %s must be an integer.\n' % self.__class__.__name__
-             exit()
-         if type(num) != IntType:
-             print >> sys.stderr, 'TypeError: "num" argument of %s must be an integer.\n' % self.__class__.__name__
-             exit()
          self._num = num
          self._op_duplicate = self._num
          address, mul, add, lmax = convertArgsToLists(address, mul, add)
@@@ -637,6 -662,7 +679,7 @@@
                  Addition factor. Defaults to 0.
  
          """
+         pyoArgsAssert(self, "sOO", path, mul, add)
          path, lmax = convertArgsToLists(path)
          mul, add, lmax2 = convertArgsToLists(mul, add)
          for i, p in enumerate(path):
@@@ -655,6 -681,7 +698,7 @@@
                  Path(s) to remove.
  
          """
+         pyoArgsAssert(self, "s", path)
          path, lmax = convertArgsToLists(path)
          self._mainReceiver.delAddress(path)
          indexes = [self._address.index(p) for p in path]
@@@ -674,6 -701,7 +718,7 @@@
                  True activates the interpolation, False deactivates it.
  
          """
+         pyoArgsAssert(self, "B", x)
          [obj.setInterpolation(x) for obj in self._base_objs]
  
      def setValue(self, path, value):
@@@ -688,6 -716,7 +733,7 @@@
                  List of values to attribute to the given address.
  
          """
+         pyoArgsAssert(self, "sl", path, value)
          path, lmax = convertArgsToLists(path)
          for i in range(lmax):
              p = wrap(path,i)
diff --combined pyolib/pattern.py
index 26549d3,8147c41..a61d8bc
--- a/pyolib/pattern.py
+++ b/pyolib/pattern.py
@@@ -23,10 -23,8 +23,8 @@@ GNU Lesser General Public License for m
  You should have received a copy of the GNU Lesser General Public
  License along with pyo.  If not, see <http://www.gnu.org/licenses/>.
  """
- import sys
  from _core import *
  from _maps import *
- from types import ListType, TupleType
  
  class Pattern(PyoObject):
      """
@@@ -62,15 -60,8 +60,19 @@@
  
      """
      def __init__(self, function, time=1):
+         pyoArgsAssert(self, "cO", function, time)
          PyoObject.__init__(self)
++<<<<<<< HEAD
 +        if type(function) == ListType or type(function) == TupleType:
 +            if not callable(function[0]):
 +                print >> sys.stderr, 'TypeError: "function" argument of %s must be callable.\n' % self.__class__.__name__
 +                exit()
 +        else:
 +            if not callable(function):
 +                print >> sys.stderr, 'TypeError: "function" argument of %s must be callable.\n' % self.__class__.__name__
 +                exit()
++=======
++>>>>>>> upstream/0.7.6
          self._function = getWeakMethodRef(function)
          self._time = time
          function, time, lmax = convertArgsToLists(function, time)
@@@ -86,6 -77,7 +88,10 @@@
                  new `function` attribute.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "c", x)
++>>>>>>> upstream/0.7.6
          self._function = getWeakMethodRef(x)
          x, lmax = convertArgsToLists(x)
          [obj.setFunction(WeakMethod(wrap(x,i))) for i, obj in enumerate(self._base_objs)]
@@@ -100,6 -92,7 +106,7 @@@
                  New `time` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._time = x
          x, lmax = convertArgsToLists(x)
          [obj.setTime(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -185,6 -178,7 +192,7 @@@ class Score(PyoObject)
  
      """
      def __init__(self, input, fname="event_"):
+         pyoArgsAssert(self, "os", input, fname)
          PyoObject.__init__(self)
          self._input = input
          self._fname = fname
@@@ -213,6 -207,7 +221,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -258,15 -253,8 +267,19 @@@ class CallAfter(PyoObject)
  
      """
      def __init__(self, function, time=1, arg=None):
+         pyoArgsAssert(self, "cn", function, time)
          PyoObject.__init__(self)
++<<<<<<< HEAD
 +        if type(function) == ListType or type(function) == TupleType:
 +            if not callable(function[0]):
 +                print >> sys.stderr, 'TypeError: "function" argument of %s must be callable.\n' % self.__class__.__name__
 +                exit()
 +        else:
 +            if not callable(function):
 +                print >> sys.stderr, 'TypeError: "function" argument of %s must be callable.\n' % self.__class__.__name__
 +                exit()
++=======
++>>>>>>> upstream/0.7.6
          self._function = getWeakMethodRef(function)
          function, time, arg, lmax = convertArgsToLists(function, time, arg)
          self._base_objs = [CallAfter_base(WeakMethod(wrap(function,i)), wrap(time,i), wrap(arg,i)) for i in range(lmax)]
diff --combined pyolib/tableprocess.py
index e36094b,88ba328..c60b2ed
--- a/pyolib/tableprocess.py
+++ b/pyolib/tableprocess.py
@@@ -62,6 -62,7 +62,7 @@@ class Osc(PyoObject)
  
      """
      def __init__(self, table, freq=1000, phase=0, interp=2, mul=1, add=0):
+         pyoArgsAssert(self, "tOOiOO", table, freq, phase, interp, mul, add)
          PyoObject.__init__(self, mul, add)
          self._table = table
          self._freq = freq
@@@ -80,6 -81,7 +81,7 @@@
                  new `table` attribute.
  
          """
+         pyoArgsAssert(self, "t", x)
          self._table = x
          x, lmax = convertArgsToLists(x)
          [obj.setTable(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -94,6 -96,7 +96,7 @@@
                  new `freq` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._freq = x
          x, lmax = convertArgsToLists(x)
          [obj.setFreq(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -108,6 -111,7 +111,7 @@@
                  new `phase` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._phase = x
          x, lmax = convertArgsToLists(x)
          [obj.setPhase(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -122,6 -126,7 +126,7 @@@
                  new `interp` attribute.
  
          """
+         pyoArgsAssert(self, "i", x)
          self._interp = x
          x, lmax = convertArgsToLists(x)
          [obj.setInterp(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -201,6 -206,7 +206,7 @@@ class OscLoop(PyoObject)
  
      """
      def __init__(self, table, freq=1000, feedback=0, mul=1, add=0):
+         pyoArgsAssert(self, "tOOOO", table, freq, feedback, mul, add)
          PyoObject.__init__(self, mul, add)
          self._table = table
          self._freq = freq
@@@ -218,6 -224,7 +224,7 @@@
                  new `table` attribute.
  
          """
+         pyoArgsAssert(self, "t", x)
          self._table = x
          x, lmax = convertArgsToLists(x)
          [obj.setTable(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -232,6 -239,7 +239,7 @@@
                  new `freq` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._freq = x
          x, lmax = convertArgsToLists(x)
          [obj.setFreq(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -246,6 -254,7 +254,7 @@@
                  new `feedback` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._feedback = x
          x, lmax = convertArgsToLists(x)
          [obj.setFeedback(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -315,6 -324,7 +324,7 @@@ class OscTrig(PyoObject)
  
      """
      def __init__(self, table, trig, freq=1000, phase=0, interp=2, mul=1, add=0):
+         pyoArgsAssert(self, "toOOiOO", table, trig, freq, phase, interp, mul, add)
          PyoObject.__init__(self, mul, add)
          self._table = table
          self._trig = trig
@@@ -334,6 -344,7 +344,7 @@@
                  new `table` attribute.
  
          """
+         pyoArgsAssert(self, "t", x)
          self._table = x
          x, lmax = convertArgsToLists(x)
          [obj.setTable(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -348,6 -359,7 +359,7 @@@
                  new `trig` attribute.
  
          """
+         pyoArgsAssert(self, "o", x)
          self._trig = x
          x, lmax = convertArgsToLists(x)
          [obj.setTrig(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -362,6 -374,7 +374,7 @@@
                  new `freq` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._freq = x
          x, lmax = convertArgsToLists(x)
          [obj.setFreq(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -376,6 -389,7 +389,7 @@@
                  new `phase` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._phase = x
          x, lmax = convertArgsToLists(x)
          [obj.setPhase(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -390,6 -404,7 +404,7 @@@
                  new `interp` attribute.
  
          """
+         pyoArgsAssert(self, "i", x)
          self._interp = x
          x, lmax = convertArgsToLists(x)
          [obj.setInterp(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -520,6 -535,7 +535,7 @@@ class OscBank(PyoObject)
  
      """
      def __init__(self, table, freq=100, spread=1, slope=.9, frndf=1, frnda=0, arndf=1, arnda=0, num=24, fjit=False, mul=1, add=0):
+         pyoArgsAssert(self, "tOOOOOOOibOO", table, freq, spread, slope, frndf, frnda, arndf, arnda, num, fjit, mul, add)
          PyoObject.__init__(self, mul, add)
          self._table = table
          self._freq = freq
@@@ -544,6 -560,7 +560,7 @@@
                  new `table` attribute.
  
          """
+         pyoArgsAssert(self, "t", x)
          self._table = x
          x, lmax = convertArgsToLists(x)
          [obj.setTable(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -558,6 -575,7 +575,7 @@@
                  new `freq` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._freq = x
          x, lmax = convertArgsToLists(x)
          [obj.setFreq(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -572,6 -590,7 +590,7 @@@
                  new `spread` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._spread = x
          x, lmax = convertArgsToLists(x)
          [obj.setSpread(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -586,6 -605,7 +605,7 @@@
                  new `slope` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._slope = x
          x, lmax = convertArgsToLists(x)
          [obj.setSlope(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -600,6 -620,7 +620,7 @@@
                  new `frndf` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._frndf = x
          x, lmax = convertArgsToLists(x)
          [obj.setFrndf(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -614,6 -635,7 +635,7 @@@
                  new `frnda` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._frnda = x
          x, lmax = convertArgsToLists(x)
          [obj.setFrnda(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -628,6 -650,7 +650,7 @@@
                  new `arndf` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._arndf = x
          x, lmax = convertArgsToLists(x)
          [obj.setArndf(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -642,6 -665,7 +665,7 @@@
                  new `arnda` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._arnda = x
          x, lmax = convertArgsToLists(x)
          [obj.setArnda(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -656,6 -680,7 +680,7 @@@
                  new `fjit` attribute.
  
          """
+         pyoArgsAssert(self, "b", x)
          self._fjit = x
          x, lmax = convertArgsToLists(x)
          [obj.setFjit(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -782,6 -807,7 +807,7 @@@ class TableRead(PyoObject)
  
      """
      def __init__(self, table, freq=1, loop=0, interp=2, mul=1, add=0):
+         pyoArgsAssert(self, "tObiOO", table, freq, loop, interp, mul, add)
          PyoObject.__init__(self, mul, add)
          self._table = table
          self._freq = freq
@@@ -801,6 -827,7 +827,7 @@@
                  new `table` attribute.
  
          """
+         pyoArgsAssert(self, "t", x)
          self._table = x
          x, lmax = convertArgsToLists(x)
          [obj.setTable(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -815,6 -842,7 +842,7 @@@
                  new `freq` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._freq = x
          x, lmax = convertArgsToLists(x)
          [obj.setFreq(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -829,6 -857,7 +857,7 @@@
                  new `loop` attribute.
  
          """
+         pyoArgsAssert(self, "b", x)
          self._loop = x
          x, lmax = convertArgsToLists(x)
          [obj.setLoop(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -843,6 -872,7 +872,7 @@@
                  new `interp` attribute.
  
          """
+         pyoArgsAssert(self, "i", x)
          self._interp = x
          x, lmax = convertArgsToLists(x)
          [obj.setInterp(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -937,6 -967,7 +967,7 @@@ class Pulsar(PyoObject)
  
      """
      def __init__(self, table, env, freq=100, frac=0.5, phase=0, interp=2, mul=1, add=0):
+         pyoArgsAssert(self, "ttOOOiOO", table, env, freq, frac, phase, interp, mul, add)
          PyoObject.__init__(self, mul, add)
          self._table = table
          self._env = env
@@@ -957,6 -988,7 +988,7 @@@
                  new `table` attribute.
  
          """
+         pyoArgsAssert(self, "t", x)
          self._table = x
          x, lmax = convertArgsToLists(x)
          [obj.setTable(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -971,6 -1003,7 +1003,7 @@@
                  new `env` attribute.
  
          """
+         pyoArgsAssert(self, "t", x)
          self._env = x
          x, lmax = convertArgsToLists(x)
          [obj.setEnv(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -985,6 -1018,7 +1018,7 @@@
                  new `freq` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._freq = x
          x, lmax = convertArgsToLists(x)
          [obj.setFreq(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -999,6 -1033,7 +1033,7 @@@
                  new `frac` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._frac = x
          x, lmax = convertArgsToLists(x)
          [obj.setFrac(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1013,6 -1048,7 +1048,7 @@@
                  new `phase` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._phase = x
          x, lmax = convertArgsToLists(x)
          [obj.setPhase(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1031,6 -1067,7 +1067,7 @@@
                      4. cubic
  
          """
+         pyoArgsAssert(self, "i", x)
          self._interp = x
          x, lmax = convertArgsToLists(x)
          [obj.setInterp(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1107,6 -1144,7 +1144,7 @@@ class Pointer(PyoObject)
  
      """
      def __init__(self, table, index, mul=1, add=0):
+         pyoArgsAssert(self, "toOO", table, index, mul, add)
          PyoObject.__init__(self, mul, add)
          self._table = table
          self._index = index
@@@ -1123,6 -1161,7 +1161,7 @@@
                  new `table` attribute.
  
          """
+         pyoArgsAssert(self, "t", x)
          self._table = x
          x, lmax = convertArgsToLists(x)
          [obj.setTable(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1137,6 -1176,7 +1176,7 @@@
                  new `index` attribute.
  
          """
+         pyoArgsAssert(self, "o", x)
          self._index = x
          x, lmax = convertArgsToLists(x)
          [obj.setIndex(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1193,6 -1233,7 +1233,7 @@@ class Pointer2(PyoObject)
  
      """
      def __init__(self, table, index, interp=4, autosmooth=True, mul=1, add=0):
+         pyoArgsAssert(self, "toibOO", table, index, interp, autosmooth, mul, add)
          PyoObject.__init__(self, mul, add)
          self._table = table
          self._index = index
@@@ -1211,6 -1252,7 +1252,7 @@@
                  new `table` attribute.
  
          """
+         pyoArgsAssert(self, "t", x)
          self._table = x
          x, lmax = convertArgsToLists(x)
          [obj.setTable(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1225,6 -1267,7 +1267,7 @@@
                  new `index` attribute.
  
          """
+         pyoArgsAssert(self, "o", x)
          self._index = x
          x, lmax = convertArgsToLists(x)
          [obj.setIndex(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1243,6 -1286,7 +1286,7 @@@
                      4. cubic interpolation (default)
  
          """
+         pyoArgsAssert(self, "i", x)
          self._interp = x
          x, lmax = convertArgsToLists(x)
          [obj.setInterp(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1261,6 -1305,7 +1305,7 @@@
                  new `autosmooth` attribute.
  
          """
+         pyoArgsAssert(self, "b", x)
          self._autosmooth = x
          x, lmax = convertArgsToLists(x)
          [obj.setAutoSmooth(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1322,6 -1367,7 +1367,7 @@@ class TableIndex(PyoObject)
  
      """
      def __init__(self, table, index, mul=1, add=0):
+         pyoArgsAssert(self, "toOO", table, index, mul, add)
          PyoObject.__init__(self, mul, add)
          self._table = table
          self._index = index
@@@ -1338,6 -1384,7 +1384,7 @@@
                  new `table` attribute.
  
          """
+         pyoArgsAssert(self, "t", x)
          self._table = x
          x, lmax = convertArgsToLists(x)
          [obj.setTable(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1352,6 -1399,7 +1399,7 @@@
                  new `index` attribute.
  
          """
+         pyoArgsAssert(self, "o", x)
          self._index = x
          x, lmax = convertArgsToLists(x)
          [obj.setIndex(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1402,6 -1450,7 +1450,7 @@@ class Lookup(PyoObject)
  
      """
      def __init__(self, table, index, mul=1, add=0):
+         pyoArgsAssert(self, "toOO", table, index, mul, add)
          PyoObject.__init__(self, mul, add)
          self._table = table
          self._index = index
@@@ -1418,6 -1467,7 +1467,7 @@@
                  new `table` attribute.
  
          """
+         pyoArgsAssert(self, "t", x)
          self._table = x
          x, lmax = convertArgsToLists(x)
          [obj.setTable(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1432,6 -1482,7 +1482,7 @@@
                  new `index` attribute.
  
          """
+         pyoArgsAssert(self, "o", x)
          self._index = x
          x, lmax = convertArgsToLists(x)
          [obj.setIndex(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1514,6 -1565,7 +1565,7 @@@ class TableRec(PyoObject)
  
      """
      def __init__(self, input, table, fadetime=0):
+         pyoArgsAssert(self, "otn", input, table, fadetime)
          PyoObject.__init__(self)
          self._time_dummy = []
          self._input = input
@@@ -1551,6 -1603,7 +1603,10 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "oN", x, fadetime)
++>>>>>>> upstream/0.7.6
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -1564,6 -1617,7 +1620,10 @@@
                  new `table` attribute.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "t", x)
++>>>>>>> upstream/0.7.6
          self._table = x
          x, lmax = convertArgsToLists(x)
          [obj.setTable(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1627,6 -1681,7 +1687,10 @@@ class TableWrite(PyoObject)
  
      """
      def __init__(self, input, pos, table):
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "oot", input, pos, table)
++>>>>>>> upstream/0.7.6
          PyoObject.__init__(self)
          self._input = input
          self._pos = pos
@@@ -1656,6 -1711,7 +1720,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -1669,6 -1725,7 +1734,7 @@@
                  new `table` attribute.
  
          """
+         pyoArgsAssert(self, "t", x)
          self._table = x
          x, lmax = convertArgsToLists(x)
          [obj.setTable(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1683,6 -1740,7 +1749,10 @@@
                  new `pos` attribute.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "o", x)
++>>>>>>> upstream/0.7.6
          self._pos = x
          x, lmax = convertArgsToLists(x)
          [obj.setPos(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1746,6 -1804,7 +1816,7 @@@ class TableMorph(PyoObject)
  
      """
      def __init__(self, input, table, sources):
+         pyoArgsAssert(self, "otl", input, table, sources)
          PyoObject.__init__(self)
          self._input = input
          self._table = table
@@@ -1776,6 -1835,7 +1847,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -1789,6 -1849,7 +1861,7 @@@
                  new `table` attribute.
  
          """
+         pyoArgsAssert(self, "t", x)
          self._table = x
          x, lmax = convertArgsToLists(x)
          [obj.setTable(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1803,6 -1864,7 +1876,7 @@@
                  new `sources` attribute.
  
          """
+         pyoArgsAssert(self, "l", x)
          self._sources = x
          self._base_sources = [source[0] for source in x]
          [obj.setSources(self._base_sources) for i, obj in enumerate(self._base_objs)]
@@@ -1870,6 -1932,7 +1944,7 @@@ class Granulator(PyoObject)
  
      """
      def __init__(self, table, env, pitch=1, pos=0, dur=.1, grains=8, basedur=.1, mul=1, add=0):
+         pyoArgsAssert(self, "ttOOOinOO", table, env, pitch, pos, dur, grains, basedur, mul, add)
          PyoObject.__init__(self, mul, add)
          self._table = table
          self._env = env
@@@ -1893,6 -1956,7 +1968,7 @@@
                  new `table` attribute.
  
          """
+         pyoArgsAssert(self, "t", x)
          self._table = x
          x, lmax = convertArgsToLists(x)
          [obj.setTable(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1907,6 -1971,7 +1983,7 @@@
                  new `env` attribute.
  
          """
+         pyoArgsAssert(self, "t", x)
          self._env = x
          x, lmax = convertArgsToLists(x)
          [obj.setEnv(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1921,6 -1986,7 +1998,7 @@@
                  new `pitch` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._pitch = x
          x, lmax = convertArgsToLists(x)
          [obj.setPitch(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1935,6 -2001,7 +2013,7 @@@
                  new `pos` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._pos = x
          x, lmax = convertArgsToLists(x)
          [obj.setPos(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1949,6 -2016,7 +2028,7 @@@
                  new `dur` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._dur = x
          x, lmax = convertArgsToLists(x)
          [obj.setDur(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1963,6 -2031,7 +2043,7 @@@
                  new `grains` attribute.
  
          """
+         pyoArgsAssert(self, "i", x)
          self._grains = x
          x, lmax = convertArgsToLists(x)
          [obj.setGrains(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1977,6 -2046,7 +2058,7 @@@
                  new `basedur` attribute.
  
          """
+         pyoArgsAssert(self, "n", x)
          self._basedur = x
          x, lmax = convertArgsToLists(x)
          [obj.setBaseDur(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2088,6 -2158,7 +2170,7 @@@ class TrigTableRec(PyoObject)
  
      """
      def __init__(self, input, trig, table, fadetime=0):
+         pyoArgsAssert(self, "ootn", input, trig, table, fadetime)
          PyoObject.__init__(self)
          self._time_dummy = []
          self._input = input
@@@ -2127,6 -2198,7 +2210,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -2142,6 -2214,7 +2226,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._trig = x
          self._in_fader2.setInput(x, fadetime)
  
@@@ -2155,6 -2228,7 +2240,7 @@@
                  new `table` attribute.
  
          """
+         pyoArgsAssert(self, "t", x)
          self._table = x
          x, lmax = convertArgsToLists(x)
          [obj.setTable(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2245,6 -2319,7 +2331,7 @@@ class Looper(PyoObject)
  
      """
      def __init__(self, table, pitch=1, start=0, dur=1., xfade=20, mode=1, xfadeshape=0, startfromloop=False, interp=2, autosmooth=False, mul=1, add=0):
+         pyoArgsAssert(self, "tOOOOiibibOO", table, pitch, start, dur, xfade, mode, xfadeshape, startfromloop, interp, autosmooth, mul, add)
          PyoObject.__init__(self, mul, add)
          self._table = table
          self._pitch = pitch
@@@ -2271,6 -2346,7 +2358,7 @@@
                  new `table` attribute.
  
          """
+         pyoArgsAssert(self, "t", x)
          self._table = x
          x, lmax = convertArgsToLists(x)
          [obj.setTable(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2285,6 -2361,7 +2373,7 @@@
                  new `pitch` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._pitch = x
          x, lmax = convertArgsToLists(x)
          [obj.setPitch(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2299,6 -2376,7 +2388,7 @@@
                  new `start` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._start = x
          x, lmax = convertArgsToLists(x)
          [obj.setStart(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2313,6 -2391,7 +2403,7 @@@
                  new `dur` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._dur = x
          x, lmax = convertArgsToLists(x)
          [obj.setDur(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2327,6 -2406,7 +2418,7 @@@
                  new `xfade` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._xfade = x
          x, lmax = convertArgsToLists(x)
          [obj.setXfade(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2341,6 -2421,7 +2433,7 @@@
                  new `xfadeshape` attribute.
  
          """
+         pyoArgsAssert(self, "i", x)
          self._xfadeshape = x
          x, lmax = convertArgsToLists(x)
          [obj.setXfadeShape(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2355,6 -2436,7 +2448,7 @@@
                  new `startfromloop` attribute.
  
          """
+         pyoArgsAssert(self, "b", x)
          self._startfromloop = x
          x, lmax = convertArgsToLists(x)
          [obj.setStartFromLoop(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2369,6 -2451,7 +2463,7 @@@
                  new `mode` attribute.
  
          """
+         pyoArgsAssert(self, "i", x)
          self._mode = x
          x, lmax = convertArgsToLists(x)
          [obj.setMode(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2383,6 -2466,7 +2478,7 @@@
                  new `interp` attribute.
  
          """
+         pyoArgsAssert(self, "i", x)
          self._interp = x
          x, lmax = convertArgsToLists(x)
          [obj.setInterp(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2397,6 -2481,7 +2493,7 @@@
                  new `autosmooth` attribute.
  
          """
+         pyoArgsAssert(self, "b", x)
          self._autosmooth = x
          x, lmax = convertArgsToLists(x)
          [obj.setAutoSmooth(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2539,6 -2624,7 +2636,7 @@@ class TablePut(PyoObject)
  
      """
      def __init__(self, input, table):
+         pyoArgsAssert(self, "ot", input, table)
          PyoObject.__init__(self)
          self._input = input
          self._table = table
@@@ -2568,6 -2654,7 +2666,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -2581,6 -2668,7 +2680,7 @@@
                  new `table` attribute.
  
          """
+         pyoArgsAssert(self, "t", x)
          self._table = x
          x, lmax = convertArgsToLists(x)
          [obj.setTable(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2641,6 -2729,7 +2741,7 @@@ class Granule(PyoObject)
  
      """
      def __init__(self, table, env, dens=50, pitch=1, pos=0, dur=.1, mul=1, add=0):
+         pyoArgsAssert(self, "ttOOOOOO", table, env, dens, pitch, pos, dur, mul, add)
          PyoObject.__init__(self, mul, add)
          self._table = table
          self._env = env
@@@ -2663,6 -2752,7 +2764,7 @@@
                  new `table` attribute.
  
          """
+         pyoArgsAssert(self, "t", x)
          self._table = x
          x, lmax = convertArgsToLists(x)
          [obj.setTable(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2677,6 -2767,7 +2779,7 @@@
                  new `env` attribute.
  
          """
+         pyoArgsAssert(self, "t", x)
          self._env = x
          x, lmax = convertArgsToLists(x)
          [obj.setEnv(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2691,6 -2782,7 +2794,7 @@@
                  new `dens` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._dens = x
          x, lmax = convertArgsToLists(x)
          [obj.setDens(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2705,6 -2797,7 +2809,7 @@@
                  new `pitch` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._pitch = x
          x, lmax = convertArgsToLists(x)
          [obj.setPitch(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2719,6 -2812,7 +2824,7 @@@
                  new `pos` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._pos = x
          x, lmax = convertArgsToLists(x)
          [obj.setPos(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2733,6 -2827,7 +2839,7 @@@
                  new `dur` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._dur = x
          x, lmax = convertArgsToLists(x)
          [obj.setDur(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2748,6 -2843,7 +2855,10 @@@
                  while False means asynchronous.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "b", x)
++>>>>>>> upstream/0.7.6
          self._sync = x
          x, lmax = convertArgsToLists(x)
          [obj.setSync(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2832,6 -2928,7 +2943,7 @@@ class TableScale(PyoObject)
  
      """
      def __init__(self, table, outtable, mul=1, add=0):
+         pyoArgsAssert(self, "ttOO", table, outtable, mul, add)
          PyoObject.__init__(self, mul, add)
          self._table = table
          self._outtable = outtable
@@@ -2848,6 -2945,7 +2960,7 @@@
                  new `table` attribute.
  
          """
+         pyoArgsAssert(self, "t", x)
          self._table = x
          x, lmax = convertArgsToLists(x)
          [obj.setTable(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2862,6 -2960,7 +2975,7 @@@
                  new `outtable` attribute.
  
          """
+         pyoArgsAssert(self, "t", x)
          self._outtable = x
          x, lmax = convertArgsToLists(x)
          [obj.setOuttable(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2945,6 -3044,7 +3059,10 @@@ class Particle(PyoObject)
  
      """
      def __init__(self, table, env, dens=50, pitch=1, pos=0, dur=.1, dev=0.01, pan=0.5, chnls=1, mul=1, add=0):
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "ttOOOOOOIOO", table, env, dens, pitch, pos, dur, dev, pan, chnls, mul, add)
++>>>>>>> upstream/0.7.6
          PyoObject.__init__(self, mul, add)
          self._table = table
          self._env = env
@@@ -2972,6 -3072,7 +3090,10 @@@
                  new `table` attribute.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "t", x)
++>>>>>>> upstream/0.7.6
          self._table = x
          x, lmax = convertArgsToLists(x)
          [obj.setTable(wrap(x,i)) for i, obj in enumerate(self._base_players)]
@@@ -2986,6 -3087,7 +3108,10 @@@
                  new `env` attribute.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "t", x)
++>>>>>>> upstream/0.7.6
          self._env = x
          x, lmax = convertArgsToLists(x)
          [obj.setEnv(wrap(x,i)) for i, obj in enumerate(self._base_players)]
@@@ -3000,6 -3102,7 +3126,10 @@@
                  new `dens` attribute.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "O", x)
++>>>>>>> upstream/0.7.6
          self._dens = x
          x, lmax = convertArgsToLists(x)
          [obj.setDens(wrap(x,i)) for i, obj in enumerate(self._base_players)]
@@@ -3014,6 -3117,7 +3144,10 @@@
                  new `pitch` attribute.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "O", x)
++>>>>>>> upstream/0.7.6
          self._pitch = x
          x, lmax = convertArgsToLists(x)
          [obj.setPitch(wrap(x,i)) for i, obj in enumerate(self._base_players)]
@@@ -3028,6 -3132,7 +3162,10 @@@
                  new `pos` attribute.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "O", x)
++>>>>>>> upstream/0.7.6
          self._pos = x
          x, lmax = convertArgsToLists(x)
          [obj.setPos(wrap(x,i)) for i, obj in enumerate(self._base_players)]
@@@ -3042,6 -3147,7 +3180,10 @@@
                  new `dur` attribute.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "O", x)
++>>>>>>> upstream/0.7.6
          self._dur = x
          x, lmax = convertArgsToLists(x)
          [obj.setDur(wrap(x,i)) for i, obj in enumerate(self._base_players)]
@@@ -3056,6 -3162,7 +3198,10 @@@
                  new `dev` attribute.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "O", x)
++>>>>>>> upstream/0.7.6
          self._dev = x
          x, lmax = convertArgsToLists(x)
          [obj.setDev(wrap(x,i)) for i, obj in enumerate(self._base_players)]
@@@ -3070,6 -3177,7 +3216,10 @@@
                  new `pan` attribute.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "O", x)
++>>>>>>> upstream/0.7.6
          self._pan = x
          x, lmax = convertArgsToLists(x)
          [obj.setPan(wrap(x,i)) for i, obj in enumerate(self._base_players)]
diff --combined pyolib/tables.py
index 6bdffb0,aeed3c1..f68a85b
--- a/pyolib/tables.py
+++ b/pyolib/tables.py
@@@ -52,6 -52,7 +52,7 @@@ class HarmTable(PyoTableObject)
  
      """
      def __init__(self, list=[1., 0.], size=8192):
+         pyoArgsAssert(self, "lI", list, size)
          PyoTableObject.__init__(self, size)
          self._list = copy.deepcopy(list)
          self._base_objs = [HarmTable_base(self._list, size)]
@@@ -68,6 -69,7 +69,10 @@@
                  numbers 1,2,3, etc.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "l", list)
++>>>>>>> upstream/0.7.6
          self._list = list
          [obj.replace(list) for obj in self._base_objs]
          self.refreshView()
@@@ -102,6 -104,7 +107,7 @@@ class SawTable(PyoTableObject)
  
      """
      def __init__(self, order=10, size=8192):
+         pyoArgsAssert(self, "II", order, size)
          PyoTableObject.__init__(self, size)
          self._order = order
          list = [1./i for i in range(1,(order+1))]
@@@ -117,6 -120,7 +123,10 @@@
                  New number of harmonics
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "I", x)
++>>>>>>> upstream/0.7.6
          self._order = x
          list = [1./i for i in range(1,(self._order+1))]
          [obj.replace(list) for obj in self._base_objs]
@@@ -152,6 -156,7 +162,7 @@@ class SquareTable(PyoTableObject)
  
      """
      def __init__(self, order=10, size=8192):
+         pyoArgsAssert(self, "II", order, size)
          PyoTableObject.__init__(self, size)
          self._order = order
          list = []
@@@ -172,6 -177,7 +183,10 @@@
                  New number of harmonics
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "I", x)
++>>>>>>> upstream/0.7.6
          self._order = x
          list = []
          for i in range(1,(self._order*2)):
@@@ -217,6 -223,7 +232,7 @@@ class ChebyTable(PyoTableObject)
  
      """
      def __init__(self, list=[1., 0.], size=8192):
+         pyoArgsAssert(self, "lI", list, size)
          PyoTableObject.__init__(self, size)
          self._list = copy.deepcopy(list)
          self._base_objs = [ChebyTable_base(self._list, size)]
@@@ -234,6 -241,7 +250,10 @@@
                  numbers 1,2,3, ..., 12. Up to 12 partials can be specified.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "l", list)
++>>>>>>> upstream/0.7.6
          self._list = list
          [obj.replace(list) for obj in self._base_objs]
          self.refreshView()
@@@ -277,6 -285,7 +297,7 @@@ class HannTable(PyoTableObject)
  
      """
      def __init__(self, size=8192):
+         pyoArgsAssert(self, "I", size)
          PyoTableObject.__init__(self, size)
          self._base_objs = [HannTable_base(size)]
  
@@@ -303,6 -312,7 +324,7 @@@ class SincTable(PyoTableObject)
  
      """
      def __init__(self, freq=pi*2, windowed=False, size=8192):
+         pyoArgsAssert(self, "NBI", freq, windowed, size)
          PyoTableObject.__init__(self, size)
          self._freq = freq
          self._windowed = windowed
@@@ -318,6 -328,7 +340,7 @@@
                  New frequency in radians.
  
          """
+         pyoArgsAssert(self, "N", x)
          self._freq = x
          [obj.setFreq(x) for obj in self._base_objs]
          self.refreshView()
@@@ -332,6 -343,7 +355,7 @@@
                  New windowed flag.
  
          """
+         pyoArgsAssert(self, "B", x)
          self._windowed = x
          [obj.setWindowed(x) for obj in self._base_objs]
          self.refreshView()
@@@ -380,6 -392,7 +404,7 @@@ class WinTable(PyoTableObject)
  
      """
      def __init__(self, type=2, size=8192):
+         pyoArgsAssert(self, "II", type, size)
          PyoTableObject.__init__(self, size)
          self._type = type
          self._base_objs = [WinTable_base(type, size)]
@@@ -394,6 -407,7 +419,7 @@@
                  Windowing function.
  
          """
+         pyoArgsAssert(self, "I", type)
          self._type = type
          [obj.setType(type) for obj in self._base_objs]
          self.refreshView()
@@@ -428,6 -442,7 +454,7 @@@ class ParaTable(PyoTableObject)
  
      """
      def __init__(self, size=8192):
+         pyoArgsAssert(self, "I", size)
          PyoTableObject.__init__(self, size)
          self._base_objs = [ParaTable_base(size)]
  
@@@ -461,6 -476,7 +488,7 @@@ class LinTable(PyoTableObject)
  
      """
      def __init__(self, list=[(0, 0.), (8191, 1.)], size=8192):
+         pyoArgsAssert(self, "lI", list, size)
          PyoTableObject.__init__(self, size)
          if size < list[-1][0]:
              print "LinTable warning : size smaller than last point position."
@@@ -480,6 -496,7 +508,10 @@@
                  in the table. Location must be integer.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "l", list)
++>>>>>>> upstream/0.7.6
          self._list = list
          [obj.replace(list) for obj in self._base_objs]
          self.refreshView()
@@@ -502,6 -519,7 +534,7 @@@
                  Defaults to 0.02.
  
          """
+         pyoArgsAssert(self, "SN", filename, tolerance)
          _path, _name = os.path.split(filename)
          # files = sorted([f for f in os.listdir(_path) if _name+"_" in f])
          # if _name not in files: files.append(_name)
@@@ -591,6 -609,7 +624,7 @@@ class LogTable(PyoTableObject)
  
      """
      def __init__(self, list=[(0, 0.), (8191, 1.)], size=8192):
+         pyoArgsAssert(self, "lI", list, size)
          PyoTableObject.__init__(self, size)
          if size < list[-1][0]:
              print "LogTable warning : size smaller than last point position."
@@@ -610,6 -629,7 +644,10 @@@
                  in the table. Location must be integer.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "l", list)
++>>>>>>> upstream/0.7.6
          self._list = list
          [obj.replace(list) for obj in self._base_objs]
          self.refreshView()
@@@ -632,6 -652,7 +670,7 @@@
                  Defaults to 0.02.
  
          """
+         pyoArgsAssert(self, "SN", filename, tolerance)
          _path, _name = os.path.split(filename)
          # files = sorted([f for f in os.listdir(_path) if _name+"_" in f])
          # if _name not in files: files.append(_name)
@@@ -721,6 -742,7 +760,7 @@@ class CosLogTable(PyoTableObject)
  
      """
      def __init__(self, list=[(0, 0.), (8191, 1.)], size=8192):
+         pyoArgsAssert(self, "lI", list, size)
          PyoTableObject.__init__(self, size)
          if size < list[-1][0]:
              print "CosLogTable warning : size smaller than last point position."
@@@ -740,6 -762,7 +780,10 @@@
                  in the table. Location must be integer.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "l", list)
++>>>>>>> upstream/0.7.6
          self._list = list
          [obj.replace(list) for obj in self._base_objs]
          self.refreshView()
@@@ -762,6 -785,7 +806,7 @@@
                  Defaults to 0.02.
  
          """
+         pyoArgsAssert(self, "SN", filename, tolerance)
          _path, _name = os.path.split(filename)
          # files = sorted([f for f in os.listdir(_path) if _name+"_" in f])
          # if _name not in files: files.append(_name)
@@@ -850,6 -874,7 +895,7 @@@ class CosTable(PyoTableObject)
  
      """
      def __init__(self, list=[(0, 0.), (8191, 1.)], size=8192):
+         pyoArgsAssert(self, "lI", list, size)
          PyoTableObject.__init__(self, size)
          if size < list[-1][0]:
              print "CosTable warning : size smaller than last point position."
@@@ -869,6 -894,7 +915,10 @@@
                  in the table. Location must be integer.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "l", list)
++>>>>>>> upstream/0.7.6
          self._list = list
          [obj.replace(list) for obj in self._base_objs]
          self.refreshView()
@@@ -891,6 -917,7 +941,7 @@@
                  Defaults to 0.02.
  
          """
+         pyoArgsAssert(self, "SN", filename, tolerance)
          _path, _name = os.path.split(filename)
          # files = sorted([f for f in os.listdir(_path) if _name+"_" in f])
          # if _name not in files: files.append(_name)
@@@ -995,6 -1022,7 +1046,7 @@@ class CurveTable(PyoTableObject)
  
      """
      def __init__(self, list=[(0, 0.), (8191, 1.)], tension=0, bias=0, size=8192):
+         pyoArgsAssert(self, "lNNI", list, tension, bias, size)
          PyoTableObject.__init__(self, size)
          if size < list[-1][0]:
              print "CurveTable warning : size smaller than last point position."
@@@ -1017,6 -1045,7 +1069,7 @@@
                  New `tension` attribute.
  
          """
+         pyoArgsAssert(self, "N", x)
          self._tension = x
          [obj.setTension(x) for obj in self._base_objs]
          self.refreshView()
@@@ -1034,6 -1063,7 +1087,7 @@@
                  New `bias` attribute.
  
          """
+         pyoArgsAssert(self, "N", x)
          self._bias = x
          [obj.setBias(x) for obj in self._base_objs]
          self.refreshView()
@@@ -1049,6 -1079,7 +1103,10 @@@
                  in the table. Location must be integer.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "l", list)
++>>>>>>> upstream/0.7.6
          self._list = list
          [obj.replace(list) for obj in self._base_objs]
          self.refreshView()
@@@ -1071,6 -1102,7 +1129,7 @@@
                  Defaults to 0.02.
  
          """
+         pyoArgsAssert(self, "SN", filename, tolerance)
          _path, _name = os.path.split(filename)
          # files = sorted([f for f in os.listdir(_path) if _name+"_" in f])
          # if _name not in files: files.append(_name)
@@@ -1178,6 -1210,7 +1237,7 @@@ class ExpTable(PyoTableObject)
  
      """
      def __init__(self, list=[(0, 0.), (8192, 1.)], exp=10, inverse=True, size=8192):
+         pyoArgsAssert(self, "lNBI", list, exp, inverse, size)
          PyoTableObject.__init__(self, size)
          if size < list[-1][0]:
              print "ExpTable warning : size smaller than last point position."
@@@ -1198,6 -1231,7 +1258,7 @@@
                  New `exp` attribute.
  
          """
+         pyoArgsAssert(self, "N", x)
          self._exp = x
          [obj.setExp(x) for obj in self._base_objs]
          self.refreshView()
@@@ -1212,6 -1246,7 +1273,7 @@@
                  New `inverse` attribute.
  
          """
+         pyoArgsAssert(self, "B", x)
          self._inverse = x
          [obj.setInverse(x) for obj in self._base_objs]
          self.refreshView()
@@@ -1227,6 -1262,7 +1289,7 @@@
                  in the table. Location must be integer.
  
          """
+         pyoArgsAssert(self, "l", list)
          self._list = list
          [obj.replace(list) for obj in self._base_objs]
          self.refreshView()
@@@ -1249,6 -1285,7 +1312,7 @@@
                  Defaults to 0.02.
  
          """
+         pyoArgsAssert(self, "SN", filename, tolerance)
          _path, _name = os.path.split(filename)
          # files = sorted([f for f in os.listdir(_path) if _name+"_" in f])
          # if _name not in files: files.append(_name)
@@@ -1736,6 -1773,7 +1800,7 @@@ class NewTable(PyoTableObject)
  
      """
      def __init__(self, length, chnls=1, init=None, feedback=0.0):
+         pyoArgsAssert(self, "NILN", length, chnls, init, feedback)
          PyoTableObject.__init__(self)
          self._length = length
          self._chnls = chnls
@@@ -1762,6 -1800,7 +1827,10 @@@
                  the list will be loaded in all tablestreams.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "l", x)
++>>>>>>> upstream/0.7.6
          if type(x[0]) != ListType:
              x = [x]
          [obj.setTable(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1777,6 -1816,7 +1846,7 @@@
                  New `feedback` value.
  
          """
+         pyoArgsAssert(self, "N", x)
          self._feedback = x
          [obj.setFeedback(x) for i, obj in enumerate(self._base_objs)]
  
@@@ -1925,6 -1965,7 +1995,7 @@@ class DataTable(PyoTableObject)
  
      """
      def __init__(self, size, chnls=1, init=None):
+         pyoArgsAssert(self, "IIL", size, chnls, init)
          PyoTableObject.__init__(self, size)
          self._chnls = chnls
          self._init = init
@@@ -1948,6 -1989,7 +2019,10 @@@
                  the list will be loaded in all tablestreams.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "l", x)
++>>>>>>> upstream/0.7.6
          if type(x[0]) != ListType:
              x = [x]
          [obj.setTable(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2033,6 -2075,7 +2108,10 @@@ class AtanTable(PyoTableObject)
  
      """
      def __init__(self, slope=0.5, size=8192):
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "NI", slope, size)
++>>>>>>> upstream/0.7.6
          PyoTableObject.__init__(self, size)
          self._slope = slope
          self._base_objs = [AtanTable_base(slope, size)]
@@@ -2047,6 -2090,7 +2126,10 @@@
                  New slope between 0 and 1.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "N", x)
++>>>>>>> upstream/0.7.6
          self._slope = x
          [obj.setSlope(x) for obj in self._base_objs]
          self.refreshView()
@@@ -2106,6 -2150,7 +2189,10 @@@ class PartialTable(PyoTableObject)
  
      """
      def __init__(self, list=[(1,1), (1.33,0.5),(1.67,0.3)], size=65536):
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "lI", list, size)
++>>>>>>> upstream/0.7.6
          PyoTableObject.__init__(self, size)
          self._list = list
          self._par_table = HarmTable(self._create_list(), size)
@@@ -2139,6 -2184,7 +2226,10 @@@
                  and its strength.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "l", list)
++>>>>>>> upstream/0.7.6
          self._list = list
          [obj.replace(self._create_list()) for obj in self._base_objs]
          self.normalize()
diff --combined pyolib/triggers.py
index 0125b62,2e74fa9..33bc577
--- a/pyolib/triggers.py
+++ b/pyolib/triggers.py
@@@ -27,7 -27,6 +27,6 @@@ GNU Lesser General Public License for m
  You should have received a copy of the GNU Lesser General Public
  License along with pyo.  If not, see <http://www.gnu.org/licenses/>.
  """
- import sys
  from _core import *
  from _maps import *
  from _widgets import createGraphWindow
@@@ -114,6 -113,7 +113,7 @@@ class Metro(PyoObject)
  
      """
      def __init__(self, time=1, poly=1):
+         pyoArgsAssert(self, "OI", time, poly)
          PyoObject.__init__(self)
          self._time = time
          self._poly = poly
@@@ -130,6 -130,7 +130,7 @@@
                  New `time` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._time = x
          x, lmax = convertArgsToLists(x)
          [obj.setTime(wrap(x,i)*self._poly) for i, obj in enumerate(self._base_objs)]
@@@ -199,10 -200,8 +200,8 @@@ class Seq(PyoObject)
  
      """
      def __init__(self, time=1, seq=[1], poly=1):
+         pyoArgsAssert(self, "OlI", time, seq, poly)
          PyoObject.__init__(self)
-         if type(seq) != ListType:
-             print >> sys.stderr, 'TypeError: "seq" argument of %s must be a list.\n' % self.__class__.__name__
-             exit()
          self._time = time
          self._seq = seq
          self._poly = poly
@@@ -225,6 -224,7 +224,7 @@@
                  New `time` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._time = x
          x, lmax = convertArgsToLists(x)
          [obj.setTime(wrap(x,i)) for i, obj in enumerate(self._base_players)]
@@@ -239,6 -239,7 +239,7 @@@
                  New `seq` attribute.
  
          """
+         pyoArgsAssert(self, "l", x)
          self._seq = x
          if type(x[0]) != ListType:
              [obj.setSeq(x) for i, obj in enumerate(self._base_players)]
@@@ -317,6 -318,7 +318,7 @@@ class Cloud(PyoObject)
  
      """
      def __init__(self, density=10, poly=1):
+         pyoArgsAssert(self, "OI", density, poly)
          PyoObject.__init__(self)
          self._density = density
          self._poly = poly
@@@ -334,6 -336,7 +336,7 @@@
                  New `density` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._density = x
          x, lmax = convertArgsToLists(x)
          [obj.setDensity(wrap(x,i)) for i, obj in enumerate(self._base_players)]
@@@ -431,6 -434,7 +434,7 @@@ class Beat(PyoObject)
  
      """
      def __init__(self, time=.125, taps=16, w1=80, w2=50, w3=30, poly=1):
+         pyoArgsAssert(self, "OinnnI", time, taps, w1, w2, w3, poly)
          PyoObject.__init__(self)
          self._tap_dummy = []
          self._amp_dummy = []
@@@ -528,6 -532,7 +532,7 @@@
                  Memory number. 0 <= x < 32.
  
          """
+         pyoArgsAssert(self, "I", x)
          [obj.store(x) for i, obj in enumerate(self._base_players)]
  
      def recall(self, x):
@@@ -540,6 -545,7 +545,7 @@@
                  Memory number. 0 <= x < 32.
  
          """
+         pyoArgsAssert(self, "I", x)
          [obj.recall(x) for i, obj in enumerate(self._base_players)]
  
      def getPresets(self):
@@@ -562,6 -568,7 +568,7 @@@
                  List of presets.
  
          """
+         pyoArgsAssert(self, "l", x)
          if len(self._base_players) == 1:
              return self._base_players[0].setPresets(x)
          else:
@@@ -577,6 -584,7 +584,7 @@@
                  New `time` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._time = x
          x, lmax = convertArgsToLists(x)
          [obj.setTime(wrap(x,i)) for i, obj in enumerate(self._base_players)]
@@@ -591,6 -599,7 +599,7 @@@
                  New `taps` attribute.
  
          """
+         pyoArgsAssert(self, "I", x)
          self._taps = x
          x, lmax = convertArgsToLists(x)
          [obj.setTaps(wrap(x,i)) for i, obj in enumerate(self._base_players)]
@@@ -605,6 -614,7 +614,7 @@@
                  New `w1` attribute.
  
          """
+         pyoArgsAssert(self, "n", x)
          self.setWeights(w1=x)
  
      def setW2(self, x):
@@@ -617,6 -627,7 +627,7 @@@
                  New `w2` attribute.
  
          """
+         pyoArgsAssert(self, "n", x)
          self.setWeights(w2=x)
  
      def setW3(self, x):
@@@ -629,6 -640,7 +640,7 @@@
                  New `w3` attribute.
  
          """
+         pyoArgsAssert(self, "n", x)
          self.setWeights(w3=x)
  
      def setWeights(self, w1=None, w2=None, w3=None):
@@@ -758,6 -770,7 +770,7 @@@ class TrigRandInt(PyoObject)
  
      """
      def __init__(self, input, max=100., mul=1, add=0):
+         pyoArgsAssert(self, "oOOO", input, max, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._max = max
@@@ -777,6 -790,7 +790,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -790,6 -804,7 +804,7 @@@
                  new `max` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._max = x
          x, lmax = convertArgsToLists(x)
          [obj.setMax(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -851,6 -866,7 +866,7 @@@ class TrigRand(PyoObject)
  
      """
      def __init__(self, input, min=0., max=1., port=0., init=0., mul=1, add=0):
+         pyoArgsAssert(self, "oOOnnOO", input, min, max, port, init, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._min = min
@@@ -872,6 -888,7 +888,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -885,6 -902,7 +902,7 @@@
                  new `min` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._min = x
          x, lmax = convertArgsToLists(x)
          [obj.setMin(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -899,6 -917,7 +917,7 @@@
                  new `max` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._max = x
          x, lmax = convertArgsToLists(x)
          [obj.setMax(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -913,6 -932,7 +932,7 @@@
                  new `port` attribute.
  
          """
+         pyoArgsAssert(self, "n", x)
          self._port = x
          x, lmax = convertArgsToLists(x)
          [obj.setPort(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -984,10 -1004,8 +1004,8 @@@ class TrigChoice(PyoObject)
  
      """
      def __init__(self, input, choice, port=0., init=0., mul=1, add=0):
+         pyoArgsAssert(self, "olnnOO", input, choice, port, init, mul, add)
          PyoObject.__init__(self, mul, add)
-         if type(choice) != ListType:
-             print >> sys.stderr, 'TypeError: "choice" argument of %s must be a list.\n' % self.__class__.__name__
-             exit()
          self._input = input
          self._choice = choice
          self._port = port
@@@ -1012,6 -1030,7 +1030,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -1025,6 -1044,7 +1044,7 @@@
                  new `choice` attribute.
  
          """
+         pyoArgsAssert(self, "l", x)
          self._choice = x
          if type(x[0]) != ListType:
              [obj.setChoice(self._choice) for i, obj in enumerate(self._base_objs)]
@@@ -1041,6 -1061,7 +1061,7 @@@
                  new `port` attribute.
  
          """
+         pyoArgsAssert(self, "n", x)
          self._port = x
          x, lmax = convertArgsToLists(x)
          [obj.setPort(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1110,15 -1131,8 +1131,8 @@@ class TrigFunc(PyoObject)
  
      """
      def __init__(self, input, function, arg=None):
+         pyoArgsAssert(self, "oc", input, function)
          PyoObject.__init__(self)
-         if type(function) == ListType or type(function) == TupleType:
-             if not callable(function[0]):
-                 print >> sys.stderr, 'TypeError: "function" argument of %s must be callable.\n' % self.__class__.__name__
-                 exit()
-         else:
-             if not callable(function):
-                 print >> sys.stderr, 'TypeError: "function" argument of %s must be callable.\n' % self.__class__.__name__
-                 exit()
          self._input = input
          self._function = getWeakMethodRef(function)
          self._arg = arg
@@@ -1147,6 -1161,7 +1161,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -1160,6 -1175,7 +1175,10 @@@
                  new `function` attribute.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "c", x)
++>>>>>>> upstream/0.7.6
          self._function = getWeakMethodRef(x)
          x, lmax = convertArgsToLists(x)
          [obj.setFunction(WeakMethod(wrap(x,i))) for i, obj in enumerate(self._base_objs)]
@@@ -1240,6 -1256,7 +1259,7 @@@ class TrigEnv(PyoObject)
  
      """
      def __init__(self, input, table, dur=1, interp=2, mul=1, add=0):
+         pyoArgsAssert(self, "otOiOO", input, table, dur, interp, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._table = table
@@@ -1262,6 -1279,7 +1282,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -1275,6 -1293,7 +1296,7 @@@
                  new `table` attribute.
  
          """
+         pyoArgsAssert(self, "t", x)
          self._table = x
          x, lmax = convertArgsToLists(x)
          [obj.setTable(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1289,6 -1308,7 +1311,7 @@@
                  new `dur` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._dur = x
          x, lmax = convertArgsToLists(x)
          [obj.setDur(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1303,6 -1323,7 +1326,7 @@@
                  new `interp` attribute.
  
          """
+         pyoArgsAssert(self, "i", x)
          self._interp = x
          x, lmax = convertArgsToLists(x)
          [obj.setInterp(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1376,13 -1397,8 +1400,8 @@@ class TrigLinseg(PyoObject)
  
      """
      def __init__(self, input, list, mul=1, add=0):
+         pyoArgsAssert(self, "olOO", input, list, mul, add)
          PyoObject.__init__(self, mul, add)
-         if type(list) != ListType:
-             print >> sys.stderr, 'TypeError: "list" argument of %s must be a list of tuples.\n' % self.__class__.__name__
-             exit()
-         if type(list[0]) != TupleType:
-             print >> sys.stderr, 'TypeError: "list" argument of %s must be a list of tuples.\n' % self.__class__.__name__
-             exit()
          self._input = input
          self._list = list
          self._in_fader = InputFader(input)
@@@ -1405,6 -1421,7 +1424,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -1418,6 -1435,7 +1438,7 @@@
                  new `list` attribute.
  
          """
+         pyoArgsAssert(self, "l", x)
          self._list = x
          [obj.setList(x) for i, obj in enumerate(self._base_objs)]
  
@@@ -1541,13 -1559,8 +1562,8 @@@ class TrigExpseg(PyoObject)
  
      """
      def __init__(self, input, list, exp=10, inverse=True, mul=1, add=0):
+         pyoArgsAssert(self, "olnbOO", input, list, exp, inverse, mul, add)
          PyoObject.__init__(self, mul, add)
-         if type(list) != ListType:
-             print >> sys.stderr, 'TypeError: "list" argument of %s must be a list of tuples.\n' % self.__class__.__name__
-             exit()
-         if type(list[0]) != TupleType:
-             print >> sys.stderr, 'TypeError: "list" argument of %s must be a list of tuples.\n' % self.__class__.__name__
-             exit()
          self._input = input
          self._list = list
          self._exp = exp
@@@ -1572,6 -1585,7 +1588,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -1585,6 -1599,7 +1602,7 @@@
                  new `list` attribute.
  
          """
+         pyoArgsAssert(self, "l", x)
          self._list = x
          [obj.setList(x) for i, obj in enumerate(self._base_objs)]
  
@@@ -1598,6 -1613,7 +1616,7 @@@
                  new `exp` attribute.
  
          """
+         pyoArgsAssert(self, "n", x)
          self._exp = x
          x, lmax = convertArgsToLists(x)
          [obj.setExp(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1612,6 -1628,7 +1631,7 @@@
                  new `inverse` attribute.
  
          """
+         pyoArgsAssert(self, "b", x)
          self._inverse = x
          x, lmax = convertArgsToLists(x)
          [obj.setInverse(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1801,6 -1818,7 +1821,7 @@@ class TrigXnoise(PyoObject)
  
      """
      def __init__(self, input, dist=0, x1=0.5, x2=0.5, mul=1, add=0):
+         pyoArgsAssert(self, "oOOOO", input, x1, x2, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._dist = dist
@@@ -1824,6 -1842,7 +1845,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -1853,6 -1872,7 +1875,7 @@@
                  new `x1` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._x1 = x
          x, lmax = convertArgsToLists(x)
          [obj.setX1(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1867,7 -1887,8 +1890,8 @@@
                  new `x2` attribute.
  
          """
-         self._x2= x
+         pyoArgsAssert(self, "O", x)
+         self._x2 = x
          x, lmax = convertArgsToLists(x)
          [obj.setX2(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
  
@@@ -2004,6 -2025,7 +2028,7 @@@ class TrigXnoiseMidi(PyoObject)
  
      """
      def __init__(self, input, dist=0, x1=0.5, x2=0.5, scale=0, mrange=(0,127), mul=1, add=0):
+         pyoArgsAssert(self, "oOOixOO", input, x1, x2, scale, mrange, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._dist = dist
@@@ -2029,6 -2051,7 +2054,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -2063,6 -2086,7 +2089,7 @@@
                  new `scale` attribute.
  
          """
+         pyoArgsAssert(self, "i", x)
          self._scale = x
          x, lmax = convertArgsToLists(x)
          [obj.setScale(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2079,6 -2103,7 +2106,7 @@@
                  maximum output midi range.
  
          """
+         pyoArgsAssert(self, "ii", mini, maxi)
          self._mrange = (mini, maxi)
          mini, maxi, lmax = convertArgsToLists(mini, maxi)
          [obj.setRange(wrap(mini,i), wrap(maxi,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2093,6 -2118,7 +2121,7 @@@
                  new `x1` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._x1 = x
          x, lmax = convertArgsToLists(x)
          [obj.setX1(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2107,7 -2133,8 +2136,8 @@@
                  new `x2` attribute.
  
          """
-         self._x2= x
+         pyoArgsAssert(self, "O", x)
+         self._x2 = x
          x, lmax = convertArgsToLists(x)
          [obj.setX2(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
  
@@@ -2190,6 -2217,7 +2220,7 @@@ class Counter(PyoObject)
  
      """
      def __init__(self, input, min=0, max=100, dir=0, mul=1, add=0):
+         pyoArgsAssert(self, "oiiiOO", input, min, max, dir, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._min = min
@@@ -2214,6 -2242,7 +2245,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -2227,6 -2256,7 +2259,7 @@@
                  new `min` attribute.
  
          """
+         pyoArgsAssert(self, "i", x)
          self._min = x
          x, lmax = convertArgsToLists(x)
          [obj.setMin(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2241,6 -2271,7 +2274,7 @@@
                  new `max` attribute.
  
          """
+         pyoArgsAssert(self, "i", x)
          self._max = x
          x, lmax = convertArgsToLists(x)
          [obj.setMax(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2255,6 -2286,7 +2289,7 @@@
                  new `dir` attribute.
  
          """
+         pyoArgsAssert(self, "i", x)
          self._dir = x
          x, lmax = convertArgsToLists(x)
          [obj.setDir(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2270,6 -2302,7 +2305,7 @@@
                  Value where to reset the count. Defaults to None.
  
          """
+         pyoArgsAssert(self, "i", x)
          value, lmax = convertArgsToLists(value)
          [obj.reset(wrap(value,i)) for i, obj in enumerate(self._base_objs)]
  
@@@ -2348,6 -2381,7 +2384,7 @@@ class Select(PyoObject)
  
      """
      def __init__(self, input, value=0, mul=1, add=0):
+         pyoArgsAssert(self, "oiOO", input, value, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._value = value
@@@ -2370,6 -2404,7 +2407,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -2383,6 -2418,7 +2421,7 @@@
                  new `value` attribute.
  
          """
+         pyoArgsAssert(self, "i", x)
          self._value = x
          x, lmax = convertArgsToLists(x)
          [obj.setValue(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2432,6 -2468,7 +2471,7 @@@ class Change(PyoObject)
  
      """
      def __init__(self, input, mul=1, add=0):
+         pyoArgsAssert(self, "oOO", input, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._in_fader = InputFader(input)
@@@ -2453,6 -2490,7 +2493,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -2508,6 -2546,7 +2549,7 @@@ class Thresh(PyoObject)
  
      """
      def __init__(self, input, threshold=0., dir=0, mul=1, add=0):
+         pyoArgsAssert(self, "oOiOO", input, threshold, dir, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._threshold = threshold
@@@ -2531,6 -2570,7 +2573,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -2544,6 -2584,7 +2587,7 @@@
                  new `threshold` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._threshold = x
          x, lmax = convertArgsToLists(x)
          [obj.setThreshold(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2558,6 -2599,7 +2602,7 @@@
                  new `dir` attribute.
  
          """
+         pyoArgsAssert(self, "i", x)
          self._dir = x
          x, lmax = convertArgsToLists(x)
          [obj.setDir(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2618,6 -2660,7 +2663,7 @@@ class Percent(PyoObject)
  
      """
      def __init__(self, input, percent=50., mul=1, add=0):
+         pyoArgsAssert(self, "oOOO", input, percent, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._percent = percent
@@@ -2640,6 -2683,7 +2686,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -2653,6 -2697,7 +2700,7 @@@
                  new `percent` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._percent = x
          x, lmax = convertArgsToLists(x)
          [obj.setPercent(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2711,6 -2756,7 +2759,7 @@@ class Timer(PyoObject)
  
      """
      def __init__(self, input, input2, mul=1, add=0):
+         pyoArgsAssert(self, "ooOO", input, input2, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._input2 = input2
@@@ -2731,6 -2777,7 +2780,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -2746,6 -2793,7 +2796,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input2 = x
          self._in_fader2.setInput(x, fadetime)
  
@@@ -2794,10 -2842,8 +2845,8 @@@ class Iter(PyoObject)
  
      """
      def __init__(self, input, choice, init=0., mul=1, add=0):
+         pyoArgsAssert(self, "olnOO", input, choice, init, mul, add)
          PyoObject.__init__(self, mul, add)
-         if type(choice) != ListType:
-             print >> sys.stderr, 'TypeError: "choice" argument of %s must be a list.\n' % self.__class__.__name__
-             exit()
          self._input = input
          self._choice = choice
          self._in_fader = InputFader(input)
@@@ -2821,6 -2867,7 +2870,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -2834,6 -2881,7 +2884,7 @@@
                  new `choice` attribute.
  
          """
+         pyoArgsAssert(self, "l", x)
          self._choice = x
          if type(x[0]) != ListType:
              [obj.setChoice(self._choice) for i, obj in enumerate(self._base_objs)]
@@@ -2850,6 -2898,7 +2901,7 @@@
                  Value where to reset the count. Defaults to 0.
  
          """
+         pyoArgsAssert(self, "I", x)
          [obj.reset(x) for obj in self._base_objs]
  
      @property
@@@ -2896,6 -2945,7 +2948,7 @@@ class Count(PyoObject)
  
      """
      def __init__(self, input, min=0, max=0, mul=1, add=0):
+         pyoArgsAssert(self, "oiiOO", input, min, max, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._min = min
@@@ -2916,6 -2966,7 +2969,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -2929,6 -2980,7 +2983,7 @@@
                  new `min` attribute.
  
          """
+         pyoArgsAssert(self, "i", x)
          self._min = x
          x, lmax = convertArgsToLists(x)
          [obj.setMin(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -2943,6 -2995,7 +2998,7 @@@
                  new `max` attribute.
  
          """
+         pyoArgsAssert(self, "i", x)
          self._max = x
          x, lmax = convertArgsToLists(x)
          [obj.setMax(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -3007,6 -3060,7 +3063,7 @@@ class NextTrig(PyoObject)
  
      """
      def __init__(self, input, input2, mul=1, add=0):
+         pyoArgsAssert(self, "ooOO", input, input2, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._input2 = input2
@@@ -3027,6 -3081,7 +3084,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -3042,6 -3097,7 +3100,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input2 = x
          self._in_fader2.setInput(x, fadetime)
  
@@@ -3094,6 -3150,7 +3153,7 @@@ class TrigVal(PyoObject)
  
      """
      def __init__(self, input, value=0., init=0., mul=1, add=0):
+         pyoArgsAssert(self, "oOnOO", input, value, init, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._value = value
@@@ -3113,6 -3170,7 +3173,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -3126,6 -3184,7 +3187,7 @@@
                  new `value` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._value = x
          x, lmax = convertArgsToLists(x)
          [obj.setValue(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -3209,6 -3268,7 +3271,10 @@@ class Euclide(PyoObject)
  
      """
      def __init__(self, time=.125, taps=16, onsets=10, poly=1):
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "OiiI", time, taps, onsets, poly)
++>>>>>>> upstream/0.7.6
          PyoObject.__init__(self)
          self._tap_dummy = []
          self._amp_dummy = []
@@@ -3305,6 -3365,7 +3371,10 @@@
                  New `time` attribute.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "O", x)
++>>>>>>> upstream/0.7.6
          self._time = x
          x, lmax = convertArgsToLists(x)
          [obj.setTime(wrap(x,i)) for i, obj in enumerate(self._base_players)]
@@@ -3319,6 -3380,7 +3389,10 @@@
                  New `taps` attribute.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "i", x)
++>>>>>>> upstream/0.7.6
          self._taps = x
          x, onsets, lmax = convertArgsToLists(x, self._onsets)
          for i in range(len(self._base_players)):
@@@ -3336,6 -3398,7 +3410,10 @@@
                  New `onsets` attribute.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "i", x)
++>>>>>>> upstream/0.7.6
          self._onsets = x
          x, taps, lmax = convertArgsToLists(x, self._taps)
          for i in range(len(self._base_players)):
@@@ -3466,6 -3529,7 +3544,10 @@@ class TrigBurst(PyoObject)
  
      """
      def __init__(self, input, time=.25, count=10, expand=1.0, ampfade=1.0, poly=1):
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "oOinnI", input, time, count, expand, ampfade, poly)
++>>>>>>> upstream/0.7.6
          PyoObject.__init__(self)
          self._tap_dummy = []
          self._amp_dummy = []
@@@ -3545,6 -3609,7 +3627,10 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "oN", x, fadetime)
++>>>>>>> upstream/0.7.6
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -3558,6 -3623,7 +3644,10 @@@
                  New `time` attribute.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "O", x)
++>>>>>>> upstream/0.7.6
          self._time = x
          x, lmax = convertArgsToLists(x)
          [obj.setTime(wrap(x,i)) for i, obj in enumerate(self._base_players)]
@@@ -3572,6 -3638,7 +3662,10 @@@
                  New `count` attribute.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "i", x)
++>>>>>>> upstream/0.7.6
          self._count = x
          x, lmax = convertArgsToLists(x)
          [obj.setCount(wrap(x,i)) for i, obj in enumerate(self._base_players)]
@@@ -3582,10 -3649,11 +3676,18 @@@
  
          :Args:
  
++<<<<<<< HEAD
 +            x : int
 +                New `expand` attribute.
 +
 +        """
++=======
+             x : float
+                 New `expand` attribute.
+ 
+         """
+         pyoArgsAssert(self, "n", x)
++>>>>>>> upstream/0.7.6
          self._expand = x
          x, lmax = convertArgsToLists(x)
          [obj.setExpand(wrap(x,i)) for i, obj in enumerate(self._base_players)]
@@@ -3596,10 -3664,11 +3698,18 @@@
  
          :Args:
  
++<<<<<<< HEAD
 +            x : int
 +                New `ampfade` attribute.
 +
 +        """
++=======
+             x : float
+                 New `ampfade` attribute.
+ 
+         """
+         pyoArgsAssert(self, "n", x)
++>>>>>>> upstream/0.7.6
          self._ampfade = x
          x, lmax = convertArgsToLists(x)
          [obj.setAmpfade(wrap(x,i)) for i, obj in enumerate(self._base_players)]
diff --combined pyolib/utils.py
index 6683ce7,9cfc841..34108a2
--- a/pyolib/utils.py
+++ b/pyolib/utils.py
@@@ -98,6 -98,7 +98,7 @@@ class Print(PyoObject)
  
      """
      def __init__(self, input, method=0, interval=0.25, message=""):
+         pyoArgsAssert(self, "oins", input, method, interval, message)
          PyoObject.__init__(self)
          self._input = input
          self._method = method
@@@ -119,6 -120,7 +120,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -132,6 -134,7 +134,7 @@@
                  New `method` attribute.
  
          """
+         pyoArgsAssert(self, "i", x)
          self._method = x
          x, lmax = convertArgsToLists(x)
          [obj.setMethod(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -146,6 -149,7 +149,7 @@@
                  New `interval` attribute.
  
          """
+         pyoArgsAssert(self, "n", x)
          self._interval = x
          x, lmax = convertArgsToLists(x)
          [obj.setInterval(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -160,6 -164,7 +164,7 @@@
                  New `message` attribute.
  
          """
+         pyoArgsAssert(self, "s", x)
          self._message = x
          x, lmax = convertArgsToLists(x)
          [obj.setMessage(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -236,10 -241,8 +241,8 @@@ class Snap(PyoObject)
  
      """
      def __init__(self, input, choice, scale=0, mul=1, add=0):
+         pyoArgsAssert(self, "oliOO", input, choice, scale, mul, add)
          PyoObject.__init__(self, mul, add)
-         if type(choice) != ListType:
-             print >> sys.stderr, 'TypeError: "choice" argument of %s must be a list.\n' % self.__class__.__name__
-             exit()
          self._input = input
          self._choice = choice
          self._scale = scale
@@@ -264,6 -267,7 +267,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -277,6 -281,7 +281,7 @@@
                  new `choice` attribute.
  
          """
+         pyoArgsAssert(self, "l", x)
          self._choice = x
          [obj.setChoice(x) for i, obj in enumerate(self._base_objs)]
  
@@@ -295,6 -300,7 +300,7 @@@
                  new `scale` attribute.
  
          """
+         pyoArgsAssert(self, "i", x)
          self._scale = x
          x, lmax = convertArgsToLists(x)
          [obj.setScale(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -346,6 -352,7 +352,7 @@@ class Interp(PyoObject)
  
      """
      def __init__(self, input, input2, interp=0.5, mul=1, add=0):
+         pyoArgsAssert(self, "ooOOO", input, input2, interp, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._input2 = input2
@@@ -367,6 -374,7 +374,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -382,6 -390,7 +390,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input2 = x
          self._in_fader2.setInput(x, fadetime)
  
@@@ -395,6 -404,7 +404,7 @@@
                  New `interp` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._interp = x
          x, lmax = convertArgsToLists(x)
          [obj.setInterp(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -452,6 -462,7 +462,7 @@@ class SampHold(PyoObject)
  
      """
      def __init__(self, input, controlsig, value=0.0, mul=1, add=0):
+         pyoArgsAssert(self, "ooOOO", input, controlsig, value, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._controlsig = controlsig
@@@ -473,6 -484,7 +484,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -488,6 -500,7 +500,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._controlsig = x
          self._in_fader2.setInput(x, fadetime)
  
@@@ -501,6 -514,7 +514,7 @@@
                  New `value` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._value = x
          x, lmax = convertArgsToLists(x)
          [obj.setValue(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -601,6 -615,7 +615,7 @@@ class Record(PyoObject)
  
      """
      def __init__(self, input, filename, chnls=2, fileformat=0, sampletype=0, buffering=4):
+         pyoArgsAssert(self, "oSIIII", input, filename, chnls, fileformat, sampletype, buffering)
          PyoObject.__init__(self)
          self._input = input
          self._in_fader = InputFader(input)
@@@ -630,6 -645,7 +645,10 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
++<<<<<<< HEAD
++=======
+         pyoArgsAssert(self, "oN", x, fadetime)
++>>>>>>> upstream/0.7.6
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -664,6 -680,7 +683,7 @@@ class Denorm(PyoObject)
  
      """
      def __init__(self, input, mul=1, add=0):
+         pyoArgsAssert(self, "oOO", input, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._in_fader = InputFader(input)
@@@ -682,6 -699,7 +702,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -759,6 -777,7 +780,7 @@@ class ControlRec(PyoObject)
  
      """
      def __init__(self, input, filename, rate=1000, dur=0.0):
+         pyoArgsAssert(self, "oSIN", input, filename, rate, dur)
          PyoObject.__init__(self)
          self._input = input
          self._filename = filename
@@@ -839,6 -858,7 +861,7 @@@ class ControlRead(PyoObject)
  
      """
      def __init__(self, filename, rate=1000, loop=False, interp=2, mul=1, add=0):
+         pyoArgsAssert(self, "SIBIOO", filename, rate, loop, interp, mul, add)
          PyoObject.__init__(self, mul, add)
          self._filename = filename
          self._path, self._name = os.path.split(filename)
@@@ -869,6 -889,7 +892,7 @@@
                  new `rate` attribute.
  
          """
+         pyoArgsAssert(self, "i", x)
          self._rate = x
          x, lmax = convertArgsToLists(x)
          [obj.setRate(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -883,6 -904,7 +907,7 @@@
                  new `loop` attribute.
  
          """
+         pyoArgsAssert(self, "b", x)
          self._loop = x
          x, lmax = convertArgsToLists(x)
          [obj.setLoop(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -897,6 -919,7 +922,7 @@@
                  new `interp` attribute.
  
          """
+         pyoArgsAssert(self, "i", x)
          self._interp = x
          x, lmax = convertArgsToLists(x)
          [obj.setInterp(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -976,6 -999,7 +1002,7 @@@ class NoteinRec(PyoObject)
  
      """
      def __init__(self, input, filename):
+         pyoArgsAssert(self, "oS", input, filename)
          PyoObject.__init__(self)
          self._input = input
          self._filename = filename
@@@ -1045,6 -1069,7 +1072,7 @@@ class NoteinRead(PyoObject)
  
      """
      def __init__(self, filename, loop=False, mul=1, add=0):
+         pyoArgsAssert(self, "SBOO", filename, loop, mul, add)
          PyoObject.__init__(self, mul, add)
          self._pitch_dummy = []
          self._velocity_dummy = []
@@@ -1119,6 -1144,7 +1147,7 @@@
                  new `loop` attribute.
  
          """
+         pyoArgsAssert(self, "b", x)
          self._loop = x
          x, lmax = convertArgsToLists(x)
          [obj.setLoop(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1155,6 -1181,7 +1184,7 @@@ class DBToA(PyoObject)
      """
  
      def __init__(self, input, mul=1, add=0):
+         pyoArgsAssert(self, "oOO", input, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._in_fader = InputFader(input)
@@@ -1173,6 -1200,7 +1203,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -1209,6 -1237,7 +1240,7 @@@ class AToDB(PyoObject)
      """
  
      def __init__(self, input, mul=1, add=0):
+         pyoArgsAssert(self, "oOO", input, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._in_fader = InputFader(input)
@@@ -1227,6 -1256,7 +1259,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -1274,6 -1304,7 +1307,7 @@@ class Scale(PyoObject)
  
      """
      def __init__(self, input, inmin=0, inmax=1, outmin=0, outmax=1, exp=1, mul=1, add=0):
+         pyoArgsAssert(self, "oOOOOnOO", input, inmin, inmax, outmin, outmax, exp, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._inmin = inmin
@@@ -1297,6 -1328,7 +1331,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -1310,6 -1342,7 +1345,7 @@@
                  New `inmin` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._inmin = x
          x, lmax = convertArgsToLists(x)
          [obj.setInMin(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1324,6 -1357,7 +1360,7 @@@
                  New `inmax` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._inmax = x
          x, lmax = convertArgsToLists(x)
          [obj.setInMax(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1338,6 -1372,7 +1375,7 @@@
                  New `outmin` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._outmin = x
          x, lmax = convertArgsToLists(x)
          [obj.setOutMin(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1352,6 -1387,7 +1390,7 @@@
                  New `outmax` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._outmax = x
          x, lmax = convertArgsToLists(x)
          [obj.setOutMax(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1366,6 -1402,7 +1405,7 @@@
                  New `exp` attribute.
  
          """
+         pyoArgsAssert(self, "n", x)
          self._exp = x
          x, lmax = convertArgsToLists(x)
          [obj.setExp(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1444,6 -1481,7 +1484,7 @@@ class CentsToTranspo(PyoObject)
      """
  
      def __init__(self, input, mul=1, add=0):
+         pyoArgsAssert(self, "oOO", input, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._in_fader = InputFader(input)
@@@ -1462,6 -1500,7 +1503,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -1496,6 -1535,7 +1538,7 @@@ class TranspoToCents(PyoObject)
      """
  
      def __init__(self, input, mul=1, add=0):
+         pyoArgsAssert(self, "oOO", input, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._in_fader = InputFader(input)
@@@ -1514,6 -1554,7 +1557,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -1548,6 -1589,7 +1592,7 @@@ class MToF(PyoObject)
      """
  
      def __init__(self, input, mul=1, add=0):
+         pyoArgsAssert(self, "oOO", input, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._in_fader = InputFader(input)
@@@ -1566,6 -1608,7 +1611,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -1603,6 -1646,7 +1649,7 @@@ class FToM(PyoObject)
      """
  
      def __init__(self, input, mul=1, add=0):
+         pyoArgsAssert(self, "oOO", input, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._in_fader = InputFader(input)
@@@ -1621,12 -1665,13 +1668,71 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
      @property
      def input(self):
          """PyoObject. Input signal to process."""
++<<<<<<< HEAD
++        return self._input
++    @input.setter
++    def input(self, x): self.setInput(x)
++
++class FToM(PyoObject):
++    """
++    Returns the midi note equivalent to a frequency in Hz.
++
++    Returns the midi note equivalent to a frequency in Hz,
++    440.0 (hz) = 69.
++
++    :Parent: :py:class:`PyoObject`
++
++    :Args:
++
++        input : PyoObject
++            Input signal as frequency in Hz.
++
++    >>> s = Server().boot()
++    >>> s.start()
++    >>> lfo = Sine([0.2,0.25], mul=300, add=600)
++    >>> src = SineLoop(freq=lfo, feedback=0.05)
++    >>> hz = Yin(src, minfreq=100, maxfreq=1000, cutoff=500)
++    >>> mid = FToM(hz)
++    >>> fr = Snap(mid, choice=[0,2,5,7,9], scale=1)
++    >>> freq = Port(fr, risetime=0.01, falltime=0.01)
++    >>> syn = SineLoop(freq, feedback=0.05, mul=0.3).out()
++
++    """
++
++    def __init__(self, input, mul=1, add=0):
++        PyoObject.__init__(self, mul, add)
++        self._input = input
++        self._in_fader = InputFader(input)
++        in_fader, mul, add, lmax = convertArgsToLists(self._in_fader, mul, add)
++        self._base_objs = [FToM_base(wrap(in_fader,i), wrap(mul,i), wrap(add,i)) for i in range(lmax)]
++
++    def setInput(self, x, fadetime=0.05):
++        """
++        Replace the `input` attribute.
++
++        :Args:
++
++            x : PyoObject
++                New signal to process.
++            fadetime : float, optional
++                Crossfade time between old and new input. Default to 0.05.
++
++        """
++        self._input = x
++        self._in_fader.setInput(x, fadetime)
++
++    @property
++    def input(self):
++        """PyoObject. Input signal to process."""
++=======
++>>>>>>> upstream/0.7.6
          return self._input
      @input.setter
      def input(self, x): self.setInput(x)
@@@ -1661,6 -1706,7 +1767,7 @@@ class MToT(PyoObject)
      """
  
      def __init__(self, input, centralkey=60.0, mul=1, add=0):
+         pyoArgsAssert(self, "onOO", input, centralkey, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._centralkey = centralkey
@@@ -1680,6 -1726,7 +1787,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -1693,6 -1740,7 +1801,7 @@@
                  New `centralkey` attribute.
  
          """
+         pyoArgsAssert(self, "n", x)
          self._centralkey = x
          x, lmax = convertArgsToLists(x)
          [obj.setCentralKey(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1737,6 -1785,7 +1846,7 @@@ class Between(PyoObject)
  
      """
      def __init__(self, input, min=-1.0, max=1.0, mul=1, add=0):
+         pyoArgsAssert(self, "oOOOO", input, min, max, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._min = min
@@@ -1757,6 -1806,7 +1867,7 @@@
                  Crossfade time between old and new input. Defaults to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -1770,6 -1820,7 +1881,7 @@@
                  New `min` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._min = x
          x, lmax = convertArgsToLists(x)
          [obj.setMin(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1784,6 -1835,7 +1896,7 @@@
                  New `max` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._max = x
          x, lmax = convertArgsToLists(x)
          [obj.setMax(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
@@@ -1843,6 -1895,7 +1956,7 @@@ class TrackHold(PyoObject)
  
      """
      def __init__(self, input, controlsig, value=0.0, mul=1, add=0):
+         pyoArgsAssert(self, "ooOOO", input, controlsig, value, mul, add)
          PyoObject.__init__(self, mul, add)
          self._input = input
          self._controlsig = controlsig
@@@ -1864,6 -1917,7 +1978,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._input = x
          self._in_fader.setInput(x, fadetime)
  
@@@ -1879,6 -1933,7 +1994,7 @@@
                  Crossfade time between old and new input. Default to 0.05.
  
          """
+         pyoArgsAssert(self, "oN", x, fadetime)
          self._controlsig = x
          self._in_fader2.setInput(x, fadetime)
  
@@@ -1892,6 -1947,7 +2008,7 @@@
                  New `value` attribute.
  
          """
+         pyoArgsAssert(self, "O", x)
          self._value = x
          x, lmax = convertArgsToLists(x)
          [obj.setValue(wrap(x,i)) for i, obj in enumerate(self._base_objs)]
diff --combined scripts/release_doc_src.sh
index 128bf69,0c9caa2..b8adf89
--- a/scripts/release_doc_src.sh
+++ b/scripts/release_doc_src.sh
@@@ -6,7 -6,7 +6,11 @@@
  # 3. Execute from pyo folder : ./scripts/release_doc_src.sh
  #
  
++<<<<<<< HEAD
 +version=0.7.5
++=======
+ version=0.7.6
++>>>>>>> upstream/0.7.6
  replace=XXX
  
  doc_rep=pyo_XXX-doc
diff --combined scripts/win/windows-7-build-routine.txt
index f2b08c2,84e74ec..ee7fac6
--- a/scripts/win/windows-7-build-routine.txt
+++ b/scripts/win/windows-7-build-routine.txt
@@@ -1,16 -1,17 +1,31 @@@
  === STEP 1 ===
++<<<<<<< HEAD
 +--- Install Python (2.6 and 2.7)
 +
 +=== STEP 2 ===
++=======
+ --- Install Python 2.6 and 2.7.10 and WxPython 3.0.2.0 for each version
+ 
+ === STEP 2 (should be git soon) ===
++>>>>>>> upstream/0.7.6
  --- Install Slick SVN 1.8.10
  http://www.sliksvn.com
  
  === STEP 3 ===
++<<<<<<< HEAD
 +--- Install scons 2.3.2 in the Python site-packages:
 +http://www.scons.org/download.php
 +
 +=== STEP 4 ===
 +--- Install MinGW (minimalist) from sourceforge
++=======
+ --- Install scons 2.3.5 in the Python site-packages:
+ http://www.scons.org/download.php
+ 
+ === STEP 4 ===
+ --- Install MinGW (minimalist GNU for Windows) from sourceforge
+ --- Add ";C:\MinGW\bin;C:\MinGW\mingw32\bin" to the PATH variable
++>>>>>>> upstream/0.7.6
  
  === STEP 5 ===
  --- Install pthreads (just copy files from ftp):
@@@ -25,6 -26,9 +40,12 @@@ Do not build from sources
  === STEP 7 ===
  --- Update liblo tag 0.26 from the tarball at http://liblo.sourceforge.net (not SVN!), 
  copy build/config-msvc.h --> src/config.h,
++<<<<<<< HEAD
++=======
+ 
+ If there is a conflict about struct timespec, remove the definition in pthread.h.
+ 
++>>>>>>> upstream/0.7.6
  and build with this SConstruct:
  
  # S C O N S T R U C T   F O R   L I B L O . D L L
@@@ -81,7 -85,7 +102,11 @@@ Try the trunk version first, if that do
  --- Copy ASIOSDK to portaudio/src/hostapi/asio
  
  --- Check the pa_win_hostapis.c file and make sure that it is configured to build 
++<<<<<<< HEAD
 +the DirectSound, WMME, and ASIO drivers:
++=======
+ the DirectSound, WMME, and ASIO drivers. (nothing to do here)
++>>>>>>> upstream/0.7.6
  
  --- Need to removed "volatile" from function definitions in MinGW/include/winbase.h
  
@@@ -120,7 -124,7 +145,11 @@@ commonEnvironment.Append(CPPPATH = ["."
  "C:/portaudio/src/hostapi/asio/ASIOSDK/host",
  "C:/portaudio/src/hostapi/asio/ASIOSDK/host/pc",
  "C:/portaudio/src/hostapi/asio/ASIOSDK/common",
++<<<<<<< HEAD
 +"C:/Program Files/Microsoft DirectX SDK (April 2007)/Include"])
++=======
+ "C:/Program Files (x86)/Microsoft DirectX SDK (April 2007)/Include"])
++>>>>>>> upstream/0.7.6
  
  commonEnvironment.Append(LIBS=Split('''
  setupapi
@@@ -175,7 -179,7 +204,11 @@@ portAudio = commonEnvironment.SharedLib
  ##########################################################################
  
  === STEP 11 ===
++<<<<<<< HEAD
 +4 --- Update the PortMidi library http://portmedia.sourceforge.net from SVN and build it with this SConstruct:
++=======
+ --- Update the PortMidi library http://portmedia.sourceforge.net from SVN and build it with this SConstruct:
++>>>>>>> upstream/0.7.6
  
  '''
  MinGW SConstruct for PortMidi
@@@ -259,8 -263,6 +292,11 @@@ Depends(test, portmidi
  [build]
  compiler = mingw32
  
++<<<<<<< HEAD
 +*** For Python 2.5, comment line 428 to 434 in Python25/include/pyconfig.py
 +
++=======
++>>>>>>> upstream/0.7.6
  === STEP 13 ===
  --- Download pyo sources from svn and build it with:
  
diff --combined setup.py
index 2e5c607,2f2c75f..f9fcdd9
--- a/setup.py
+++ b/setup.py
@@@ -23,7 -23,7 +23,11 @@@ from distutils.core import setup, Exten
  import os, sys, getopt
  import time
  
++<<<<<<< HEAD
 +pyo_version = "0.7.5"
++=======
+ pyo_version = "0.7.6"
++>>>>>>> upstream/0.7.6
  build_osx_with_jack_support = False
  compile_externals = False
  
@@@ -88,10 -88,10 +92,10 @@@ else
  
  # Platform-specific build settings for the pyo extension(s).  
  if sys.platform == "win32":
-     include_dirs = ['C:\portaudio\include', 'C:\Program Files\Mega-Nerd\libsndfile\include',
+     include_dirs = ['C:\portaudio\include', 'C:\Program Files (x86)\Mega-Nerd\libsndfile\include',
                      'C:\portmidi\pm_common', 'C:\liblo', 'C:\pthreads\include', 'include',
                      'C:\portmidi\porttime']
-     library_dirs = ['C:\portaudio', 'C:/Program Files/Mega-Nerd/libsndfile/bin', 'C:\portmidi', 'C:\liblo', 'C:\pthreads\lib']
+     library_dirs = ['C:\portaudio', 'C:/Program Files (x86)/Mega-Nerd/libsndfile/bin', 'C:\portmidi', 'C:\liblo', 'C:\pthreads\lib']
      libraries = ['portaudio', 'portmidi', 'porttime', 'libsndfile-1', 'lo', 'pthreadVC2']
  else:
      tsrt = time.strftime('"%d %b %Y %H:%M:%S"', time.localtime())
diff --combined src/engine/pyomodule.c
index a7a2f89,88b37e4..3f6199c
--- a/src/engine/pyomodule.c
+++ b/src/engine/pyomodule.c
@@@ -2550,6 -2550,7 +2550,10 @@@ init_pyo64(void
      module_add_object(m, "MainParticle_base", &MainParticleType);
      module_add_object(m, "Particle_base", &ParticleType);
      module_add_object(m, "AtanTable_base", &AtanTableType);
++<<<<<<< HEAD
++=======
+     module_add_object(m, "RawMidi_base", &RawMidiType);
++>>>>>>> upstream/0.7.6
  
      PyModule_AddStringConstant(m, "PYO_VERSION", PYO_VERSION);
  #ifdef COMPILE_EXTERNALS
diff --combined src/objects/analysismodule.c
index a9cfe9a,1ad618b..f495c95
--- a/src/objects/analysismodule.c
+++ b/src/objects/analysismodule.c
@@@ -1698,7 -1698,10 +1698,14 @@@ Centroid_process_i(Centroid *self) 
                  sum1 += tmp * i;
                  sum2 += tmp;
              }
++<<<<<<< HEAD
 +            tmp = sum1 / sum2;
++=======
+             if (sum2 < 0.000000001)
+                 tmp = 0.0;
+             else
+                 tmp = sum1 / sum2;
++>>>>>>> upstream/0.7.6
              self->centroid += tmp * self->sr / self->size;
              self->centroid *= 0.5;
              for (i=0; i<self->hsize; i++) {
diff --combined src/objects/midimodule.c
index 3f20b29,0bf5a3d..fa09ec7
--- a/src/objects/midimodule.c
+++ b/src/objects/midimodule.c
@@@ -2542,6 -2542,6 +2542,264 @@@ Notein_new,                 /* tp_new *
  };
  
  /* NoteinTrig trig streamer */
++<<<<<<< HEAD
++typedef struct {
++    pyo_audio_HEAD
++    MidiNote *handler;
++    int modebuffer[2];
++    int voice;
++    int mode; /* 0 = noteon, 1 = noteoff */
++} NoteinTrig;
++
++static void NoteinTrig_postprocessing_ii(NoteinTrig *self) { POST_PROCESSING_II };
++static void NoteinTrig_postprocessing_ai(NoteinTrig *self) { POST_PROCESSING_AI };
++static void NoteinTrig_postprocessing_ia(NoteinTrig *self) { POST_PROCESSING_IA };
++static void NoteinTrig_postprocessing_aa(NoteinTrig *self) { POST_PROCESSING_AA };
++static void NoteinTrig_postprocessing_ireva(NoteinTrig *self) { POST_PROCESSING_IREVA };
++static void NoteinTrig_postprocessing_areva(NoteinTrig *self) { POST_PROCESSING_AREVA };
++static void NoteinTrig_postprocessing_revai(NoteinTrig *self) { POST_PROCESSING_REVAI };
++static void NoteinTrig_postprocessing_revaa(NoteinTrig *self) { POST_PROCESSING_REVAA };
++static void NoteinTrig_postprocessing_revareva(NoteinTrig *self) { POST_PROCESSING_REVAREVA };
++
++static void
++NoteinTrig_setProcMode(NoteinTrig *self)
++{
++    int muladdmode;
++    muladdmode = self->modebuffer[0] + self->modebuffer[1] * 10;
++
++	switch (muladdmode) {
++        case 0:
++            self->muladd_func_ptr = NoteinTrig_postprocessing_ii;
++            break;
++        case 1:
++            self->muladd_func_ptr = NoteinTrig_postprocessing_ai;
++            break;
++        case 2:
++            self->muladd_func_ptr = NoteinTrig_postprocessing_revai;
++            break;
++        case 10:
++            self->muladd_func_ptr = NoteinTrig_postprocessing_ia;
++            break;
++        case 11:
++            self->muladd_func_ptr = NoteinTrig_postprocessing_aa;
++            break;
++        case 12:
++            self->muladd_func_ptr = NoteinTrig_postprocessing_revaa;
++            break;
++        case 20:
++            self->muladd_func_ptr = NoteinTrig_postprocessing_ireva;
++            break;
++        case 21:
++            self->muladd_func_ptr = NoteinTrig_postprocessing_areva;
++            break;
++        case 22:
++            self->muladd_func_ptr = NoteinTrig_postprocessing_revareva;
++            break;
++    }
++}
++
++static void
++NoteinTrig_compute_next_data_frame(NoteinTrig *self)
++{
++    int i;
++    MYFLT *tmp = MidiNote_get_trigger_buffer(self->handler);
++
++    for (i=0; i<self->bufsize; i++) {
++        self->data[i] = tmp[self->bufsize*(self->voice*2+self->mode)+i];
++    }
++    (*self->muladd_func_ptr)(self);
++}
++
++static int
++NoteinTrig_traverse(NoteinTrig *self, visitproc visit, void *arg)
++{
++    pyo_VISIT
++    Py_VISIT(self->handler);
++    return 0;
++}
++
++static int
++NoteinTrig_clear(NoteinTrig *self)
++{
++    pyo_CLEAR
++    Py_CLEAR(self->handler);
++    return 0;
++}
++
++static void
++NoteinTrig_dealloc(NoteinTrig* self)
++{
++    pyo_DEALLOC
++    NoteinTrig_clear(self);
++    self->ob_type->tp_free((PyObject*)self);
++}
++
++static PyObject *
++NoteinTrig_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
++{
++    int i;
++    PyObject *handlertmp=NULL, *multmp=NULL, *addtmp=NULL;
++    NoteinTrig *self;
++    self = (NoteinTrig *)type->tp_alloc(type, 0);
++
++    self->voice = 0;
++    self->mode = 0;
++    self->modebuffer[0] = 0;
++    self->modebuffer[1] = 0;
++
++    INIT_OBJECT_COMMON
++    Stream_setFunctionPtr(self->stream, NoteinTrig_compute_next_data_frame);
++    self->mode_func_ptr = NoteinTrig_setProcMode;
++
++    static char *kwlist[] = {"handler", "voice", "mode", "mul", "add", NULL};
++
++    if (! PyArg_ParseTupleAndKeywords(args, kwds, "O|iiOO", kwlist, &handlertmp, &self->voice, &self->mode, &multmp, &addtmp))
++        Py_RETURN_NONE;
++
++    Py_XDECREF(self->handler);
++    Py_INCREF(handlertmp);
++    self->handler = (MidiNote *)handlertmp;
++
++    if (multmp) {
++        PyObject_CallMethod((PyObject *)self, "setMul", "O", multmp);
++    }
++
++    if (addtmp) {
++        PyObject_CallMethod((PyObject *)self, "setAdd", "O", addtmp);
++    }
++
++    PyObject_CallMethod(self->server, "addStream", "O", self->stream);
++
++    (*self->mode_func_ptr)(self);
++
++    return (PyObject *)self;
++}
++
++static PyObject * NoteinTrig_getServer(NoteinTrig* self) { GET_SERVER };
++static PyObject * NoteinTrig_getStream(NoteinTrig* self) { GET_STREAM };
++static PyObject * NoteinTrig_setMul(NoteinTrig *self, PyObject *arg) { SET_MUL };
++static PyObject * NoteinTrig_setAdd(NoteinTrig *self, PyObject *arg) { SET_ADD };
++static PyObject * NoteinTrig_setSub(NoteinTrig *self, PyObject *arg) { SET_SUB };
++static PyObject * NoteinTrig_setDiv(NoteinTrig *self, PyObject *arg) { SET_DIV };
++
++static PyObject * NoteinTrig_play(NoteinTrig *self, PyObject *args, PyObject *kwds) { PLAY };
++static PyObject * NoteinTrig_stop(NoteinTrig *self) { STOP };
++
++static PyObject * NoteinTrig_multiply(NoteinTrig *self, PyObject *arg) { MULTIPLY };
++static PyObject * NoteinTrig_inplace_multiply(NoteinTrig *self, PyObject *arg) { INPLACE_MULTIPLY };
++static PyObject * NoteinTrig_add(NoteinTrig *self, PyObject *arg) { ADD };
++static PyObject * NoteinTrig_inplace_add(NoteinTrig *self, PyObject *arg) { INPLACE_ADD };
++static PyObject * NoteinTrig_sub(NoteinTrig *self, PyObject *arg) { SUB };
++static PyObject * NoteinTrig_inplace_sub(NoteinTrig *self, PyObject *arg) { INPLACE_SUB };
++static PyObject * NoteinTrig_div(NoteinTrig *self, PyObject *arg) { DIV };
++static PyObject * NoteinTrig_inplace_div(NoteinTrig *self, PyObject *arg) { INPLACE_DIV };
++
++static PyMemberDef NoteinTrig_members[] = {
++{"server", T_OBJECT_EX, offsetof(NoteinTrig, server), 0, "Pyo server."},
++{"stream", T_OBJECT_EX, offsetof(NoteinTrig, stream), 0, "Stream object."},
++{"mul", T_OBJECT_EX, offsetof(NoteinTrig, mul), 0, "Mul factor."},
++{"add", T_OBJECT_EX, offsetof(NoteinTrig, add), 0, "Add factor."},
++{NULL}  /* Sentinel */
++};
++
++static PyMethodDef NoteinTrig_methods[] = {
++{"getServer", (PyCFunction)NoteinTrig_getServer, METH_NOARGS, "Returns server object."},
++{"_getStream", (PyCFunction)NoteinTrig_getStream, METH_NOARGS, "Returns stream object."},
++{"play", (PyCFunction)NoteinTrig_play, METH_VARARGS|METH_KEYWORDS, "Starts computing without sending sound to soundcard."},
++{"stop", (PyCFunction)NoteinTrig_stop, METH_NOARGS, "Stops computing."},
++{"setMul", (PyCFunction)NoteinTrig_setMul, METH_O, "Sets NoteinTrig mul factor."},
++{"setAdd", (PyCFunction)NoteinTrig_setAdd, METH_O, "Sets NoteinTrig add factor."},
++{"setSub", (PyCFunction)NoteinTrig_setSub, METH_O, "Sets inverse add factor."},
++{"setDiv", (PyCFunction)NoteinTrig_setDiv, METH_O, "Sets inverse mul factor."},
++{NULL}  /* Sentinel */
++};
++
++static PyNumberMethods NoteinTrig_as_number = {
++(binaryfunc)NoteinTrig_add,                      /*nb_add*/
++(binaryfunc)NoteinTrig_sub,                 /*nb_subtract*/
++(binaryfunc)NoteinTrig_multiply,                 /*nb_multiply*/
++(binaryfunc)NoteinTrig_div,                   /*nb_divide*/
++0,                /*nb_remainder*/
++0,                   /*nb_divmod*/
++0,                   /*nb_power*/
++0,                  /*nb_neg*/
++0,                /*nb_pos*/
++0,                  /*(unaryfunc)array_abs,*/
++0,                    /*nb_nonzero*/
++0,                    /*nb_invert*/
++0,               /*nb_lshift*/
++0,              /*nb_rshift*/
++0,              /*nb_and*/
++0,              /*nb_xor*/
++0,               /*nb_or*/
++0,                                          /*nb_coerce*/
++0,                       /*nb_int*/
++0,                      /*nb_long*/
++0,                     /*nb_float*/
++0,                       /*nb_oct*/
++0,                       /*nb_hex*/
++(binaryfunc)NoteinTrig_inplace_add,              /*inplace_add*/
++(binaryfunc)NoteinTrig_inplace_sub,         /*inplace_subtract*/
++(binaryfunc)NoteinTrig_inplace_multiply,         /*inplace_multiply*/
++(binaryfunc)NoteinTrig_inplace_div,           /*inplace_divide*/
++0,        /*inplace_remainder*/
++0,           /*inplace_power*/
++0,       /*inplace_lshift*/
++0,      /*inplace_rshift*/
++0,      /*inplace_and*/
++0,      /*inplace_xor*/
++0,       /*inplace_or*/
++0,             /*nb_floor_divide*/
++0,              /*nb_true_divide*/
++0,     /*nb_inplace_floor_divide*/
++0,      /*nb_inplace_true_divide*/
++0,                     /* nb_index */
++};
++
++PyTypeObject NoteinTrigType = {
++PyObject_HEAD_INIT(NULL)
++0,                         /*ob_size*/
++"_pyo.NoteinTrig_base",         /*tp_name*/
++sizeof(NoteinTrig),         /*tp_basicsize*/
++0,                         /*tp_itemsize*/
++(destructor)NoteinTrig_dealloc, /*tp_dealloc*/
++0,                         /*tp_print*/
++0,                         /*tp_getattr*/
++0,                         /*tp_setattr*/
++0,                         /*tp_compare*/
++0,                         /*tp_repr*/
++&NoteinTrig_as_number,             /*tp_as_number*/
++0,                         /*tp_as_sequence*/
++0,                         /*tp_as_mapping*/
++0,                         /*tp_hash */
++0,                         /*tp_call*/
++0,                         /*tp_str*/
++0,                         /*tp_getattro*/
++0,                         /*tp_setattro*/
++0,                         /*tp_as_buffer*/
++Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_CHECKTYPES,  /*tp_flags*/
++"NoteinTrig objects. Stream noteon or noteoff trigger from a Notein voice.",           /* tp_doc */
++(traverseproc)NoteinTrig_traverse,   /* tp_traverse */
++(inquiry)NoteinTrig_clear,           /* tp_clear */
++0,		               /* tp_richcompare */
++0,		               /* tp_weaklistoffset */
++0,		               /* tp_iter */
++0,		               /* tp_iternext */
++NoteinTrig_methods,             /* tp_methods */
++NoteinTrig_members,             /* tp_members */
++0,                      /* tp_getset */
++0,                         /* tp_base */
++0,                         /* tp_dict */
++0,                         /* tp_descr_get */
++0,                         /* tp_descr_set */
++0,                         /* tp_dictoffset */
++0,      /* tp_init */
++0,                         /* tp_alloc */
++NoteinTrig_new,                 /* tp_new */
++};
++
++=======
++>>>>>>> upstream/0.7.6
  typedef struct {
      pyo_audio_HEAD
      MidiNote *handler;
@@@ -3586,3 -3586,168 +3844,171 @@@ PyTypeObject MidiDelAdsrType = 
      0,                         /* tp_alloc */
      MidiDelAdsr_new,                 /* tp_new */
  };
++<<<<<<< HEAD
++=======
+ 
+ typedef struct {
+     pyo_audio_HEAD
+     PyObject *callable;
+ } RawMidi;
+ 
+ static void
+ RawMidi_setProcMode(RawMidi *self) {}
+ 
+ static void
+ RawMidi_compute_next_data_frame(RawMidi *self)
+ {
+     PmEvent *buffer;
+     int i, count, status, data1, data2;
+ 
+     buffer = Server_getMidiEventBuffer((Server *)self->server);
+     count = Server_getMidiEventCount((Server *)self->server);
+ 
+     if (count > 0) {
+         PyObject *tup;
+         for (i=count-1; i>=0; i--) {
+             status = Pm_MessageStatus(buffer[i].message);	// Temp note event holders
+             data1 = Pm_MessageData1(buffer[i].message);
+             data2 = Pm_MessageData2(buffer[i].message);
+             tup = PyTuple_New(3);
+             PyTuple_SetItem(tup, 0, PyInt_FromLong(status));
+             PyTuple_SetItem(tup, 1, PyInt_FromLong(data1));
+             PyTuple_SetItem(tup, 2, PyInt_FromLong(data2));
+             PyObject_Call((PyObject *)self->callable, tup, NULL);
+         }
+     }
+ }
+ 
+ static int
+ RawMidi_traverse(RawMidi *self, visitproc visit, void *arg)
+ {
+     pyo_VISIT
+     Py_VISIT(self->callable);
+     return 0;
+ }
+ 
+ static int
+ RawMidi_clear(RawMidi *self)
+ {
+     pyo_CLEAR
+     Py_CLEAR(self->callable);
+     return 0;
+ }
+ 
+ static void
+ RawMidi_dealloc(RawMidi* self)
+ {
+     pyo_DEALLOC
+     RawMidi_clear(self);
+     self->ob_type->tp_free((PyObject*)self);
+ }
+ 
+ static PyObject *
+ RawMidi_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+ {
+     int i;
+     PyObject *calltmp=NULL;
+     RawMidi *self;
+     self = (RawMidi *)type->tp_alloc(type, 0);
+ 
+     INIT_OBJECT_COMMON
+     Stream_setFunctionPtr(self->stream, RawMidi_compute_next_data_frame);
+     self->mode_func_ptr = RawMidi_setProcMode;
+ 
+     static char *kwlist[] = {"callable", NULL};
+ 
+     if (! PyArg_ParseTupleAndKeywords(args, kwds, "O", kwlist, &calltmp))
+         Py_RETURN_NONE;
+ 
+     if (calltmp) {
+         PyObject_CallMethod((PyObject *)self, "setFunction", "O", calltmp);
+     }
+ 
+     PyObject_CallMethod(self->server, "addStream", "O", self->stream);
+ 
+     return (PyObject *)self;
+ }
+ 
+ static PyObject * RawMidi_getServer(RawMidi* self) { GET_SERVER };
+ static PyObject * RawMidi_getStream(RawMidi* self) { GET_STREAM };
+ 
+ static PyObject * RawMidi_play(RawMidi *self, PyObject *args, PyObject *kwds) { PLAY };
+ static PyObject * RawMidi_stop(RawMidi *self) { STOP };
+ 
+ static PyObject *
+ RawMidi_setFunction(RawMidi *self, PyObject *arg)
+ {
+ 	PyObject *tmp;
+ 
+ 	if (! PyCallable_Check(arg)) {
+         PyErr_SetString(PyExc_TypeError, "The callable attribute must be a valid Python function.");
+ 		Py_INCREF(Py_None);
+ 		return Py_None;
+ 	}
+ 
+     tmp = arg;
+     Py_XDECREF(self->callable);
+     Py_INCREF(tmp);
+     self->callable = tmp;
+ 
+ 	Py_INCREF(Py_None);
+ 	return Py_None;
+ }
+ 
+ static PyMemberDef RawMidi_members[] = {
+     {"server", T_OBJECT_EX, offsetof(RawMidi, server), 0, "Pyo server."},
+     {"stream", T_OBJECT_EX, offsetof(RawMidi, stream), 0, "Stream object."},
+     {NULL}  /* Sentinel */
+ };
+ 
+ static PyMethodDef RawMidi_methods[] = {
+     {"getServer", (PyCFunction)RawMidi_getServer, METH_NOARGS, "Returns server object."},
+     {"_getStream", (PyCFunction)RawMidi_getStream, METH_NOARGS, "Returns stream object."},
+     {"play", (PyCFunction)RawMidi_play, METH_VARARGS|METH_KEYWORDS, "Starts computing without sending sound to soundcard."},
+     {"stop", (PyCFunction)RawMidi_stop, METH_NOARGS, "Stops computing."},
+     {"setFunction", (PyCFunction)RawMidi_setFunction, METH_O, "Sets the function to be called."},
+     {NULL}  /* Sentinel */
+ };
+ 
+ PyTypeObject RawMidiType = {
+     PyObject_HEAD_INIT(NULL)
+     0,                         /*ob_size*/
+     "_pyo.RawMidi_base",         /*tp_name*/
+     sizeof(RawMidi),         /*tp_basicsize*/
+     0,                         /*tp_itemsize*/
+     (destructor)RawMidi_dealloc, /*tp_dealloc*/
+     0,                         /*tp_print*/
+     0,                         /*tp_getattr*/
+     0,                         /*tp_setattr*/
+     0,                         /*tp_compare*/
+     0,                         /*tp_repr*/
+     0,             /*tp_as_number*/
+     0,                         /*tp_as_sequence*/
+     0,                         /*tp_as_mapping*/
+     0,                         /*tp_hash */
+     0,                         /*tp_call*/
+     0,                         /*tp_str*/
+     0,                         /*tp_getattro*/
+     0,                         /*tp_setattro*/
+     0,                         /*tp_as_buffer*/
+     Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_CHECKTYPES, /*tp_flags*/
+     "RawMidi objects. Calls a function with midi data as arguments.",           /* tp_doc */
+     (traverseproc)RawMidi_traverse,   /* tp_traverse */
+     (inquiry)RawMidi_clear,           /* tp_clear */
+     0,		               /* tp_richcompare */
+     0,		               /* tp_weaklistoffset */
+     0,		               /* tp_iter */
+     0,		               /* tp_iternext */
+     RawMidi_methods,             /* tp_methods */
+     RawMidi_members,             /* tp_members */
+     0,                      /* tp_getset */
+     0,                         /* tp_base */
+     0,                         /* tp_dict */
+     0,                         /* tp_descr_get */
+     0,                         /* tp_descr_set */
+     0,                         /* tp_dictoffset */
+     0,      /* tp_init */
+     0,                         /* tp_alloc */
+     RawMidi_new,                 /* tp_new */
+ };
++>>>>>>> upstream/0.7.6
diff --combined src/objects/oscmodule.c
index 569029c,e40c8cc..84edfad
--- a/src/objects/oscmodule.c
+++ b/src/objects/oscmodule.c
@@@ -736,7 -736,13 +736,17 @@@ typedef struct 
  static void
  OscDataSend_compute_next_data_frame(OscDataSend *self)
  {
++<<<<<<< HEAD
 +    int i;
++=======
+     int i, j = 0;
+     Py_ssize_t blobsize = 0;
+     PyObject *datalist = NULL;
+     char *blobdata = NULL;
+     uint8_t midi[4];
+     lo_blob *blob = NULL;
+     
++>>>>>>> upstream/0.7.6
      lo_message *msg;
      char *path  = PyString_AsString(self->address_path);
  
@@@ -746,19 -752,48 +756,48 @@@
          for (i=0; i<self->num_items; i++) {
              switch (self->types[i]) {
                  case LO_INT32:
-                     lo_message_add_int32(msg, PyInt_AsLong(PyList_GetItem(self->value, i)));
+                     lo_message_add_int32(msg, PyInt_AS_LONG(PyList_GET_ITEM(self->value, i)));
                      break;
                  case LO_INT64:
-                     lo_message_add_int64(msg, (long)PyLong_AsLong(PyList_GetItem(self->value, i)));
+                     lo_message_add_int64(msg, (long)PyLong_AsLong(PyList_GET_ITEM(self->value, i)));
                      break;
                  case LO_FLOAT:
-                     lo_message_add_float(msg, PyFloat_AsDouble(PyList_GetItem(self->value, i)));
+                     lo_message_add_float(msg, PyFloat_AS_DOUBLE(PyList_GET_ITEM(self->value, i)));
                      break;
                  case LO_DOUBLE:
-                     lo_message_add_double(msg, (double)PyFloat_AsDouble(PyList_GetItem(self->value, i)));
+                     lo_message_add_double(msg, (double)PyFloat_AS_DOUBLE(PyList_GET_ITEM(self->value, i)));
                      break;
                  case LO_STRING:
-                     lo_message_add_string(msg, PyString_AsString(PyList_GetItem(self->value, i)));
+                     lo_message_add_string(msg, PyString_AsString(PyList_GET_ITEM(self->value, i)));
+                     break;
+                 case LO_CHAR:
+                     lo_message_add_char(msg, (char)PyString_AsString(PyList_GET_ITEM(self->value, i))[0]);
+                     break;
+                 case LO_BLOB:
+                     datalist = PyList_GET_ITEM(self->value, i);
+                     blobsize = PyList_Size(datalist);
+                     blobdata = (char *)malloc(blobsize * sizeof(char));
+                     for (j=0; j<blobsize; j++) {
+                         blobdata[j] = (char)PyString_AsString(PyList_GET_ITEM(datalist, j))[0];
+                     }
+                     blob = lo_blob_new(blobsize * sizeof(char), blobdata);
+                     lo_message_add_blob(msg, blob);
+                     break;
+                 case LO_MIDI:
+                     datalist = PyList_GET_ITEM(self->value, i);
+                     for (j=0; j<4; j++) {
+                         midi[j] = (uint8_t)PyInt_AS_LONG(PyList_GET_ITEM(datalist, j));
+                     }
+                     lo_message_add_midi(msg, midi);
+                     break;
+                 case LO_NIL:
+                     lo_message_add_nil(msg);
+                     break;
+                 case LO_TRUE:
+                     lo_message_add_true(msg);
+                     break;
+                 case LO_FALSE:
+                     lo_message_add_false(msg);
                      break;
                  default:
                      break;
@@@ -769,8 -804,11 +808,15 @@@
          }
          self->something_to_send = 0;
          lo_message_free(msg);
+         if (blob != NULL)
+             lo_blob_free(blob);
+         if (blobdata != NULL)
+             free(blobdata);
      }
++<<<<<<< HEAD
 +
++=======
++>>>>>>> upstream/0.7.6
  }
  
  static int
@@@ -861,7 -899,7 +907,7 @@@ OscDataSend_send(OscDataSend *self, PyO
          self->something_to_send = 1;
      }
      else
-         printf("argument to send() method must be a tuple of values.\n");
+         printf("argument to send() method must be a list of values.\n");
  
  	Py_INCREF(Py_None);
  	return Py_None;
@@@ -938,35 -976,71 +984,76 @@@ int OscDataReceive_handler(const char *
  {
      OscDataReceive *self = user_data;
      PyObject *tup, *result=NULL;
++<<<<<<< HEAD
 +    tup = PyTuple_New(argc+1);
 +    int i, ok = 0;
++=======
+     lo_blob *blob = NULL;
+     char *blobdata = NULL;
+     uint32_t blobsize = 0;
+     PyObject *charlist = NULL; 
+     tup = PyTuple_New(argc+1);
+     int i, ok = 0, j = 0;
++>>>>>>> upstream/0.7.6
  
      Py_ssize_t lsize = PyList_Size(self->address_path);
      for (i=0; i<lsize; i++) {
-         if (lo_pattern_match(path, PyString_AsString(PyList_GetItem(self->address_path, i)))) {
+         if (lo_pattern_match(path, PyString_AsString(PyList_GET_ITEM(self->address_path, i)))) {
              ok = 1;
              break;
          }
      }
  
      if (ok) {
-         PyTuple_SetItem(tup, 0, PyString_FromString(path));
+         PyTuple_SET_ITEM(tup, 0, PyString_FromString(path));
          for (i=0; i<argc; i++) {
              switch (types[i]) {
                  case LO_INT32:
-                     PyTuple_SetItem(tup, i+1, PyInt_FromLong(argv[i]->i));
+                     PyTuple_SET_ITEM(tup, i+1, PyInt_FromLong(argv[i]->i));
                      break;
                  case LO_INT64:
-                     PyTuple_SetItem(tup, i+1, PyLong_FromLong(argv[i]->h));
+                     PyTuple_SET_ITEM(tup, i+1, PyLong_FromLong(argv[i]->h));
                      break;
                  case LO_FLOAT:
-                     PyTuple_SetItem(tup, i+1, PyFloat_FromDouble(argv[i]->f));
+                     PyTuple_SET_ITEM(tup, i+1, PyFloat_FromDouble(argv[i]->f));
                      break;
                  case LO_DOUBLE:
-                     PyTuple_SetItem(tup, i+1, PyFloat_FromDouble(argv[i]->d));
+                     PyTuple_SET_ITEM(tup, i+1, PyFloat_FromDouble(argv[i]->d));
                      break;
                  case LO_STRING:
-                     PyTuple_SetItem(tup, i+1, PyString_FromString(&argv[i]->s));
+                     PyTuple_SET_ITEM(tup, i+1, PyString_FromString(&argv[i]->s));
+                     break;
+                 case LO_CHAR:
+                     PyTuple_SET_ITEM(tup, i+1, PyString_FromFormat("%c", argv[i]->c));
+                     break;
+                 case LO_BLOB:
+                     blob = (lo_blob)argv[i];
+                     blobsize = lo_blob_datasize(blob);
+                     blobdata = lo_blob_dataptr(blob);
+                     charlist = PyList_New(blobsize);
+                     for (j=0; j<blobsize; j++) {
+                         PyList_SET_ITEM(charlist, j, PyString_FromFormat("%c", blobdata[j]));
+                     }
+                     PyTuple_SET_ITEM(tup, i+1, charlist);
+                     break;
+                 case LO_MIDI:
+                     charlist = PyList_New(4);
+                     for (j=0; j<4; j++) {
+                         PyList_SET_ITEM(charlist, j, PyInt_FromLong(argv[i]->m[j]));
+                     }
+                     PyTuple_SET_ITEM(tup, i+1, charlist);                    
+                     break;
+                 case LO_NIL:
+                     Py_INCREF(Py_None);
+                     PyTuple_SET_ITEM(tup, i+1, Py_None);
+                     break;
+                 case LO_TRUE:
+                     Py_INCREF(Py_True);
+                     PyTuple_SET_ITEM(tup, i+1, Py_True);
+                     break;
+                 case LO_FALSE:
+                     Py_INCREF(Py_False);
+                     PyTuple_SET_ITEM(tup, i+1, Py_False);
                      break;
                  default:
                      break;
@@@ -978,6 -1052,7 +1065,10 @@@
      }
      Py_XDECREF(tup);
      Py_XDECREF(result);
++<<<<<<< HEAD
++=======
+     Py_XDECREF(charlist);
++>>>>>>> upstream/0.7.6
      return 0;
  }
  
diff --combined utils/E-Pyo.py
index de136b3,87d556a..11ca37e
--- a/utils/E-Pyo.py
+++ b/utils/E-Pyo.py
@@@ -45,10 -45,13 +45,13 @@@ PLATFORM = sys.platfor
  DEFAULT_ENCODING = sys.getdefaultencoding()
  ENCODING = sys.getfilesystemencoding()
  ENCODING_LIST = ["utf_8", "latin_1", "mac_roman", "cp1252", "cp1250", "utf_16"]
- ENCODING_DICT = {'cp-1250': 'cp1250', 'cp-1251': 'cp1251', 'cp-1252': 'cp1252', 'latin-1': 'latin_1', 
-                 'mac-roman': 'mac_roman', 'utf-8': 'utf_8', 'utf-16': 'utf_16', 'utf-16 (Big Endian)': 'utf_16_be', 
-                 'utf-16 (Little Endian)': 'utf_16_le', 'utf-32': 'utf_32', 'utf-32 (Big Endian)': 
-                 'utf_32_be', 'utf-32 (Little Endian)': 'utf_32_le'}
+ ENCODING_DICT = {'cp-1250': 'cp1250', 'cp-1251': 'cp1251', 'cp-1252': 'cp1252', 
+                  'latin-1': 'latin_1', 'mac-roman': 'mac_roman', 
+                  'utf-8': 'utf_8', 'utf-16': 'utf_16', 
+                  'utf-16 (Big Endian)': 'utf_16_be', 
+                  'utf-16 (Little Endian)': 'utf_16_le', 'utf-32': 'utf_32', 
+                  'utf-32 (Big Endian)': 'utf_32_be', 
+                  'utf-32 (Little Endian)': 'utf_32_le'}
  
  APP_NAME = 'E-Pyo'
  APP_VERSION = PYO_VERSION
@@@ -119,6 -122,7 +122,7 @@@ def hex_to_rgb(value)
      lv = len(value)
      return tuple(int(value[i:i+lv/3], 16) for i in range(0, lv, lv/3))
  
+ ################## Paths ##################
  TEMP_PATH = os.path.join(os.path.expanduser('~'), '.epyo')
  if not os.path.isdir(TEMP_PATH):
      os.mkdir(TEMP_PATH)
@@@ -155,7 -159,8 +159,8 @@@ if PLATFORM == "darwin" and '/%s.app' 
      
  # Check for which Python to use #
  if PLATFORM == "win32":
-     WHICH_PYTHON = PREFERENCES.get("which_python", "C:\Python%d%d\python.exe" % sys.version_info[:2])
+     WHICH_PYTHON = PREFERENCES.get("which_python", 
+                             "C:\Python%d%d\python.exe" % sys.version_info[:2])
  else:
      WHICH_PYTHON = PREFERENCES.get("which_python", "")
  INSTALLATION_ERROR_MESSAGE = ""
@@@ -163,13 -168,16 +168,16 @@@ CALLER_NEED_TO_INVOKE_32_BIT = Fals
  SET_32_BIT_ARCH = "export VERSIONER_PYTHON_PREFER_32_BIT=yes;"
  if WHICH_PYTHON == "":
      if OSX_APP_BUNDLED:
-         proc = subprocess.Popen(["export PATH=/usr/local/bin:$PATH;which python"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+         proc = subprocess.Popen(["export PATH=/usr/local/bin:$PATH;which python"], 
+                     shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
          WHICH_PYTHON = proc.communicate()[0][:-1]
      elif PLATFORM == "darwin":
-         proc = subprocess.Popen(["which python"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+         proc = subprocess.Popen(["which python"], shell=True, 
+                                 stdout=subprocess.PIPE, stderr=subprocess.PIPE)
          WHICH_PYTHON = proc.communicate()[0][:-1]
      elif PLATFORM == "linux2":
-         proc = subprocess.Popen(["which python"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+         proc = subprocess.Popen(["which python"], shell=True, 
+                                 stdout=subprocess.PIPE, stderr=subprocess.PIPE)
          WHICH_PYTHON = proc.communicate()[0][:-1]
      else:
          ### No more used on Windows ###
@@@ -477,9 -485,11 +485,17 @@@ if not READY
      s.gui(locals())
  '''
  
++<<<<<<< HEAD
 +TEMPLATE_NAMES = {98: "Header", 97: "Pyo", 96: "WxPython", 95: "Cecilia5", 94: "Zyne", 93: "Audio Interface", 92: "RadioPyo"}
 +TEMPLATE_DICT = {98: HEADER_TEMPLATE, 97: PYO_TEMPLATE, 96: WXPYTHON_TEMPLATE, 95: CECILIA5_TEMPLATE, 
 +                94: ZYNE_TEMPLATE, 93: AUDIO_INTERFACE_TEMPLATE, 92: RADIOPYO_TEMPLATE}
++=======
+ TEMPLATE_NAMES = {98: "Header", 97: "Pyo", 96: "WxPython", 95: "Cecilia5", 
+                   94: "Zyne", 93: "Audio Interface", 92: "RadioPyo"}
+ TEMPLATE_DICT = {98: HEADER_TEMPLATE, 97: PYO_TEMPLATE, 96: WXPYTHON_TEMPLATE, 
+                  95: CECILIA5_TEMPLATE, 94: ZYNE_TEMPLATE, 
+                  93: AUDIO_INTERFACE_TEMPLATE, 92: RADIOPYO_TEMPLATE}
++>>>>>>> upstream/0.7.6
  
  TEMPLATE_PATH = os.path.join(RESOURCES_PATH, "templates")
  if not os.path.isdir(TEMPLATE_PATH):
@@@ -535,8 -545,10 +551,10 @@@ WHILE_COMP = """ `i` `>` `0`
  """
  ASSERT_COMP = ''' `expression` `>` `0`, "`expression should be positive`"
  '''
- BUILTINS_DICT = {"from": FROM_COMP, "try": TRY_COMP, "if": IF_COMP, "def": DEF_COMP, "class": CLASS_COMP, 
-                 "for": FOR_COMP, "while": WHILE_COMP, "exec": EXEC_COMP, "raise": RAISE_COMP, "assert": ASSERT_COMP}
+ BUILTINS_DICT = {"from": FROM_COMP, "try": TRY_COMP, "if": IF_COMP, 
+                  "def": DEF_COMP, "class": CLASS_COMP, "for": FOR_COMP, 
+                  "while": WHILE_COMP, "exec": EXEC_COMP, "raise": RAISE_COMP, 
+                  "assert": ASSERT_COMP}
  
  ################## Interface Bitmaps ##################
  catalog = {}
@@@ -773,7 -785,9 +791,13 @@@ KEY_COMMANDS = 
  }
  
  ############## Allowed Extensions ##############
++<<<<<<< HEAD
 +ALLOWED_EXT = PREFERENCES.get("allowed_ext", ["py", "c5", "txt", "", "c", "h", "cpp", "hpp", "sh", "rst", "iss", "sg", "md", "jsfx-inc"])
++=======
+ ALLOWED_EXT = PREFERENCES.get("allowed_ext", 
+                               ["py", "c5", "txt", "", "c", "h", "cpp", "hpp", "zy",
+                                "sh", "rst", "iss", "sg", "md", "jsfx-inc", "lua", "css"])
++>>>>>>> upstream/0.7.6
  
  ############## Pyo keywords ##############
  tree = OBJECTS_TREE
@@@ -813,15 -827,23 +837,23 @@@ else
  
  
  STYLES_GENERALS = ['default', 'background', 'selback', 'caret']
- STYLES_TEXT_COMP = ['comment', 'commentblock', 'number', 'operator', 'string', 'triple', 'keyword', 'pyokeyword', 
-                 'class', 'function', 'linenumber']
- STYLES_INTER_COMP = ['marginback', 'foldmarginback', 'markerfg', 'markerbg', 'bracelight', 'bracebad', 'lineedge']
- STYLES_LABELS = {'default': 'Foreground', 'background': 'Background', 'selback': 'Selection', 'caret': 'Caret',
-         'comment': 'Comment', 'commentblock': 'Comment Block', 'number': 'Number', 'string': 'String', 
-         'triple': 'Triple String', 'keyword': 'Python Keyword', 'pyokeyword': 'Pyo Keyword', 'class': 'Class Name', 
-         'function': 'Function Name', 'linenumber': 'Line Number', 'operator': 'Operator', 'foldmarginback': 'Folding Margin Background',
-         'marginback': 'Number Margin Background', 'markerfg': 'Marker Foreground', 'markerbg': 'Marker Background', 
-         'bracelight': 'Brace Match', 'bracebad': 'Brace Mismatch', 'lineedge': 'Line Edge'}
+ STYLES_TEXT_COMP = ['comment', 'commentblock', 'number', 'operator', 'string', 
+                     'triple', 'keyword', 'pyokeyword', 'class', 'function', 
+                     'linenumber']
+ STYLES_INTER_COMP = ['marginback', 'foldmarginback', 'markerfg', 'markerbg', 
+                      'bracelight', 'bracebad', 'lineedge']
+ STYLES_LABELS = {'default': 'Foreground', 'background': 'Background', 
+                  'selback': 'Selection', 'caret': 'Caret', 'comment': 'Comment', 
+                  'commentblock': 'Comment Block', 'number': 'Number', 
+                  'string': 'String', 'triple': 'Triple String', 
+                  'keyword': 'Python Keyword', 'pyokeyword': 'Pyo Keyword', 
+                  'class': 'Class Name', 'function': 'Function Name', 
+                  'linenumber': 'Line Number', 'operator': 'Operator', 
+                  'foldmarginback': 'Folding Margin Background',
+                  'marginback': 'Number Margin Background', 
+                  'markerfg': 'Marker Foreground', 'markerbg': 'Marker Background', 
+                  'bracelight': 'Brace Match', 'bracebad': 'Brace Mismatch', 
+                  'lineedge': 'Line Edge'}
  
  with open(PREF_STYLE) as f:
      text = f.read()
@@@ -920,23 -942,23 +952,43 @@@ class RunningThread(threading.Thread)
              prelude = "export -n %s;export PATH=/usr/local/bin:/usr/local/lib:$PATH;" % vars_to_remove
              if CALLER_NEED_TO_INVOKE_32_BIT:
                  self.proc = subprocess.Popen(['%s%s%s -u "%s"' % (prelude, SET_32_BIT_ARCH, WHICH_PYTHON, self.path)], 
++<<<<<<< HEAD
 +                                shell=True, cwd=self.cwd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 +            else:
 +                self.proc = subprocess.Popen(['%s%s -u "%s"' % (prelude, WHICH_PYTHON, self.path)], cwd=self.cwd, 
 +                                    shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 +        elif PLATFORM == "darwin":
 +            if CALLER_NEED_TO_INVOKE_32_BIT:
 +                self.proc = subprocess.Popen(['%s%s -u "%s"' % (SET_32_BIT_ARCH, WHICH_PYTHON, self.path)], 
 +                                shell=True, cwd=self.cwd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 +            else:
 +                self.proc = subprocess.Popen(['%s -u "%s"' % (WHICH_PYTHON, self.path)], cwd=self.cwd, 
 +                                shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 +        elif PLATFORM == "win32":
 +            self.proc = subprocess.Popen([WHICH_PYTHON, "-u", self.path], cwd=self.cwd, shell=False, 
 +                                stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 +        else:
 +            self.proc = subprocess.Popen([WHICH_PYTHON, "-u", self.path], cwd=self.cwd, 
 +                                stdout=subprocess.PIPE, stderr=subprocess.PIPE)
++=======
+                                 shell=True, cwd=self.cwd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+             else:
+                 self.proc = subprocess.Popen(['%s%s -u "%s"' % (prelude, WHICH_PYTHON, self.path)], cwd=self.cwd, 
+                                     shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+         elif PLATFORM == "darwin":
+             if CALLER_NEED_TO_INVOKE_32_BIT:
+                 self.proc = subprocess.Popen(['%s%s -u "%s"' % (SET_32_BIT_ARCH, WHICH_PYTHON, self.path)], 
+                                 shell=True, cwd=self.cwd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+             else:
+                 self.proc = subprocess.Popen(['%s -u "%s"' % (WHICH_PYTHON, self.path)], cwd=self.cwd, 
+                                 shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+         elif PLATFORM == "win32":
+             self.proc = subprocess.Popen([WHICH_PYTHON, "-u", self.path], cwd=self.cwd, shell=False, 
+                                 stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+         else:
+             self.proc = subprocess.Popen([WHICH_PYTHON, "-u", self.path], cwd=self.cwd, 
+                                 stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
++>>>>>>> upstream/0.7.6
  
          header = '=== Output log of process "%s", launched: %s ===\n' % (self.filename, time.strftime('"%d %b %Y %H:%M:%S"', time.localtime()))
          data_event = DataEvent({"log": header, "pid": self.pid, "filename": self.filename, "active": True})
@@@ -945,12 -967,18 +997,25 @@@
              log = ""
              for line in self.proc.stdout.readline():
                  log = log + line
++<<<<<<< HEAD
++=======
+             log = log.replace(">>> ", "").replace("... ", "")
++>>>>>>> upstream/0.7.6
              data_event = DataEvent({"log": log, "pid": self.pid, "filename": self.filename, "active": True})
              wx.PostEvent(self.event_receiver, data_event)            
              sys.stdout.flush()
              time.sleep(.025)
          stdout, stderr = self.proc.communicate()
++<<<<<<< HEAD
 +        output = stdout + stderr
++=======
+         output = ""
+         if stdout is not None:
+             output = output + stdout
+         if stderr is not None:
+             output = output + stderr
+         output = output.replace(">>> ", "").replace("... ", "")
++>>>>>>> upstream/0.7.6
          if "StartNotification name = default" in output:
              output = output.replace("StartNotification name = default", "")
          if "epyo_tempfile.py" in output:
@@@ -977,12 -1005,102 +1042,106 @@@
                  pass
          if self.terminated:
              output = output + "\n=== Process killed. ==="
++<<<<<<< HEAD
 +        data_event = DataEvent({"log": output, "pid": self.pid, "filename": self.filename, "active": False})
++=======
+         data_event = DataEvent({"log": output, "pid": self.pid, 
+                                 "filename": self.filename, "active": False})
+         wx.PostEvent(self.event_receiver, data_event)
+ 
+ class BackgroundServerThread(threading.Thread):
+     def __init__(self, cwd, event_receiver):
+         threading.Thread.__init__(self)
+         self.cwd = cwd
+         self.event_receiver = event_receiver
+         self.terminated = False
+         self.pid = None
+ 
+     def setPID(self, pid):
+         self.pid = pid
+ 
+     def kill(self):
+         self.terminated = True
+         self.proc.stdin.write("_quit_()\n")
+         if self.proc.poll() == None:
+             self.proc.kill()
+ 
+     def sendText(self, text):
+         for line in text.splitlines():
+             self.proc.stdin.write(line + "\n")
+         self.proc.stdin.write("\n")
+ 
+     def run(self):
+         if PLATFORM == "win32":
+             self.proc = subprocess.Popen(
+                     [WHICH_PYTHON, '-i', os.path.join(TEMP_PATH, "background_server.py")], 
+                     shell=True, cwd=self.cwd, stdout=subprocess.PIPE,
+                     stdin=subprocess.PIPE, stderr=subprocess.STDOUT)
+         else:
+             self.proc = subprocess.Popen(
+                     ["%s -i -u %s" % (WHICH_PYTHON, os.path.join(TEMP_PATH, "background_server.py"))], 
+                     cwd=self.cwd, shell=True, stdout=subprocess.PIPE, 
+                     stderr=subprocess.STDOUT, stdin=subprocess.PIPE)
+ 
+         header = '=== Output log of background server, launched: %s ===\n' % time.strftime('"%d %b %Y %H:%M:%S"', time.localtime())
+         data_event = DataEvent({"log": header, "pid": self.pid, 
+                                 "filename": 'background_server.py', 
+                                 "active": True})
+         wx.PostEvent(self.event_receiver, data_event)
+         while self.proc.poll() == None and not self.terminated:
+             log = ""
+             for line in self.proc.stdout.readline():
+                 log = log + line
+             log = log.replace(">>> ", "").replace("... ", "")
+             data_event = DataEvent({"log": log, "pid": self.pid, 
+                                     "filename": 'background_server.py', 
+                                     "active": True})
+             wx.PostEvent(self.event_receiver, data_event)            
+             sys.stdout.flush()
+             time.sleep(.025)
+         stdout, stderr = self.proc.communicate()
+         output = ""
+         if stdout is not None:
+             output = output + stdout
+         if stderr is not None:
+             output = output + stderr
+         output = output.replace(">>> ", "").replace("... ", "")
+         if "StartNotification name = default" in output:
+             output = output.replace("StartNotification name = default", "")
+         if "background_server.py" in output:
+             try:
+                 findpos = output.find("background_server.py")
+                 pos = findpos
+                 while (output[pos] != '"'):
+                     pos -= 1
+                 startpos = pos + 1
+                 pos = findpos
+                 while (output[pos] != '"'):
+                     pos += 1
+                 endpos = pos
+                 output = output[:startpos] + self.filename + output[endpos:]
+                 pos = startpos + len(self.filename)
+                 slinepos = pos + 8
+                 pos = slinepos
+                 while (output[pos] != ',' and output[pos] != '\n'):
+                     pos += 1
+                 elinepos = pos
+                 linenum = int(output[slinepos:elinepos].strip())
+                 output = output[:slinepos] + str(linenum-3) + output[elinepos:]
+             except:
+                 pass
+         if self.terminated:
+             output = output + "\n=== Process killed. ==="
+         data_event = DataEvent({"log": output, "pid": self.pid, 
+                                 "filename": 'background_server.py', 
+                                 "active": False})
++>>>>>>> upstream/0.7.6
          wx.PostEvent(self.event_receiver, data_event)
  
  class KeyCommandsFrame(wx.Frame):
      def __init__(self, parent):
-         wx.Frame.__init__(self, parent, wx.ID_ANY, title="Editor Key Commands List", size=(650,550))
+         wx.Frame.__init__(self, parent, wx.ID_ANY, 
+                           title="Editor Key Commands List", size=(650,550))
          self.menuBar = wx.MenuBar()
          menu1 = wx.Menu()
          menu1.Append(351, "Close\tCtrl+W")
@@@ -1012,7 -1130,8 +1171,8 @@@
          self.Hide()
  
  class EditorPreview(stc.StyledTextCtrl):
-     def __init__(self, parent, ID, pos=wx.DefaultPosition, size=wx.DefaultSize, style= wx.SUNKEN_BORDER | wx.WANTS_CHARS):
+     def __init__(self, parent, ID, pos=wx.DefaultPosition, size=wx.DefaultSize, 
+                  style= wx.SUNKEN_BORDER | wx.WANTS_CHARS):
          stc.StyledTextCtrl.__init__(self, parent, ID, pos, size, style)
  
          self.SetSTCCursor(2)
@@@ -1428,6 -1547,7 +1588,7 @@@ class SearchProjectPanel(scrolled.Scrol
  class SearchProjectFrame(wx.Frame):
      def __init__(self, parent, root, dict, size=(500,500)):
          wx.Frame.__init__(self, parent, wx.ID_ANY, size=size)
+         self.SetTitle('Search Results in Project "%s"' % os.path.split(root)[1])
          self.menuBar = wx.MenuBar()
          menu1 = wx.Menu()
          menu1.Append(351, "Close\tCtrl+W")
@@@ -2051,6 -2171,13 +2212,16 @@@ class MainFrame(wx.Frame)
          menu2.Append(121, "Insert File Path...\tShift+Ctrl+P")
          self.Bind(wx.EVT_MENU, self.insertPath, id=121)
          menu2.AppendSeparator()
++<<<<<<< HEAD
++=======
+         submenublk = wx.Menu()
+         submenublk.Append(400, "Insert Code Block Head\tCtrl+B")
+         submenublk.Append(401, "Insert Code Block Tail\tShift+Ctrl+B")
+         submenublk.Append(402, "Select Code Block\tCtrl+,")
+         self.Bind(wx.EVT_MENU, self.onCodeBlock, id=400, id2=402)
+         menu2.AppendMenu(-1, "Code Blocks", submenublk)
+         menu2.AppendSeparator()
++>>>>>>> upstream/0.7.6
          menu2.Append(114, "Auto Complete container syntax", kind=wx.ITEM_CHECK)
          self.Bind(wx.EVT_MENU, self.autoCompContainer, id=114)
          menu2.Check(114, PREFERENCES.get("auto_comp_container", 0))
@@@ -2093,7 -2220,7 +2264,11 @@@
          self.menu3.AppendSeparator()
          self.backServerItem = self.menu3.Append(304, "Start Pyo Background Server")
          self.Bind(wx.EVT_MENU, self.startStopBackgroundServer, id=304)
++<<<<<<< HEAD
 +        self.sendToServerItem = self.menu3.Append(305, "Send Line/Selection to Pyo Background Server\tCtrl+T")
++=======
+         self.sendToServerItem = self.menu3.Append(305, "Send Line/Selection to Pyo Background Server\tCtrl+.")
++>>>>>>> upstream/0.7.6
          self.sendToServerItem.Enable(False)
          self.Bind(wx.EVT_MENU, self.sendSelectionToBackgroundServer, id=305)
          self.menuBar.Append(self.menu3, 'Process')
@@@ -2166,7 -2293,7 +2341,7 @@@
          self.menu6 = wx.Menu()
          ID_EXAMPLE = 1000
          for folder in EXAMPLE_FOLDERS:
-             exmenu = wx.Menu(title=folder.lower())
+             exmenu = wx.Menu(folder.lower())
              for ex in sorted([exp for exp in os.listdir(os.path.join(EXAMPLE_PATH, folder.lower())) if exp[0] != "." and not exp.endswith("pyc")]):
                  exmenu.Append(ID_EXAMPLE, ex)
                  ID_EXAMPLE += 1
@@@ -2274,6 -2401,14 +2449,17 @@@
          if rect.x > self.field1X+160:
              self.cc.SetPosition((rect.x, rect.y+yoff2))
  
++<<<<<<< HEAD
++=======
+     def onCodeBlock(self, evt):
+         if evt.GetId() == 400:
+             self.panel.editor.insertBlockHead()
+         elif evt.GetId() == 401:
+             self.panel.editor.insertBlockTail()
+         elif evt.GetId() == 402:
+             self.panel.editor.selectCodeBlock()
+ 
++>>>>>>> upstream/0.7.6
      def setMasterDocument(self, evt):
          if self.master_document == None:
              self.master_document = self.panel.editor.path
@@@ -2981,7 -3116,9 +3167,9 @@@
      def run(self, path):
          cwd = self.getCurrentWorkingDirectory()
          th = RunningThread(path, cwd, self)
-         if "Untitled-" in self.panel.editor.path:
+         if self.master_document != None:
+             filename = os.path.split(self.master_document)[1]
+         elif "Untitled-" in self.panel.editor.path:
              filename = self.panel.editor.path
          else:
              filename = os.path.split(self.panel.editor.path)[1]
@@@ -3043,59 -3180,72 +3231,73 @@@
              exec text
          self.panel.editor.addText(s.getvalue())
  
+     def prepareBackgroundServer(self):
+         outDriverIndex = -1
+         preferedDriver = PREFERENCES.get("background_server_out_device", "")
+         if preferedDriver != "":
+             driverList, driverIndexes = pa_get_output_devices()
+             driverList = [ensureNFD(driver) for driver in driverList]
+             if preferedDriver and preferedDriver in driverList:
+                 outDriverIndex = driverIndexes[driverList.index(preferedDriver)]
+ 
+         inDriverIndex = -1
+         preferedDriver = PREFERENCES.get("background_server_in_device", "")
+         if preferedDriver != "":
+             driverList, driverIndexes = pa_get_input_devices()
+             driverList = [ensureNFD(driver) for driver in driverList]
+             if preferedDriver and preferedDriver in driverList:
+                 inDriverIndex = driverIndexes[driverList.index(preferedDriver)]
+ 
+         midiOutDriverIndex = -1
+         preferedDriver = PREFERENCES.get("background_server_midiout_device", "")
+         if preferedDriver != "":
+             driverList, driverIndexes = pm_get_output_devices()
+             driverList = [ensureNFD(driver) for driver in driverList]
+             if preferedDriver and preferedDriver in driverList:
+                 midiOutDriverIndex = driverIndexes[driverList.index(preferedDriver)]
+ 
+         midiInDriverIndex = -1
+         preferedDriver = PREFERENCES.get("background_server_midiin_device", "")
+         if preferedDriver != "":
+             driverList, driverIndexes = pm_get_input_devices()
+             driverList = [ensureNFD(driver) for driver in driverList]
+             if preferedDriver and preferedDriver in driverList:
+                 midiInDriverIndex = driverIndexes[driverList.index(preferedDriver)]
+ 
+         with open(os.path.join(TEMP_PATH, "background_server.py"), "w") as f:
+             f.write("print 'Starting background server...'\nimport time\nfrom pyo import *\n")
+             f.write("s = Server(%s)\n" % BACKGROUND_SERVER_ARGS)
+             if outDriverIndex != -1:
+                 f.write("s.setOutputDevice(%d)\n" % outDriverIndex)
+             if inDriverIndex != -1:
+                 f.write("s.setInputDevice(%d)\n" % inDriverIndex)
+             if midiOutDriverIndex != -1:
+                 f.write("s.setMidiOutputDevice(%d)\n" % midiOutDriverIndex)
+             if midiInDriverIndex != -1:
+                 f.write("s.setMidiInputDevice(%d)\n" % midiInDriverIndex)
+             f.write("s.boot()\ns.start()\n\n")
+             f.write("def _quit_():\n    s.stop()\n    time.sleep(0.25)\n    exit()\n")
+ 
+     def resetBackgroundServerMenu(self):
+         self.back_server_started = False
+         self.backServerItem.SetItemLabel("Start Pyo Background Server")
+         self.sendToServerItem.Enable(False)
+         
      def startStopBackgroundServer(self, evt):
 +        # TODO: need to add midi output driver
          if not self.back_server_started:
-             outDriverIndex = -1
-             preferedDriver = PREFERENCES.get("background_server_out_device", "")
-             if preferedDriver != "":
-                 driverList, driverIndexes = pa_get_output_devices()
-                 driverList = [ensureNFD(driver) for driver in driverList]
-                 if preferedDriver and preferedDriver in driverList:
-                     outDriverIndex = driverIndexes[driverList.index(preferedDriver)]
- 
-             inDriverIndex = -1
-             preferedDriver = PREFERENCES.get("background_server_in_device", "")
-             if preferedDriver != "":
-                 driverList, driverIndexes = pa_get_input_devices()
-                 driverList = [ensureNFD(driver) for driver in driverList]
-                 if preferedDriver and preferedDriver in driverList:
-                     inDriverIndex = driverIndexes[driverList.index(preferedDriver)]
- 
-             midiInDriverIndex = -1
-             preferedDriver = PREFERENCES.get("background_server_midiin_device", "")
-             if preferedDriver != "":
-                 driverList, driverIndexes = pm_get_input_devices()
-                 driverList = [ensureNFD(driver) for driver in driverList]
-                 if preferedDriver and preferedDriver in driverList:
-                     midiInDriverIndex = driverIndexes[driverList.index(preferedDriver)]
- 
-             with open(os.path.join(TEMP_PATH, "background_server.py"), "w") as f:
-                 f.write("print 'Starting background server...'\nimport time\nfrom pyo import *\n")
-                 f.write("s = Server(%s)\n" % BACKGROUND_SERVER_ARGS)
-                 if outDriverIndex != -1:
-                     f.write("s.setOutputDevice(%d)\n" % outDriverIndex)
-                 if inDriverIndex != -1:
-                     f.write("s.setInputDevice(%d)\n" % inDriverIndex)
-                 if midiInDriverIndex != -1:
-                     f.write("s.setMidiInputDevice(%d)\n" % midiInDriverIndex)
-                 f.write("s.boot()\ns.start()\n")
-             if PLATFORM == "win32":
-                 self.server_pipe = subprocess.Popen([WHICH_PYTHON, '-i', 'background_server.py'], 
-                                         shell=True, cwd=TEMP_PATH, stdin=subprocess.PIPE).stdin
-             else:
-                 self.server_pipe = subprocess.Popen(["%s -i %s" % (WHICH_PYTHON, os.path.join(TEMP_PATH, "background_server.py"))], 
-                                         shell=True, stdin=subprocess.PIPE).stdin
+             self.prepareBackgroundServer()
+             cwd = self.getCurrentWorkingDirectory()
+             th = BackgroundServerThread(cwd, self)
+             th.setPID(1000)
+             self.processes[1000] = [th, 'background_server.py']
+             self.panel.outputlog.addProcess(1000, 'background_server.py')
+             th.start()
              self.back_server_started = True
              self.backServerItem.SetItemLabel("Stop Pyo Background Server")
              self.sendToServerItem.Enable(True)
          else:
-             try:
-                 self.server_pipe.write("print 'Closing background server...'\ns.stop()\ntime.sleep(0.25)\n")
-                 self.server_pipe.close()
-             except IOError:
-                 pass
-             self.server_pipe = None
+             self.processes[1000][0].kill()
              self.back_server_started = False
              self.backServerItem.SetItemLabel("Start Pyo Background Server")
              self.sendToServerItem.Enable(False)
@@@ -3109,10 -3259,8 +3311,15 @@@
              text = self.panel.editor.GetLineUTF8(line)
          else:
              end = self.panel.editor.GetSelectionEnd()
++<<<<<<< HEAD
 +        if self.server_pipe != None:
 +            for line in text.splitlines():
 +                self.server_pipe.write(line + "\n")
 +            self.server_pipe.write("\n")
++=======
+         if self.back_server_started:
+             self.processes[1000][0].sendText(text)
++>>>>>>> upstream/0.7.6
          if end != None:
              self.panel.editor.SetCurrentPos(end)
          self.panel.editor.LineDown()
@@@ -3373,8 -3521,8 +3580,8 @@@ class EditorPanel(wx.Panel)
          self.SetSizerAndFit(box)
  
  class Editor(stc.StyledTextCtrl):
-     def __init__(self, parent, ID, pos=wx.DefaultPosition, size=wx.DefaultSize, style= wx.NO_BORDER | wx.WANTS_CHARS,
-                  setTitle=None, getTitle=None):
+     def __init__(self, parent, ID, pos=wx.DefaultPosition, size=wx.DefaultSize, 
+                  style= wx.NO_BORDER | wx.WANTS_CHARS, setTitle=None, getTitle=None):
          stc.StyledTextCtrl.__init__(self, parent, ID, pos, size, style)
  
          dt = MyFileDropTarget(self)
@@@ -3449,6 -3597,7 +3656,10 @@@
          self.Bind(stc.EVT_STC_UPDATEUI, self.OnUpdateUI)
          self.Bind(stc.EVT_STC_MARGINCLICK, self.OnMarginClick)
          self.Bind(wx.EVT_CLOSE, self.OnClose)
++<<<<<<< HEAD
++=======
+         self.Bind(wx.EVT_LEFT_DCLICK, self.OnDoubleClick)
++>>>>>>> upstream/0.7.6
  
          self.EmptyUndoBuffer()
          self.SetFocus()
@@@ -3632,6 -3781,57 +3843,60 @@@
              self.StyleSetSpec(stc.STC_C_OPERATOR, buildStyle('operator'))
              self.StyleSetSpec(stc.STC_C_IDENTIFIER, buildStyle('default'))
              self.StyleSetSpec(stc.STC_C_PREPROCESSOR, buildStyle('commentblock'))
++<<<<<<< HEAD
++=======
+         elif ext == "md":
+             self.SetLexer(stc.STC_LEX_MARKDOWN)
+             self.SetStyleBits(self.GetStyleBitsNeeded())
+             self.StyleSetSpec(stc.STC_MARKDOWN_DEFAULT, buildStyle('default'))
+             self.StyleSetSpec(stc.STC_MARKDOWN_LINE_BEGIN, buildStyle('default'))
+             self.StyleSetSpec(stc.STC_MARKDOWN_STRONG1, buildStyle('default') + ",italic,bold")
+             self.StyleSetSpec(stc.STC_MARKDOWN_STRONG2, buildStyle('default') + ",italic,bold")
+             self.StyleSetSpec(stc.STC_MARKDOWN_EM1, buildStyle('default') + ",italic")
+             self.StyleSetSpec(stc.STC_MARKDOWN_EM2, buildStyle('default') + ",italic")
+             self.StyleSetSpec(stc.STC_MARKDOWN_HEADER1, buildStyle('comment') + ", bold")
+             self.StyleSetSpec(stc.STC_MARKDOWN_HEADER2, buildStyle('comment'))
+             self.StyleSetSpec(stc.STC_MARKDOWN_HEADER3, buildStyle('commentblock') + ", bold")
+             self.StyleSetSpec(stc.STC_MARKDOWN_HEADER4, buildStyle('commentblock') + ", bold")
+             self.StyleSetSpec(stc.STC_MARKDOWN_HEADER5, buildStyle('commentblock'))
+             self.StyleSetSpec(stc.STC_MARKDOWN_HEADER6, buildStyle('commentblock'))
+             self.StyleSetSpec(stc.STC_MARKDOWN_PRECHAR, buildStyle('default'))
+             self.StyleSetSpec(stc.STC_MARKDOWN_ULIST_ITEM, buildStyle('string'))
+             self.StyleSetSpec(stc.STC_MARKDOWN_OLIST_ITEM, buildStyle('triple'))
+             self.StyleSetSpec(stc.STC_MARKDOWN_BLOCKQUOTE, buildStyle('string'))
+             self.StyleSetSpec(stc.STC_MARKDOWN_STRIKEOUT, buildStyle('string'))
+             self.StyleSetSpec(stc.STC_MARKDOWN_HRULE, buildStyle('triple'))
+             self.StyleSetSpec(stc.STC_MARKDOWN_LINK, buildStyle('function'))
+             self.StyleSetSpec(stc.STC_MARKDOWN_CODE, buildStyle('default') + ",italic,bold")
+             self.StyleSetSpec(stc.STC_MARKDOWN_CODE2, buildStyle('default') + ",italic,bold")
+             self.StyleSetSpec(stc.STC_MARKDOWN_CODEBK, buildStyle('default') + ",italic,bold")
+         elif ext == "lua":
+             self.SetLexer(stc.STC_LEX_LUA)
+             self.SetStyleBits(self.GetStyleBitsNeeded())
+             self.SetKeyWords(0, "and break do else elseif for if in nil not or \
+                         repeat then until while function local end return true false ")
+             self.StyleSetSpec(stc.STC_LUA_DEFAULT, buildStyle('default'))
+             self.StyleSetSpec(stc.STC_LUA_COMMENT, buildStyle('comment'))
+             self.StyleSetSpec(stc.STC_LUA_COMMENTLINE, buildStyle('comment'))
+             self.StyleSetSpec(stc.STC_LUA_COMMENTDOC, buildStyle('commentblock'))
+             self.StyleSetSpec(stc.STC_LUA_NUMBER, buildStyle('number'))
+             self.StyleSetSpec(stc.STC_LUA_WORD, buildStyle('keyword'))
+             self.StyleSetSpec(stc.STC_LUA_STRING, buildStyle('string'))
+             self.StyleSetSpec(stc.STC_LUA_CHARACTER, buildStyle('string'))
+             self.StyleSetSpec(stc.STC_LUA_LITERALSTRING, buildStyle('triple'))
+             self.StyleSetSpec(stc.STC_LUA_PREPROCESSOR, buildStyle('default') + ",italic")
+             self.StyleSetSpec(stc.STC_LUA_OPERATOR, buildStyle('operator'))
+             self.StyleSetSpec(stc.STC_LUA_IDENTIFIER, buildStyle('default'))
+             self.StyleSetSpec(stc.STC_LUA_STRINGEOL, buildStyle('default') + ",bold")
+             self.StyleSetSpec(stc.STC_LUA_WORD2, buildStyle('pyokeyword'))
+             self.StyleSetSpec(stc.STC_LUA_WORD3, buildStyle('pyokeyword'))
+             self.StyleSetSpec(stc.STC_LUA_WORD4, buildStyle('pyokeyword'))
+             self.StyleSetSpec(stc.STC_LUA_WORD5, buildStyle('pyokeyword'))
+             self.StyleSetSpec(stc.STC_LUA_WORD6, buildStyle('pyokeyword'))
+             self.StyleSetSpec(stc.STC_LUA_WORD7, buildStyle('pyokeyword'))
+             self.StyleSetSpec(stc.STC_LUA_WORD8, buildStyle('pyokeyword'))
+             self.StyleSetSpec(stc.STC_LUA_LABEL, buildStyle('default') + ",italic,bold")
++>>>>>>> upstream/0.7.6
  
          self.SetEdgeColour(STYLES["lineedge"]['colour'])
          self.SetCaretForeground(STYLES['caret']['colour'])
@@@ -3643,6 -3843,57 +3908,60 @@@
  
          # WxPython 3 needs the lexer to be set before folding property
          self.SetProperty("fold", "1")
++<<<<<<< HEAD
++=======
+ 
+     def insertBlockHead(self):
+         pos = self.PositionFromLine(self.GetCurrentLine())
+         if self.GetLine(self.GetCurrentLine()).strip() == "":
+             self.InsertText(pos, "#-->")
+         else:
+             self.InsertText(pos, "#-->\n")
+ 
+     def insertBlockTail(self):
+         pos = self.GetLineEndPosition(self.GetCurrentLine())
+         if self.GetLine(self.GetCurrentLine()).strip() == "":
+             self.InsertText(pos, "#<--")
+         else:
+             self.InsertText(pos, "\n#<--")
+ 
+     def selectCodeBlock(self):
+         self.OnDoubleClick(None)
+ 
+     def OnDoubleClick(self, evt):
+         """
+         Double-click used to select chunk of code between #--> and #<--
+         """
+         if "#-->" in self.GetLine(self.GetCurrentLine()):
+             first = self.GetCurrentLine()
+             last = self.GetLineCount()
+             self.LineDown()
+             while (self.GetCurrentLine() < self.GetLineCount()):
+                 if "#<--" in self.GetLine(self.GetCurrentLine()):
+                     last = self.GetCurrentLine() - 1
+                     break
+                 self.LineDown()
+             self.SetSelection(self.GetLineEndPosition(first)+1, 
+                               self.GetLineEndPosition(last)+1)
+             if evt is not None:
+                 evt.StopPropagation()
+         elif "#<--" in self.GetLine(self.GetCurrentLine()):
+             first = 0
+             last = self.GetCurrentLine() - 1
+             self.LineUp()
+             while (self.GetCurrentLine() > 0):
+                 if "#-->" in self.GetLine(self.GetCurrentLine()):
+                     first = self.GetCurrentLine()
+                     break
+                 self.LineUp()
+             self.SetSelection(self.GetLineEndPosition(first)+1, 
+                               self.GetLineEndPosition(last)+1)
+             if evt is not None:
+                 evt.StopPropagation()
+         else:
+             if evt is not None:
+                 evt.Skip()
++>>>>>>> upstream/0.7.6
  
      def OnQuickSearch(self, str, next=True):
          if self.GetSelection() != (0,0):
@@@ -4129,10 -4380,10 +4448,17 @@@
              dlg.ShowModal()
          except:
              pass
++<<<<<<< HEAD
 +
 +    def OnChar(self, evt):
 +        propagate = True
 +
++=======
+ 
+     def OnChar(self, evt):
+         propagate = True
+ 
++>>>>>>> upstream/0.7.6
          if chr(evt.GetKeyCode()) in ['[', '{', '(', '"', '`'] and self.auto_comp_container:
              if chr(evt.GetKeyCode()) == '[':
                  self.AddText('[]')
@@@ -4239,10 -4490,6 +4565,13 @@@
          elif evt.GetKeyCode() == ord('L') and ControlDown():
              self.GetParent().GetParent().GetParent().GetParent().GetParent().gotoLine(None)
              propagate = False
++<<<<<<< HEAD
 +        # Send line/selection to pyo background server
 +        elif evt.GetKeyCode() == ord('T') and ControlDown():
 +            self.GetParent().GetParent().GetParent().GetParent().GetParent().sendSelectionToBackgroundServer(None)
 +            propagate = False
++=======
++>>>>>>> upstream/0.7.6
  
          # Process Return key --- automatic indentation
          elif evt.GetKeyCode() == wx.WXK_RETURN:
@@@ -4323,7 -4570,7 +4652,11 @@@
          #     for i in range(self.GetLineCount()):
          #         pos = self.GetLineEndPosition(i)
          #         if self.GetCharAt(pos-1) != 172:
++<<<<<<< HEAD
 +        #             self.InsertTextUTF8(pos, "¬")
++=======
+         #             self.InsertTextUTF8(pos, "¬")
++>>>>>>> upstream/0.7.6
          self.moveMarkers()
          self.checkScrollbar()
          self.OnModified()
@@@ -4449,6 -4696,6 +4782,7 @@@
                  if lastChild > lineNum:
                      self.HideLines(lineNum+1, lastChild)
              lineNum = lineNum + 1
++<<<<<<< HEAD
  
      def ExpandAll(self):
          lineCount = self.GetLineCount()
@@@ -4462,6 -4709,6 +4796,21 @@@
                  lineNum = lineNum - 1
              lineNum = lineNum + 1
  
++=======
++
++    def ExpandAll(self):
++        lineCount = self.GetLineCount()
++        lineNum = 0
++        while lineNum < lineCount:
++            level = self.GetFoldLevel(lineNum)
++            if level & stc.STC_FOLDLEVELHEADERFLAG and \
++               (level & stc.STC_FOLDLEVELNUMBERMASK) == stc.STC_FOLDLEVELBASE:
++                self.SetFoldExpanded(lineNum, True)
++                lineNum = self.Expand(lineNum, True)
++                lineNum = lineNum - 1
++            lineNum = lineNum + 1
++
++>>>>>>> upstream/0.7.6
      def ToggleFoldAll(self):
          lineCount = self.GetLineCount()
          expanding = True
@@@ -4691,7 -4938,7 +5040,11 @@@ class OutputLogPanel(wx.Panel)
          self.processPopup.Append("%d :: %s" % (procID, filename))
          self.processPopup.SetStringSelection("%d :: %s" % (procID, filename))
          self.running += 1
++<<<<<<< HEAD
 +        self.runningLabel.SetLabel("Running: %d" % self.running)
++=======
+         self.runningLabel.SetLabel(" Running: %d" % self.running)
++>>>>>>> upstream/0.7.6
          self.editor.setLog("")
  
      def removeProcess(self, procID, filename):
@@@ -4699,7 -4946,7 +5052,7 @@@
          del self.mainPanel.mainFrame.processes[procID]
          self.processPopup.Delete(self.processPopup.GetItems().index(str))
          self.running -= 1
-         self.runningLabel.SetLabel("Running: %d" % self.running)
+         self.runningLabel.SetLabel(" Running: %d" % self.running)
  
      def killProcess(self, evt):
          str = self.processPopup.GetStringSelection()
@@@ -4707,10 -4954,12 +5060,15 @@@
              procID = int(str.split("::")[0].strip())
              thread = self.mainPanel.mainFrame.processes[procID][0]
              thread.kill()
+             if procID == 1000:
+                 self.mainPanel.mainFrame.resetBackgroundServerMenu()
+ 
+     def appendToLog(self, text):
+         self.editor.appendToLog(text)
  
 +    def appendToLog(self, text):
 +        self.editor.appendToLog(text)
 +
      def setLog(self, text):
          self.editor.setLog(text)
  
@@@ -4778,12 -5027,13 +5136,13 @@@ TOOL_REFRESH_TREE_ID = 1
  class ProjectTree(wx.Panel):
      """Project panel"""
      def __init__(self, parent, mainPanel, size):
-         wx.Panel.__init__(self, parent, -1, size=size, style=wx.WANTS_CHARS | wx.SUNKEN_BORDER | wx.EXPAND)
+         wx.Panel.__init__(self, parent, -1, size=size, 
+                           style=wx.WANTS_CHARS|wx.SUNKEN_BORDER|wx.EXPAND)
          self.SetMinSize((150, -1))
          self.mainPanel = mainPanel
  
          self.projectDict = {}
-         self.selected = None
+         self.selectedItem = None
          self.edititem = self.editfolder = self.itempath = self.scope = None
  
          tsize = (24, 24)
@@@ -4797,16 -5047,20 +5156,25 @@@
          toolbarbox = wx.BoxSizer(wx.HORIZONTAL)
          self.toolbar = wx.ToolBar(self, -1, size=(-1,36))
          self.toolbar.SetToolBitmapSize(tsize)
-         self.toolbar.AddLabelTool(TOOL_ADD_FILE_ID, "Add File", file_add_bmp, shortHelp="Add File")
+         self.toolbar.AddLabelTool(TOOL_ADD_FILE_ID, "Add File", 
+                                   file_add_bmp, shortHelp="Add File")
+         self.toolbar.AddLabelTool(TOOL_ADD_FOLDER_ID, "Add Folder", 
+                                   folder_add_bmp, shortHelp="Add Folder")
+         self.toolbar.AddLabelTool(TOOL_REFRESH_TREE_ID, "Refresh Tree", 
+                                   refresh_tree_bmp, shortHelp="Refresh Tree")
          self.toolbar.EnableTool(TOOL_ADD_FILE_ID, False)
++<<<<<<< HEAD
 +        self.toolbar.AddLabelTool(TOOL_ADD_FOLDER_ID, "Add Folder", folder_add_bmp, shortHelp="Add Folder")
 +        self.toolbar.AddLabelTool(TOOL_REFRESH_TREE_ID, "Refresh Tree", refresh_tree_bmp, shortHelp="Refresh Tree")
++=======
++>>>>>>> upstream/0.7.6
          self.toolbar.Realize()
          toolbarbox.Add(self.toolbar, 1, wx.ALIGN_LEFT | wx.EXPAND, 0)
  
          tb2 = wx.ToolBar(self, -1, size=(-1,36))
          tb2.SetToolBitmapSize(tsize)
-         tb2.AddLabelTool(15, "Close Panel", close_panel_bmp, shortHelp="Close Panel")
+         tb2.AddLabelTool(15, "Close Panel", close_panel_bmp, 
+                          shortHelp="Close Panel")
          tb2.Realize()
          toolbarbox.Add(tb2, 0, wx.ALIGN_RIGHT, 0)
  
@@@ -4817,30 -5071,35 +5185,35 @@@
  
          self.sizer.Add(toolbarbox, 0, wx.EXPAND)
  
-         self.tree = wx.TreeCtrl(self, -1, (0, 26), size, wx.TR_DEFAULT_STYLE|wx.TR_HIDE_ROOT|wx.SUNKEN_BORDER|wx.EXPAND)
+         stls = wx.TR_DEFAULT_STYLE|wx.TR_HIDE_ROOT|wx.SUNKEN_BORDER|wx.EXPAND
+         self.tree = wx.TreeCtrl(self, -1, (0, 26), size, stls)
          self.tree.SetBackgroundColour(STYLES['background']['colour'])
  
          if PLATFORM == 'darwin':
-             self.tree.SetFont(wx.Font(11, wx.ROMAN, wx.NORMAL, wx.NORMAL, face=STYLES['face']))
-         elif PLATFORM == 'win32':
-             self.tree.SetFont(wx.Font(8, wx.ROMAN, wx.NORMAL, wx.NORMAL, face=STYLES['face']))
+             pt = 11
          else:
-             self.tree.SetFont(wx.Font(8, wx.ROMAN, wx.NORMAL, wx.NORMAL, face=STYLES['face']))
+             pt = 8
+         fnt = wx.Font(pt, wx.ROMAN, wx.NORMAL, wx.NORMAL, face=STYLES['face'])
+         self.tree.SetFont(fnt)
  
          self.sizer.Add(self.tree, 1, wx.EXPAND)
          self.SetSizer(self.sizer)
  
          isz = (12,12)
          self.il = wx.ImageList(isz[0], isz[1])
-         self.fldridx     = self.il.Add(wx.ArtProvider_GetBitmap(wx.ART_FOLDER,      wx.ART_OTHER, isz))
-         self.fldropenidx = self.il.Add(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN,   wx.ART_OTHER, isz))
-         self.fileidx     = self.il.Add(wx.ArtProvider_GetBitmap(wx.ART_NORMAL_FILE, wx.ART_OTHER, isz))
+         bmp = wx.ArtProvider_GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, isz)
+         self.fldridx = self.il.Add(bmp)
+         bmp = wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN, wx.ART_OTHER, isz)
+         self.fldropenidx = self.il.Add(bmp)
+         bmp = wx.ArtProvider_GetBitmap(wx.ART_NORMAL_FILE, wx.ART_OTHER, isz)
+         self.fileidx = self.il.Add(bmp)
  
          self.tree.SetImageList(self.il)
          self.tree.SetSpacing(12)
          self.tree.SetIndent(6)
  
-         self.root = self.tree.AddRoot("EPyo_Project_tree", self.fldridx, self.fldropenidx, None)
+         self.root = self.tree.AddRoot("EPyo_Project_tree", self.fldridx, 
+                                       self.fldropenidx, None)
          self.tree.SetItemTextColour(self.root, STYLES['default']['colour'])
  
          self.tree.Bind(wx.EVT_TREE_END_LABEL_EDIT, self.OnEndEdit)
@@@ -4873,7 -5132,8 +5246,12 @@@
          expanded = []
          self._tree_analyze(self.root, expanded)
          self.tree.DeleteAllItems()
++<<<<<<< HEAD
 +        self.root = self.tree.AddRoot("EPyo_Project_tree", self.fldridx, self.fldropenidx, None)
++=======
+         self.root = self.tree.AddRoot("EPyo_Project_tree", self.fldridx, 
+                                       self.fldropenidx, None)
++>>>>>>> upstream/0.7.6
          for folder, path in self.projectDict.items():
              self.loadFolder(path)
          self._tree_restore(self.root, expanded)
@@@ -4881,62 -5141,48 +5259,48 @@@
      def loadFolder(self, dirPath):
          folderName = os.path.split(dirPath)[1]
          self.projectDict[folderName] = dirPath
-         projectDir = {}
          self.mainPanel.mainFrame.showProjectTree(True)
-         for root, dirs, files in os.walk(dirPath):
-             if os.path.split(root)[1][0] != '.' and os.path.split(root)[1] != "build":
-                 if root == dirPath:
-                     child = self.tree.AppendItem(self.root, folderName, self.fldridx, self.fldropenidx, None)
-                     self.tree.SetItemTextColour(child, STYLES['default']['colour'])
-                     if dirs:
-                         ddirs = [dir for dir in dirs if dir[0] != '.' and dir != "build"]
-                         for dir in sorted(ddirs):
-                             subfol = self.tree.AppendItem(child, "%s" % dir, self.fldridx, self.fldropenidx, None)
-                             projectDir[dir] = subfol
-                             self.tree.SetItemTextColour(subfol, STYLES['default']['colour'])
-                     if files:
-                         ffiles = [file for file in files if file[0] != '.' and not file.endswith("~") and os.path.splitext(file)[1].strip(".") in ALLOWED_EXT]
-                         for file in sorted(ffiles):
-                             item = self.tree.AppendItem(child, "%s" % file, self.fileidx, self.fileidx, None)
-                             self.tree.SetItemTextColour(item, STYLES['default']['colour'])
-                 else:
-                     if os.path.split(root)[1] in projectDir.keys():
-                         parent = projectDir[os.path.split(root)[1]]
-                         if dirs:
-                             ddirs = [dir for dir in dirs if dir[0] != '.' and "build/" not in root]
-                             for dir in sorted(ddirs):
-                                 subfol = self.tree.AppendItem(parent, "%s" % dir, self.fldridx, self.fldropenidx, None)
-                                 projectDir[dir] = subfol
-                                 self.tree.SetItemTextColour(subfol, STYLES['default']['colour'])
-                         if files:
-                             ffiles = [file for file in files if file[0] != '.' and not file.endswith("~") and os.path.splitext(file)[1].strip(".") in ALLOWED_EXT]
-                             for file in sorted(ffiles):
-                                 item = self.tree.AppendItem(parent, "%s" % file, self.fileidx, self.fileidx, None)
-                                 self.tree.SetItemTextColour(item, STYLES['default']['colour'])
-         self.tree.SortChildren(self.root)
-         self.tree.SortChildren(child)
+         item = self.tree.AppendItem(self.root, folderName, self.fldridx, 
+                                     self.fldropenidx, None)
+         self.tree.SetPyData(item, dirPath)
+         self.tree.SetItemTextColour(item, STYLES['default']['colour'])
+         self.buildRecursiveTree(dirPath, item)
+ 
+     def buildRecursiveTree(self, dir, item):
+         elems = [f for f in os.listdir(dir) if f[0] != "."]
+         for elem in sorted(elems):
+             child = None
+             path = os.path.join(dir, elem)
+             if os.path.isfile(path):
+                 if not path.endswith("~") and \
+                        os.path.splitext(path)[1].strip(".") in ALLOWED_EXT:
+                     child = self.tree.AppendItem(item, elem, self.fileidx, 
+                                                  self.fileidx)
+                     self.tree.SetPyData(child, os.path.join(dir, path))
+             elif os.path.isdir(path):
+                 if elem != "build":
+                     child = self.tree.AppendItem(item, elem, self.fldridx, 
+                                                  self.fldropenidx)
+                     self.tree.SetPyData(child, os.path.join(dir, path))
+                     self.buildRecursiveTree(path, child)
+             if child is not None:
+                 self.tree.SetItemTextColour(child, STYLES['default']['colour'])
  
      def onAdd(self, evt):
          id = evt.GetId()
          treeItemId = self.tree.GetSelection()
-         if self.selected != None:
-             for dirPath in self.projectDict.keys():
-                 for root, dirs, files in os.walk(self.projectDict[dirPath]):
-                     if self.selected == os.path.split(root)[1]:
-                         self.scope = root
-                         break
-                     elif self.selected in dirs:
-                         self.scope = os.path.join(root, self.selected)
-                         break
-                     elif self.selected in files:
-                         self.scope = root
-                         treeItemId = self.tree.GetItemParent(treeItemId)
-                         break
-                 if self.scope != None:
-                     break
-         elif self.selected == None and id == TOOL_ADD_FOLDER_ID:
-             dlg = wx.DirDialog(self, "Choose a directory where to save your folder:",
-                               defaultPath=os.path.expanduser("~"), style=wx.DD_DEFAULT_STYLE)
+         if self.selectedItem != None:
+             selPath = self.tree.GetPyData(self.selectedItem)
+             if os.path.isdir(selPath):
+                 self.scope = selPath
+             elif os.path.isfile(selPath):
+                 treeItemId = self.tree.GetItemParent(treeItemId)
+                 self.scope = self.tree.GetPyData(treeItemId)
+         elif self.selectedItem == None and id == TOOL_ADD_FOLDER_ID:
+             dlg = wx.DirDialog(self, 
+                                "Choose directory where to save your folder:",
+                                defaultPath=os.path.expanduser("~"), 
+                                style=wx.DD_DEFAULT_STYLE)
              if dlg.ShowModal() == wx.ID_OK:
                  self.scope = dlg.GetPath()
                  dlg.Destroy()
@@@ -4945,11 -5191,14 +5309,14 @@@
                  return
              treeItemId = self.tree.GetRootItem()
          if id == TOOL_ADD_FILE_ID:
-             item = self.tree.AppendItem(treeItemId, "Untitled", self.fileidx, self.fileidx, None)
+             item = self.tree.AppendItem(treeItemId, "Untitled", self.fileidx, 
+                                         self.fileidx, None)
              self.edititem = item
          else:
-             item = self.tree.AppendItem(treeItemId, "Untitled", self.fldridx, self.fldropenidx, None)
+             item = self.tree.AppendItem(treeItemId, "Untitled", self.fldridx, 
+                                         self.fldropenidx, None)
              self.editfolder = item
+         self.tree.SetPyData(item, os.path.join(self.scope, "Untitled"))
          self.tree.SetItemTextColour(item, STYLES['default']['colour'])
          self.tree.EnsureVisible(item)
          if PLATFORM == "darwin":
@@@ -4978,14 -5227,8 +5345,8 @@@
      def OnRightDown(self, event):
          pt = event.GetPosition();
          self.edititem, flags = self.tree.HitTest(pt)
-         item = self.edititem
-         if item:
-             itemlist = []
-             while self.tree.GetItemText(item) not in self.projectDict.keys():
-                 itemlist.insert(0, self.tree.GetItemText(item))
-                 item = self.tree.GetItemParent(item)
-             itemlist.insert(0, self.projectDict[self.tree.GetItemText(item)])
-             self.itempath = os.path.join(*itemlist)
+         if self.edititem:
+             self.itempath = self.tree.GetPyData(self.edititem)
              self.select(self.edititem)
              self.tree.EditLabel(self.edititem)
          else:
@@@ -4995,14 -5238,18 +5356,18 @@@
          if self.edititem and self.itempath:
              self.select(self.edititem)
              head, tail = os.path.split(self.itempath)
-             newpath = os.path.join(head, event.GetLabel())
-             os.rename(self.itempath, newpath)
+             newlabel = event.GetLabel()
+             if newlabel != "":
+                 newpath = os.path.join(head, event.GetLabel())
+                 os.rename(self.itempath, newpath)
+                 self.tree.SetPyData(self.edititem, newpath)
          elif self.edititem and self.scope:
              newitem = event.GetLabel()
              if not newitem:
                  newitem = "Untitled"
                  wx.CallAfter(self.tree.SetItemText, self.edititem, newitem)
              newpath = os.path.join(self.scope, newitem)
+             self.tree.SetPyData(self.edititem, newpath)
              f = open(newpath, "w")
              f.close()
              self.mainPanel.addPage(newpath)
@@@ -5012,8 -5259,9 +5377,9 @@@
                  newitem = "Untitled"
                  wx.CallAfter(self.tree.SetItemText, self.editfolder, newitem)
              newpath = os.path.join(self.scope, newitem)
+             self.tree.SetPyData(self.editfolder, newpath)
              os.mkdir(newpath)
-             if self.selected == None:
+             if self.selectedItem == None:
                  self.projectDict[newitem] = self.scope
          self.edititem = self.editfolder = self.itempath = self.scope = None
  
@@@ -5039,25 -5287,17 +5405,29 @@@
      def openPage(self, item):
          hasChild = self.tree.ItemHasChildren(item)
          if not hasChild:
++<<<<<<< HEAD
 +            parent = None
 +            ritem = item
 +            filename = self.tree.GetItemText(ritem)
 +            while self.tree.GetItemParent(ritem) != self.tree.GetRootItem():
 +                ritem = self.tree.GetItemParent(ritem)
 +                parent = self.tree.GetItemText(ritem)
 +                filename = os.path.join(parent, filename)
 +            dirPath = os.path.split(self.projectDict[parent])[0]
 +            path = os.path.join(dirPath, filename)
++=======
+             path = self.tree.GetPyData(item)
++>>>>>>> upstream/0.7.6
              self.mainPanel.addPage(path)
  
      def select(self, item):
          self.tree.SelectItem(item)
-         self.selected = self.tree.GetItemText(item)
+         self.selectedItem = item
          self.toolbar.EnableTool(TOOL_ADD_FILE_ID, True)
  
      def unselect(self):
          self.tree.UnselectAll()
-         self.selected = None
+         self.selectedItem = None
          self.toolbar.EnableTool(TOOL_ADD_FILE_ID, False)
  
      def onCloseProjectPanel(self, evt):
@@@ -5065,7 -5305,8 +5435,8 @@@
  
  class MarkersListScroll(scrolled.ScrolledPanel):
      def __init__(self, parent, id=-1, pos=(25,25), size=(500,400)):
-         scrolled.ScrolledPanel.__init__(self, parent, wx.ID_ANY, pos=(0,0), size=size, style=wx.SUNKEN_BORDER)
+         scrolled.ScrolledPanel.__init__(self, parent, wx.ID_ANY, pos=(0,0), 
+                                         size=size, style=wx.SUNKEN_BORDER)
          self.parent = parent
          self.SetBackgroundColour(STYLES['background']['colour'])
          self.arrow_bit = catalog['left_arrow.png'].GetBitmap()
@@@ -5254,7 -5495,7 +5625,7 @@@ class PreferencesDialog(wx.Dialog)
  
          mainSizer.Add(wx.StaticLine(self, -1), 0, wx.EXPAND|wx.BOTTOM|wx.LEFT|wx.RIGHT, 5)
  
-         lbl = wx.StaticText(self, label="Background Pyo Server")
+         lbl = wx.StaticText(self, label="=== Background Pyo Server ===")
          lbl.SetFont(font)
          mainSizer.Add(lbl, 0, wx.BOTTOM|wx.LEFT|wx.RIGHT, 10)
  
@@@ -5265,59 -5506,76 +5636,76 @@@
          self.server_args = wx.TextCtrl(self, size=(500,-1), value=BACKGROUND_SERVER_ARGS)
          self.server_args.SetFont(entryfont)
          ctrlSizer.Add(self.server_args, 0, wx.ALL|wx.EXPAND, 5)
-         but = wx.Button(self, id=wx.ID_ANY, label="Restore default args")
+         but = wx.Button(self, id=wx.ID_ANY, label=" Restore default args ")
          but.Bind(wx.EVT_BUTTON, self.setServerDefaultArgs)
          ctrlSizer.Add(but, 0, wx.ALL, 5)            
          mainSizer.Add(ctrlSizer, 0, wx.BOTTOM|wx.LEFT|wx.RIGHT, 5)
  
-         popupSizer = wx.FlexGridSizer(2, 3, 5, 10)
-         for label in ["Output Driver", "Input Driver", "Midi Interface"]:
+         popupSizer = wx.FlexGridSizer(2, 4, 5, 10)
+         for label in ["Input Driver", "Output Driver", "Midi Input", "Midi Output"]:
              lbl = wx.StaticText(self, label=label)
              lbl.SetFont(font)
              popupSizer.Add(lbl)
  
-         preferedDriver = PREFERENCES.get("background_server_out_device", "")
-         driverList, driverIndexes = pa_get_output_devices()
-         driverList = [ensureNFD(driver) for driver in driverList]
-         defaultDriver = pa_get_default_output()
-         self.popupOutDriver = wx.Choice(self, choices=driverList)
-         popupSizer.Add(self.popupOutDriver)
-         if preferedDriver and preferedDriver in driverList:
-             driverIndex = driverIndexes[driverList.index(preferedDriver)]
-             self.popupOutDriver.SetStringSelection(preferedDriver)
-         elif defaultDriver:
-             self.popupOutDriver.SetSelection(driverIndexes.index(defaultDriver))
- 
+         cX = 160
          preferedDriver = PREFERENCES.get("background_server_in_device", "")
          driverList, driverIndexes = pa_get_input_devices()
          driverList = [ensureNFD(driver) for driver in driverList]
          defaultDriver = pa_get_default_input()
-         self.popupInDriver = wx.Choice(self, choices=driverList)
-         popupSizer.Add(self.popupInDriver)
+         self.popupInDriver = wx.Choice(self, choices=driverList, size=(cX,-1))
+         popupSizer.Add(self.popupInDriver, 1, wx.EXPAND, 5)
          if preferedDriver and preferedDriver in driverList:
              driverIndex = driverIndexes[driverList.index(preferedDriver)]
              self.popupInDriver.SetStringSelection(preferedDriver)
          elif defaultDriver:
              self.popupInDriver.SetSelection(driverIndexes.index(defaultDriver))
  
+         preferedDriver = PREFERENCES.get("background_server_out_device", "")
+         driverList, driverIndexes = pa_get_output_devices()
+         driverList = [ensureNFD(driver) for driver in driverList]
+         defaultDriver = pa_get_default_output()
+         self.popupOutDriver = wx.Choice(self, choices=driverList, size=(cX,-1))
+         popupSizer.Add(self.popupOutDriver, 1, wx.EXPAND, 5)
+         if preferedDriver and preferedDriver in driverList:
+             driverIndex = driverIndexes[driverList.index(preferedDriver)]
+             self.popupOutDriver.SetStringSelection(preferedDriver)
+         elif defaultDriver:
+             self.popupOutDriver.SetSelection(driverIndexes.index(defaultDriver))
+ 
+         # TODO: Added "all" interfaces option in input and output
          preferedDriver = PREFERENCES.get("background_server_midiin_device", "")
          driverList, driverIndexes = pm_get_input_devices()
          driverList = [ensureNFD(driver) for driver in driverList]
          if driverList != []:
              defaultDriver = pm_get_default_input()
-             self.popupMidiInDriver = wx.Choice(self, choices=driverList)
-             popupSizer.Add(self.popupMidiInDriver)
+             self.popupMidiInDriver = wx.Choice(self, choices=driverList, size=(cX,-1))
              if preferedDriver and preferedDriver in driverList:
                  driverIndex = driverIndexes[driverList.index(preferedDriver)]
                  self.popupMidiInDriver.SetStringSelection(preferedDriver)
-             elif defaultDriver:
+             elif defaultDriver >= 0:
                  self.popupMidiInDriver.SetSelection(driverIndexes.index(defaultDriver))
          else:
              self.popupMidiInDriver = wx.Choice(self, choices=["No Interface"])
-             popupSizer.Add(self.popupMidiInDriver)
              self.popupMidiInDriver.SetSelection(0)
+         popupSizer.Add(self.popupMidiInDriver, 1, wx.EXPAND, 5)
+ 
+         preferedDriver = PREFERENCES.get("background_server_midiout_device", "")
+         driverList, driverIndexes = pm_get_output_devices()
+         driverList = [ensureNFD(driver) for driver in driverList]
+         if driverList != []:
+             defaultDriver = pm_get_default_output()
+             self.popupMidiOutDriver = wx.Choice(self, choices=driverList, size=(cX,-1))
+             if preferedDriver and preferedDriver in driverList:
+                 driverIndex = driverIndexes[driverList.index(preferedDriver)]
+                 self.popupMidiOutDriver.SetStringSelection(preferedDriver)
+             elif defaultDriver >= 0:
+                 self.popupMidiOutDriver.SetSelection(driverIndexes.index(defaultDriver))
+         else:
+             self.popupMidiOutDriver = wx.Choice(self, choices=["No Interface"])
+             self.popupMidiOutDriver.SetSelection(0)
+         popupSizer.Add(self.popupMidiOutDriver, 1, wx.EXPAND, 5)
  
-         mainSizer.Add(popupSizer, 0, wx.BOTTOM|wx.LEFT|wx.RIGHT, 10)
+         mainSizer.Add(popupSizer, 0, wx.EXPAND|wx.BOTTOM|wx.LEFT|wx.RIGHT, 10)
  
          mainSizer.Add(wx.StaticLine(self, -1), 0, wx.EXPAND|wx.BOTTOM|wx.LEFT|wx.RIGHT, 5)
  
@@@ -5327,8 -5585,8 +5715,8 @@@
          ctrlSizer = wx.BoxSizer(wx.HORIZONTAL)
          self.entry_ext = wx.TextCtrl(self, size=(500,-1), value=", ".join(ALLOWED_EXT))
          self.entry_ext.SetFont(entryfont)
-         ctrlSizer.Add(self.entry_ext, 0, wx.ALL|wx.EXPAND, 5)
-         mainSizer.Add(ctrlSizer, 0, wx.BOTTOM|wx.LEFT|wx.RIGHT, 5)
+         ctrlSizer.Add(self.entry_ext, 1, wx.ALL|wx.EXPAND, 5)
+         mainSizer.Add(ctrlSizer, 0, wx.EXPAND|wx.BOTTOM|wx.LEFT|wx.RIGHT, 5)
  
          btnSizer = self.CreateButtonSizer(wx.CANCEL|wx.OK)
   
@@@ -5409,6 -5667,9 +5797,9 @@@
          midiDevice = self.popupMidiInDriver.GetStringSelection()
          if midiDevice != "No Interface":
              PREFERENCES["background_server_midiin_device"] = midiDevice
+         midiDevice = self.popupMidiOutDriver.GetStringSelection()
+         if midiDevice != "No Interface":
+             PREFERENCES["background_server_midiout_device"] = midiDevice
  
  class STCPrintout(wx.Printout):
      """Specific printing support of the wx.StyledTextCtrl for the wxPython
@@@ -5822,7 -6083,8 +6213,8 @@@
          if self.border_around_text:
              dc.SetPen(wx.BLACK_PEN)
              dc.SetBrush(wx.TRANSPARENT_BRUSH)
-             dc.DrawRectangle(self.x1, self.y1, self.x2 - self.x1 + 1, self.y2 - self.y1 + 1)
+             dc.DrawRectangle(self.x1, self.y1, self.x2 - self.x1 + 1, 
+                              self.y2 - self.y1 + 1)
  
  class MyFileDropTarget(wx.FileDropTarget):
      def __init__(self, window):
@@@ -5844,12 -6106,14 +6236,22 @@@ class EPyoApp(wx.App)
          wx.App.__init__(self, *args, **kwargs)
  
      def OnInit(self):
++<<<<<<< HEAD
 +        X,Y = wx.SystemSettings.GetMetric(wx.SYS_SCREEN_X), wx.SystemSettings.GetMetric(wx.SYS_SCREEN_Y)
++=======
+         X = wx.SystemSettings.GetMetric(wx.SYS_SCREEN_X)
+         Y = wx.SystemSettings.GetMetric(wx.SYS_SCREEN_Y)
++>>>>>>> upstream/0.7.6
          if X < 850: X -= 50
          else: X = 850
          if Y < 750: Y -= 50
          else: Y = 750
++<<<<<<< HEAD
 +        self.frame = MainFrame(None, -1, title='E-Pyo Editor', pos=(10,25), size=(X, Y))
++=======
+         self.frame = MainFrame(None, -1, title='E-Pyo Editor', 
+                                pos=(10,25), size=(X, Y))
++>>>>>>> upstream/0.7.6
          self.frame.Show()
          return True
  
diff --combined utils/info.plist
index 8b9e960,70c56f7..6b68d78
--- a/utils/info.plist
+++ b/utils/info.plist
@@@ -32,17 -32,17 +32,29 @@@
  	<key>CFBundleIdentifier</key>
  	<string>org.pythonmac.unspecified.E-Pyo</string>
  	<key>CFBundleInfoDictionaryVersion</key>
++<<<<<<< HEAD
 +	<string>0.7.5</string>
++=======
+ 	<string>0.7.6</string>
++>>>>>>> upstream/0.7.6
  	<key>CFBundleName</key>
  	<string>E-Pyo</string>
  	<key>CFBundlePackageType</key>
  	<string>APPL</string>
  	<key>CFBundleShortVersionString</key>
++<<<<<<< HEAD
 +	<string>0.7.5</string>
 +	<key>CFBundleSignature</key>
 +	<string>????</string>
 +	<key>CFBundleVersion</key>
 +	<string>0.7.5</string>
++=======
+ 	<string>0.7.6</string>
+ 	<key>CFBundleSignature</key>
+ 	<string>????</string>
+ 	<key>CFBundleVersion</key>
+ 	<string>0.7.6</string>
++>>>>>>> upstream/0.7.6
  	<key>LSHasLocalizedDisplayName</key>
  	<false/>
  	<key>NSAppleScriptEnabled</key>

-- 
python-pyo packaging



More information about the pkg-multimedia-commits mailing list