Skip to content
This repository has been archived by the owner on Nov 28, 2022. It is now read-only.

Commit

Permalink
Merge pull request #75 from finos/matthew/FixAudioSplitter
Browse files Browse the repository at this point in the history
fix audio splitter
  • Loading branch information
mgoldey authored Sep 16, 2019
2 parents d40fa74 + f65d5c0 commit eb2d962
Show file tree
Hide file tree
Showing 9 changed files with 83 additions and 34 deletions.
3 changes: 3 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ python:
- "3.7"
- "3.7-dev" # 3.7 development branch
# command to install dependencies
before_install:
- sudo apt-get update
- sudo apt-get install -y sox libsox-fmt-mp3
install:
- pip install -r requirements.txt
- pip install numpy
Expand Down
23 changes: 16 additions & 7 deletions asrtoolkit/convert_transcript.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,24 @@
"""

import argparse
import sys
import logging
from asrtoolkit.file_utils.script_input_validation import assign_if_valid
LOGGER = logging.getLogger(__name__)


def convert():
def check_input_file_validity(input_file):
if input_file is None:
LOGGER.error("Invalid input file {}".format(input_file))
sys.exit(1)


def convert(input_file, output_file):
input_file = assign_if_valid(input_file)
input_file.write(output_file)


def main():
parser = argparse.ArgumentParser(
description='convert between text file formats')
parser.add_argument('input_file',
Expand All @@ -22,13 +34,10 @@ def convert():
help='output file')
args = parser.parse_args()

input_file = assign_if_valid(args.input_file)
check_input_file_validity(args.input_file)

if input_file is not None:
input_file.write(args.output_file)
else:
LOGGER.error("Invalid input file {}".format(args.input_file))
convert(args.input_file, args.output_file)


if __name__ == "__main__":
convert()
main()
8 changes: 5 additions & 3 deletions asrtoolkit/file_utils/name_cleaners.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

import os


def get_extension(file_name):
"""
Returns file extension
Expand Down Expand Up @@ -44,7 +45,8 @@ def replace_char(input_char, file_name):
"check to make sure your audio files and transcript files match"
)
return os.sep.join(
file_name.split(os.sep)[:-1] + [basename(file_name).replace(c, "_")])
file_name.split(os.sep)[:-1] +
[basename(file_name).replace(c, "_")])

for c in chars_to_replace:
file_name = replace_char(c, file_name)
Expand All @@ -63,5 +65,5 @@ def generate_segmented_file_name(target_dir, file_name, iseg):
"""
Take a target location, a current location, and a segment number and generate a target filename
"""
return target_dir + os.sep + basename(strip_extension(file_name)) + \
"_seg_{:05d}.".format(iseg) + file_name.split(".")[-1]
return sanitize_hyphens(target_dir + os.sep + basename(strip_extension(file_name)) + \
"_seg_{:05d}.".format(iseg) + file_name.split(".")[-1])
53 changes: 32 additions & 21 deletions asrtoolkit/split_audio_file.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,29 @@
LOGGER = logging.getLogger(__name__)


def split_audio_file(source_audio_file, source_transcript, target_directory):
"""
Execute the split logic
"""
source_audio = audio_file(source_audio_file)
transcript = time_aligned_text(source_transcript)
source_audio.split(transcript, target_directory)


def validate_transcript(transcript):
"exit if invalid transcript"
if not valid_input_file(transcript):
LOGGER.error("Invalid transcript file {}".format(transcript))
sys.exit(1)


def validate_audio_file(source_audio_file):
if not valid_input_file(source_audio_file,
["mp3", "sph", "wav", "au", "raw"]):
LOGGER.error("Invalid audio file {}".format(source_audio_file))
sys.exit(1)


def main():
"""
Split audio file using transcript file
Expand All @@ -22,34 +45,22 @@ def main():
description=
"Split an audio file using valid segments from a transcript file. For this utility, transcript files must contain start/stop times."
)
parser.add_argument('--target-dir',
default='split',
parser.add_argument("--target-dir",
default="split",
required=False,
help="Path to target directory")
parser.add_argument('audio_file',
metavar='audio_file',
parser.add_argument("audio_file",
metavar="audio_file",
type=str,
help='input audio file')
parser.add_argument('transcript',
metavar='transcript',
help="input audio file")
parser.add_argument("transcript",
metavar="transcript",
type=str,
help='transcript')
help="transcript")

args = parser.parse_args()

if valid_input_file(args.transcript):
transcript = time_aligned_text(args.transcript)
else:
LOGGER.error("Invalid transcript file {}".format(args.transcript))
sys.exit(1)

if valid_input_file(args.audio_file, ["mp3", "sph", "wav", "au", "raw"]):
source_audio = audio_file(args.audio_file)
else:
LOGGER.error("Invalid audio file {}".format(args.audio_file))
sys.exit(1)

source_audio.split(transcript, args.target_dir)
split_audio_file(args.audio_file, args.transcript, args.target_dir)


if __name__ == "__main__":
Expand Down
4 changes: 2 additions & 2 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

setup(
name='asrtoolkit',
version='0.1.19',
version='0.1.20',
description=
'The GreenKey ASRToolkit provides tools for automatic speech recognition (ASR) file conversion and corpora organization.',
long_description=long_description,
Expand All @@ -25,7 +25,7 @@
keywords="asr speech recognition greenkey word error rate",
entry_points={
'console_scripts': [
'convert_transcript = asrtoolkit.convert_transcript:convert',
'convert_transcript = asrtoolkit.convert_transcript:main',
'clean_formatting=asrtoolkit.clean_formatting:main',
'prepare_audio_corpora=asrtoolkit.prepare_audio_corpora:main',
'degrade_audio_file=asrtoolkit.degrade_audio_file:main',
Expand Down
2 changes: 1 addition & 1 deletion tests/run_tests.sh
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
#!/usr/bin/env sh

python3 -m pytest -v --doctest-modules
python3 -m pytest -vv --doctest-modules
Binary file added tests/small-test-file.mp3
Binary file not shown.
2 changes: 2 additions & 0 deletions tests/small-test-file.stm
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
small-test-file 1 gk_speaker 0.765 2.881 <o,f0,male> one two three four five
small-test-file 1 gk_speaker 5.008 6.966 <o,f0,male> six seven eight nine ten
22 changes: 22 additions & 0 deletions tests/test_split_audio_file.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#!/usr/bin/env python
"""
Test audio file splitter
"""
import os
from asrtoolkit.split_audio_file import split_audio_file


def test_split_audio_file():
" test audio file splitter "
split_audio_file("tests/small-test-file.mp3", "tests/small-test-file.stm",
"tests/split")
assert set(os.listdir("tests/split")) == {
'small_test_file_seg_00001.stm', 'small_test_file_seg_00000.mp3',
'small_test_file_seg_00001.mp3', 'small_test_file_seg_00000.stm'
}


if __name__ == '__main__':
import sys
import pytest
pytest.main(sys.argv)

0 comments on commit eb2d962

Please sign in to comment.