Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
OpenDAS
Torchaudio
Commits
0f0d0af3
Unverified
Commit
0f0d0af3
authored
Jun 25, 2020
by
moto
Committed by
GitHub
Jun 25, 2020
Browse files
Replace sox_effects init/list/shutdown with TS binding (#748)
parent
0c847aaa
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
96 additions
and
85 deletions
+96
-85
torchaudio/csrc/register.cpp
torchaudio/csrc/register.cpp
+12
-0
torchaudio/csrc/sox.cpp
torchaudio/csrc/sox.cpp
+0
-33
torchaudio/csrc/sox.h
torchaudio/csrc/sox.h
+0
-7
torchaudio/csrc/sox_effects.cpp
torchaudio/csrc/sox_effects.cpp
+54
-0
torchaudio/csrc/sox_effects.h
torchaudio/csrc/sox_effects.h
+19
-0
torchaudio/sox_effects/__init__.py
torchaudio/sox_effects/__init__.py
+2
-0
torchaudio/sox_effects/sox_effects.py
torchaudio/sox_effects/sox_effects.py
+9
-45
No files found.
torchaudio/csrc/register.cpp
View file @
0f0d0af3
#ifndef TORCHAUDIO_REGISTER_H
#ifndef TORCHAUDIO_REGISTER_H
#define TORCHAUDIO_REGISTER_H
#define TORCHAUDIO_REGISTER_H
#include <torchaudio/csrc/sox_effects.h>
#include <torchaudio/csrc/sox_io.h>
#include <torchaudio/csrc/sox_io.h>
#include <torchaudio/csrc/typedefs.h>
#include <torchaudio/csrc/typedefs.h>
...
@@ -20,6 +21,17 @@ static auto registerGetInfo = torch::RegisterOperators().op(
...
@@ -20,6 +21,17 @@ static auto registerGetInfo = torch::RegisterOperators().op(
"torchaudio::sox_io_get_info(str path) -> __torch__.torch.classes.torchaudio.SignalInfo info"
)
"torchaudio::sox_io_get_info(str path) -> __torch__.torch.classes.torchaudio.SignalInfo info"
)
.
catchAllKernel
<
decltype
(
sox_io
::
get_info
),
&
sox_io
::
get_info
>
());
.
catchAllKernel
<
decltype
(
sox_io
::
get_info
),
&
sox_io
::
get_info
>
());
////////////////////////////////////////////////////////////////////////////////
// sox_effects.h
////////////////////////////////////////////////////////////////////////////////
static
auto
registerSoxEffects
=
torch
::
RegisterOperators
(
"torchaudio::sox_effects_initialize_sox_effects"
,
&
sox_effects
::
initialize_sox_effects
)
.
op
(
"torchaudio::sox_effects_shutdown_sox_effects"
,
&
sox_effects
::
shutdown_sox_effects
)
.
op
(
"torchaudio::sox_effects_list_effects"
,
&
sox_effects
::
list_effects
);
}
// namespace
}
// namespace
}
// namespace torchaudio
}
// namespace torchaudio
#endif
#endif
torchaudio/csrc/sox.cpp
View file @
0f0d0af3
...
@@ -82,17 +82,6 @@ std::tuple<sox_signalinfo_t, sox_encodinginfo_t> get_info(
...
@@ -82,17 +82,6 @@ std::tuple<sox_signalinfo_t, sox_encodinginfo_t> get_info(
return
std
::
make_tuple
(
fd
->
signal
,
fd
->
encoding
);
return
std
::
make_tuple
(
fd
->
signal
,
fd
->
encoding
);
}
}
std
::
vector
<
std
::
string
>
get_effect_names
()
{
sox_effect_fn_t
const
*
fns
=
sox_get_effect_fns
();
std
::
vector
<
std
::
string
>
sv
;
for
(
int
i
=
0
;
fns
[
i
];
++
i
)
{
const
sox_effect_handler_t
*
eh
=
fns
[
i
]
();
if
(
eh
&&
eh
->
name
)
sv
.
push_back
(
eh
->
name
);
}
return
sv
;
}
int
read_audio_file
(
int
read_audio_file
(
const
std
::
string
&
file_name
,
const
std
::
string
&
file_name
,
at
::
Tensor
output
,
at
::
Tensor
output
,
...
@@ -186,16 +175,6 @@ void write_audio_file(
...
@@ -186,16 +175,6 @@ void write_audio_file(
}
}
}
}
int
initialize_sox
()
{
/* Initialization for sox effects. Only initialize once */
return
sox_init
();
}
int
shutdown_sox
()
{
/* Shutdown for sox effects. Do not shutdown between multiple calls */
return
sox_quit
();
}
int
build_flow_effects
(
const
std
::
string
&
file_name
,
int
build_flow_effects
(
const
std
::
string
&
file_name
,
at
::
Tensor
otensor
,
at
::
Tensor
otensor
,
bool
ch_first
,
bool
ch_first
,
...
@@ -489,20 +468,8 @@ PYBIND11_MODULE(_torchaudio, m) {
...
@@ -489,20 +468,8 @@ PYBIND11_MODULE(_torchaudio, m) {
"get_info"
,
"get_info"
,
&
torch
::
audio
::
get_info
,
&
torch
::
audio
::
get_info
,
"Gets information about an audio file"
);
"Gets information about an audio file"
);
m
.
def
(
"get_effect_names"
,
&
torch
::
audio
::
get_effect_names
,
"Gets the names of all available effects"
);
m
.
def
(
m
.
def
(
"build_flow_effects"
,
"build_flow_effects"
,
&
torch
::
audio
::
build_flow_effects
,
&
torch
::
audio
::
build_flow_effects
,
"build effects and flow chain into tensors"
);
"build effects and flow chain into tensors"
);
m
.
def
(
"initialize_sox"
,
&
torch
::
audio
::
initialize_sox
,
"initialize sox for effects"
);
m
.
def
(
"shutdown_sox"
,
&
torch
::
audio
::
shutdown_sox
,
"shutdown sox for effects"
);
}
}
torchaudio/csrc/sox.h
View file @
0f0d0af3
...
@@ -45,13 +45,6 @@ void write_audio_file(
...
@@ -45,13 +45,6 @@ void write_audio_file(
std
::
tuple
<
sox_signalinfo_t
,
sox_encodinginfo_t
>
get_info
(
std
::
tuple
<
sox_signalinfo_t
,
sox_encodinginfo_t
>
get_info
(
const
std
::
string
&
file_name
);
const
std
::
string
&
file_name
);
// get names of all sox effects
std
::
vector
<
std
::
string
>
get_effect_names
();
// Initialize and Shutdown SoX effects chain. These functions should only be run once.
int
initialize_sox
();
int
shutdown_sox
();
// Struct for build_flow_effects function
// Struct for build_flow_effects function
struct
SoxEffect
{
struct
SoxEffect
{
SoxEffect
()
:
ename
(
""
),
eopts
({
""
})
{
}
SoxEffect
()
:
ename
(
""
),
eopts
({
""
})
{
}
...
...
torchaudio/csrc/sox_effects.cpp
0 → 100644
View file @
0f0d0af3
#include <sox.h>
#include <torchaudio/csrc/sox_effects.h>
using
namespace
torch
::
indexing
;
namespace
torchaudio
{
namespace
sox_effects
{
namespace
{
enum
SoxEffectsResourceState
{
NotInitialized
,
Initialized
,
ShutDown
};
SoxEffectsResourceState
SOX_RESOURCE_STATE
=
NotInitialized
;
}
// namespace
void
initialize_sox_effects
()
{
if
(
SOX_RESOURCE_STATE
==
ShutDown
)
{
throw
std
::
runtime_error
(
"SoX Effects has been shut down. Cannot initialize again."
);
}
if
(
SOX_RESOURCE_STATE
==
NotInitialized
)
{
if
(
sox_init
()
!=
SOX_SUCCESS
)
{
throw
std
::
runtime_error
(
"Failed to initialize sox effects."
);
};
SOX_RESOURCE_STATE
=
Initialized
;
}
};
void
shutdown_sox_effects
()
{
if
(
SOX_RESOURCE_STATE
==
NotInitialized
)
{
throw
std
::
runtime_error
(
"SoX Effects is not initialized. Cannot shutdown."
);
}
if
(
SOX_RESOURCE_STATE
==
Initialized
)
{
if
(
sox_quit
()
!=
SOX_SUCCESS
)
{
throw
std
::
runtime_error
(
"Failed to initialize sox effects."
);
};
SOX_RESOURCE_STATE
=
ShutDown
;
}
}
std
::
vector
<
std
::
string
>
list_effects
()
{
std
::
vector
<
std
::
string
>
names
;
const
sox_effect_fn_t
*
fns
=
sox_get_effect_fns
();
for
(
int
i
=
0
;
fns
[
i
];
++
i
)
{
const
sox_effect_handler_t
*
handler
=
fns
[
i
]();
if
(
handler
&&
handler
->
name
)
names
.
push_back
(
handler
->
name
);
}
return
names
;
}
}
// namespace sox_effects
}
// namespace torchaudio
torchaudio/csrc/sox_effects.h
0 → 100644
View file @
0f0d0af3
#ifndef TORCHAUDIO_SOX_EFFECTS_H
#define TORCHAUDIO_SOX_EFFECTS_H
#include <torch/script.h>
#include <torchaudio/csrc/typedefs.h>
namespace
torchaudio
{
namespace
sox_effects
{
void
initialize_sox_effects
();
void
shutdown_sox_effects
();
std
::
vector
<
std
::
string
>
list_effects
();
}
// namespace sox_effects
}
// namespace torchaudio
#endif
torchaudio/sox_effects/__init__.py
View file @
0f0d0af3
...
@@ -9,4 +9,6 @@ from .sox_effects import (
...
@@ -9,4 +9,6 @@ from .sox_effects import (
if
_mod_utils
.
is_module_available
(
'torchaudio._torchaudio'
):
if
_mod_utils
.
is_module_available
(
'torchaudio._torchaudio'
):
import
atexit
init_sox_effects
()
init_sox_effects
()
atexit
.
register
(
shutdown_sox_effects
)
torchaudio/sox_effects/sox_effects.py
View file @
0f0d0af3
import
atexit
from
typing
import
Any
,
Callable
,
List
,
Optional
,
Tuple
,
Union
from
typing
import
Any
,
Callable
,
List
,
Optional
,
Tuple
,
Union
import
torch
import
torch
...
@@ -13,19 +12,8 @@ if _mod_utils.is_module_available('torchaudio._torchaudio'):
...
@@ -13,19 +12,8 @@ if _mod_utils.is_module_available('torchaudio._torchaudio'):
from
torchaudio
import
_torchaudio
from
torchaudio
import
_torchaudio
_SOX_INITIALIZED
:
Optional
[
bool
]
=
False
# This variable has a micro lifecycle. (False -> True -> None)
# False: Not initialized
# True: Initialized
# None: Already shut down (should not be initialized again.)
_SOX_SUCCESS_CODE
=
0
# defined at
# https://fossies.org/dox/sox-14.4.2/sox_8h.html#a8e07e80cebeff3339265d89c387cea93a9ef2b87ec303edfe40751d9a85fadeeb
@
_mod_utils
.
requires_module
(
'torchaudio._torchaudio'
)
@
_mod_utils
.
requires_module
(
'torchaudio._torchaudio'
)
def
init_sox_effects
()
->
int
:
def
init_sox_effects
()
->
None
:
"""Initialize resources required to use ``SoxEffectsChain``
"""Initialize resources required to use ``SoxEffectsChain``
You do not need to call this function manually. It is called automatically.
You do not need to call this function manually. It is called automatically.
...
@@ -33,50 +21,26 @@ def init_sox_effects() -> int:
...
@@ -33,50 +21,26 @@ def init_sox_effects() -> int:
Once initialized, you do not need to call this function again across the multiple call of
Once initialized, you do not need to call this function again across the multiple call of
``SoxEffectsChain.sox_build_flow_effects``, though it is safe to do so as long as
``SoxEffectsChain.sox_build_flow_effects``, though it is safe to do so as long as
``shutdown_sox_effects`` is not called yet.
``shutdown_sox_effects`` is not called yet.
Once ``shutdown_sox_effects`` is called, you can no longer use SoX effects and
calling
Once ``shutdown_sox_effects`` is called, you can no longer use SoX effects and
this function
result
s
in
`RuntimeE
rror
`
.
initializing again will
result in
e
rror.
Note:
Note:
This function is not required for simple loading.
This function is not required for simple loading.
Returns:
int: Code corresponding to sox_error_t enum. See
https://fossies.org/dox/sox-14.4.2/sox_8h.html#a8e07e80cebeff3339265d89c387cea93
"""
"""
global
_SOX_INITIALIZED
torch
.
ops
.
torchaudio
.
sox_effects_initialize_sox_effects
()
if
_SOX_INITIALIZED
is
None
:
raise
RuntimeError
(
'SoX effects chain has been already shut down. Can not initialize again.'
)
if
not
_SOX_INITIALIZED
:
code
=
_torchaudio
.
initialize_sox
()
if
code
==
_SOX_SUCCESS_CODE
:
_SOX_INITIALIZED
=
True
atexit
.
register
(
shutdown_sox_effects
)
return
code
return
_SOX_SUCCESS_CODE
@
_mod_utils
.
requires_module
(
"torchaudio._torchaudio"
)
@
_mod_utils
.
requires_module
(
"torchaudio._torchaudio"
)
def
shutdown_sox_effects
()
->
int
:
def
shutdown_sox_effects
()
->
None
:
"""Clean up resources required to use ``SoxEffectsChain``
"""Clean up resources required to use ``SoxEffectsChain``
You do not need to call this function manually. It is called automatically.
You do not need to call this function manually. It is called automatically.
It is safe to call this function multiple times.
It is safe to call this function multiple times.
Once ``shutdown_sox_effects`` is called, you can no longer use SoX effects and calling
Once ``shutdown_sox_effects`` is called, you can no longer use SoX effects and
this function results in `RuntimeError`.
initializing again will result in error.
Returns:
int: Code corresponding to sox_error_t enum. See
https://fossies.org/dox/sox-14.4.2/sox_8h.html#a8e07e80cebeff3339265d89c387cea93
"""
"""
global
_SOX_INITIALIZED
torch
.
ops
.
torchaudio
.
sox_effects_shutdown_sox_effects
()
if
_SOX_INITIALIZED
:
code
=
_torchaudio
.
shutdown_sox
()
if
code
==
_SOX_INITIALIZED
:
_SOX_INITIALIZED
=
None
return
code
return
_SOX_SUCCESS_CODE
@
_mod_utils
.
requires_module
(
'torchaudio._torchaudio'
)
@
_mod_utils
.
requires_module
(
'torchaudio._torchaudio'
)
...
@@ -88,7 +52,7 @@ def effect_names() -> List[str]:
...
@@ -88,7 +52,7 @@ def effect_names() -> List[str]:
Example
Example
>>> EFFECT_NAMES = torchaudio.sox_effects.effect_names()
>>> EFFECT_NAMES = torchaudio.sox_effects.effect_names()
"""
"""
return
_
torchaudio
.
ge
t_effect
_name
s
()
return
torch
.
ops
.
torchaudio
.
sox_effects_lis
t_effects
()
@
_mod_utils
.
requires_module
(
'torchaudio._torchaudio'
)
@
_mod_utils
.
requires_module
(
'torchaudio._torchaudio'
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment