Miscellaneous functions
=======================

.. currentmodule:: pitchmeld

.. function:: lin2db(value:float) -> float

    Convert a linear amplitude value to a decibel value.

    :arg value: on a linear scale.

    :return:
        - `float` - The value on a decibel scale.


.. function:: db2lin(value:float) -> float

    Convert a decibel value to a linear amplitude value.

    :arg value: on a decibel scale.

    :return:
        - `float` - The value on a linear scale.


Multiprocessing
---------------

Pitchmeld Python SDK uses a C/C++ python extension and this is generally not safe to use with the 'fork' start method (ex. like pytorch, tensorflow, etc.)
Thus, when using multiprocessing, you need to use the 'spawn' start method instead of the 'fork' start method.

.. code-block:: python

    import multiprocessing
    multiprocessing.set_start_method('spawn', force=True)


Slow connection
---------------

In case you are on a slow connection, you can increase the timeout for the connection to the server.

.. code-block:: shell

    export PITCHMELD_TIMEOUT=20
    python -c "import pitchmeld; print(pitchmeld.__version__)"


Exit On Interrupt (EOI)
-----------------------

Many C/C++ written python modules won't react to a ctrl-c interruption (or equivalent).
The C/C++ part will first finish its execution and the python part will then handle any ctrl-c.

Calling ``pitchmeld.eoi()`` after loading the module

.. code-block:: python

    import pitchmeld
    pitchmeld.eoi()

allows any ctrl-c to kill the C/C++ part immediately.

You can deactivate ``eoi()`` with ``pitchmeld.uneoi()``

By default, this uncommon behavior is disabled.
