Changelog

v1.7.1 (2016-12-20)

  1. Fix bug #151
  2. Downgraded dependency on lxml to lxml>=3.6.0 to help packaging the Windows installer
  3. Added aeneas version to log
  4. Changed default voice for Festival TTS Wrapper to eng-USA to help people installing from source on Mac OS X

v1.7.0 (2016-12-07)

  1. Moved syncmap I/O functions in aeneas.syncmap subpackage
  2. Renamed aeneas.timevalue into aeneas.exacttiming
  3. Renamed audio_duration into length in SyncMapFragment for consistency with TimeInterval
  4. Renamed os_task_file_no_zero (PPN_OS_TASK_FILE_NO_ZERO) to task_adjust_boundary_no_zero (PPN_TASK_ADJUST_BOUNDARY_NO_ZERO) in TaskConfiguration
  5. Renamed nuance_tts_api_sleep (NUANCE_TTS_API_SLEEP) to tts_api_sleep (TTS_API_SLEEP) in RuntimeConfiguration
  6. Renamed nuance_tts_api_retry_attempts (NUANCE_TTS_API_RETRY_ATTEMPTS) to tts_api_retry_attempts (TTS_API_RETRY_ATTEMPTS) in RuntimeConfiguration
  7. Renamed --rates to --rate in ExecuteTaskCLI
  8. Renamed --example-rates to --example-rate in ExecuteTaskCLI
  9. Changed config_string() to property in aeneas.configuration.Configuration
  10. Changed the default value of TASK_MAX_AUDIO_LENGTH to 0 (i.e., process audio file with arbitrary audio length)
  11. Added two new output formats: TEXTGRID (Praat long TextGrid) and TEXTGRID_SHORT (Praat short TextGrid)
  12. More robust and generic reading of SRT-like files, especially WebVTT
  13. Fixed typos in SyncMapFormat docstrings
  14. Added safety_checks parameter to RuntimeConfiguration that can be disabled to trade safety for speed (issue #117)
  15. Added Makefile files to C/C++ extensions, replacing previous Bash scripts
  16. Simplified ExecuteTask, offloading some sub-tasks to SyncMap, SyncMapFragmentList, and AdjustBoundaryAlgorithm
  17. Simplified AdjustBoundaryAlgorithm
  18. Added method sync_map_vleaves in Task for quick access to sync map fragments (vleaves)
  19. Added aeneas.exacttiming.TimeInterval class to represent time intervals and act upon them
  20. Added tests for TimeInterval
  21. Added has_zero_length in SyncMapFragment
  22. Added comparison functions to SyncMapFragment, based on TimeInterval
  23. Added aeneas.syncmap.fragmentlist.SyncMapFragmentList class to represent a list of sync map fragments, sorted and with positional/timing constraints
  24. Added tests for SyncMapFragmentList
  25. Added clone() method to aeneas.configuration.Configuration
  26. Removed clone() method to aeneas.runtimeconfiguration.RuntimeConfiguration (now it inherits from Configuration)
  27. Added clone() method to aeneas.tree.Tree
  28. Added more tests for Tree
  29. Added PPN_TASK_ADJUST_BOUNDARY_NONSPEECH_MIN and PPN_TASK_ADJUST_BOUNDARY_NONSPEECH_STRING to TaskConfiguration
  30. Added ABA_NONSPEECH_TOLERANCE and ABA_NO_ZERO_DURATION parameters to RuntimeConfiguration
  31. Added more tests for Configuration and RuntimeConfiguration
  32. Added map from language code to human-readable name for TTS wrappers and for Language, usable by aeneas.tools.execute_task
  33. Marked Afrikaans (afr) language as tested
  34. Added more examples to aeneas.tools.execute_task
  35. Added more tool and long tests
  36. Added bench tests
  37. Added wiki/TESTING.md
  38. Added venvs directory with scripts to automate testing with virtual environments
  39. Added RuntimeConfiguration parameters to switch MFCC masking on, including per level in multilevel tasks
  40. Modified DTWAligner, AudioFileMFCC, ExecuteTask, and VAD to allow MFCC masking
  41. Added field human-readable descriptions in Configuration and its subclasses
  42. Better --list-parameters in ExecuteTask
  43. Added --list-parameters in ExecuteJob
  44. Added --help-rconf option to all tools
  45. Added check in ExecuteTask on the consistency of the computed sync map
  46. Added RuntimeConfiguration parameters DTW_MARGIN_L1, DTW_MARGIN_L2, DTW_MARGIN_L3, to change DTW margin of each level
  47. Added FFMPEG_PARAMETERS_SAMPLE_48000 to ffmpegwrapper.py
  48. Fixes issue with gf.relative_path() in Windows, if executed from a drive different than the install drive
  49. Fixed a bug with empty fragments when using subprocess TTS with TTS cache enabled
  50. Added --presets-word switch to aeneas.tools.execute_task
  51. Added AWSTTSWrapper wrapper for AWS Polly TTS API
  52. Revised docs
  53. Fixed a bug in reading SMIL files with machine-readable timings
  54. Fixed a bug in SyncMapFragmentList which caused sync map to contain overlapping fragments

v1.6.0.1 (2016-09-30)

  1. Fixes bug in Nuance TTS wrapper

v1.6.0 (2016-09-26)

  1. Fixed bug #102 by checking that the audio file produced by the TTS engine is mono WAVE and has correct sample rate: slightly slower but safe
  2. Created aeneas.ttswrappers subpackage
  3. Renamed aeneas.ttswrapper to aeneas.ttswrappers.basettswrapper, and TTSWrapper to BaseTTSWrapper
  4. Renamed aeneas.espeakwrapper to aeneas.ttswrappers.espeakttswrapper, and ESPEAKWrapper to ESPEAKTTSWrapper
  5. Renamed aeneas.festivalwrapper to aeneas.ttswrappers.festivalttswrapper, and FESTIVALWrapper to FESTIVALTTSWrapper
  6. Renamed aeneas.nuancettsapiwrapper to aeneas.ttswrappers.nuancettswrapper, and NuanceTTSAPIWrapper to NuanceTTSWrapper
  7. Modified the value for using the Nuance TTS API from nuancettsapi to nuance in aeneas.synthesizer.SYNTHESIZER
  8. Now each TTS wrapper must declare the format (codec, channels, sample rate) of its output
  9. Now each TTS wrapper can declare the default path for the TTS engine executable, using DEFAULT_TTS_PATH
  10. Changed the constructor of BaseTTSWrapper and derived classes, moving call method flags from constructor parameters to class fields
  11. Added check when synthesizing multiple: at least one fragment should be not empty
  12. Simplified writing custom TTS wrappers by providing the “multiple generic” method in BaseTTSWrapper
  13. Removed synthesize_single() function in all TTS wrappers and in cew
  14. When working on multilevel sync, user can specify a different TTS for each level
  15. Added an optional TTS caching mechanism to reduce subprocess/API calls to the TTS engine (closes #87)
  16. Added wrapper for eSpeak-ng (subprocess only)
  17. Added cfw Python C++ Extension to call Festival via its C++ API, disabled by default (closes #106)
  18. Unified unit tests for eSpeak, eSpeak-ng, and Festival
  19. Python C extension compilation can be disabled/forced in setup.py via env vars
  20. Added check on head/process/tail length which should not exceed the audio file length (closes #80)
  21. Moved package metadata from setup.py into setupmeta.py
  22. Added AGPL header to all source files
  23. Removed metadata (e.g., version) from all source files, except those directly facing the user
  24. PEP 8 compliance for all Python files (except for E501 “line too long”)
  25. Added wiki/CONTRIBUTING.md explaining the contribution rules (branch policy, code style, etc.)
  26. Using Sphinx theme from readthedocs.org if available
  27. Updated dependencies: BeautifulSoup4>=4.5.1 and lxml>=3.6.4 (see discussion in #93)
  28. Updated documentation
  29. Several other minor code improvements

v1.5.1 (2016-07-25)

  1. Added invoke parameter to AbstractCLIProgram constructor and modified tools consequently
  2. Added aeneas.tools.hydra tool to run all other aeneas.tools.* scripts
  3. Added pyinstaller-* configuration files for pyinstaller
  4. Added the PYINSTALLER.md file documenting how to compile an executable with PyInstaller
  5. Added rconf CDTW, CEW, and CMFCC parameters to prevent running a single C extension
  6. Added PPN_TASK_OS_FILE_EAF_AUDIO_REF to specify audio file URI for EAF output sync maps
  7. Added function to output current date and time in EAF output sync maps
  8. Removed copies of cint.[ch] and cwave.[ch] in other C extensions, changed include paths
  9. Removed unused keys from JobConfiguration and related source files
  10. Moved import statements for lxml and bs4 inside the functions actually using them (better isolation for future purposes)
  11. Fixed a numerical issue in dtw.py by explicit stating dtype=int in centers initializer, pure Python code only
  12. Extension cew compiled for Mac OS X and Windows
  13. Added links to installers for Mac OS X and Windows in the documentation
  14. Explicitly requiring lxml v3.6.0 and BeautifulSoup4 v4.4.1 due to a change in BeautifulSoup4 v4.5.0 API (to be investigated later)

v1.5.0.3 (2016-04-23)

  1. Fix an issue in sd with float returned instead of TimeValue

v1.5.0.2 (2016-04-09)

  1. Fix an issue in dtw with numpy.searchsorted returning an invalid index

v1.5.0.1 (2016-04-03)

  1. Fix an issue with compiling C extensions on Windows

v1.5.0 (2016-04-02)

  1. Rewritten vad.py
  2. Rewritten sd.py, removed SDMetric
  3. Rewritten adjustboundaryalgorithm.py
  4. Simplified executetask.py
  5. Added Loggable to logger.py, now most classes derive from it
  6. Added timevalue.py containing an arbitrary-precision type to represent time values (instead of float)
  7. Added ttswrapper.py to support generic TTS engine invocation
  8. Added festivalwrapper.py
  9. Added nuancettsapiwrapper.py
  10. Modified espeakwrapper.py to fit in the new TTS architecture
  11. Renamed espeak_path to tts_path in RuntimeConfiguration
  12. Deleted aeneas.tools.espeak_wrapper CLI tool, use aeneas.tools.synthesize_text instead
  13. Added CEWSubprocess to run aeneas.cew in a separate process to work around a bug in libespeak
  14. Added aeneas/extra directory, containing some custom TTS wrappers
  15. Changed meaning of language.py and added list of supported languages inside TTS wrappers
  16. Added plotter.py to plot waveforms and sets of labels to image file
  17. Added aeneas.tools.plot_waveform CLI tool
  18. Added tree.py to support the new tree-like structure of TextFile and SyncMap
  19. Modified textfile.py with the new tree-like structure
  20. Added multilevel input text format
  21. Added initial support for outputting multilevel JSON, SMIL, TTML, and XML sync maps
  22. Added README files and documentation to the C extensions subdirectories
  23. Added Bash scripts to compile and run C drivers
  24. Added usage messages to C drivers
  25. Converted all malloc() calls to calloc() calls to avoid dirty allocations, added checks on the returned pointers
  26. Introduced fixed-size int types in C extensions, with explicit definitions for the MS C compiler
  27. Merged AudioFileMonoWAVE back into AudioFile
  28. More efficient append/prepend operations in AudioFile thanks to preallocated memory and space doubling
  29. Created AudioFileMFCC to handle the MFCC representation of audio files
  30. Added run_vad() to AudioFileMFCC, VAD is just an “algorithm-switcher” class now
  31. Added detect_head_tail() to AudioFileMFCC, SD is just an “algorithm-switcher” class now
  32. Listed supported keys in RuntimeConfiguration documentation
  33. Renamed ConfigurationObject to Configuration
  34. Renamed append_* functions to add_* in several classes
  35. Removed computed_path property in DTWAligner, compute_path() now returns it
  36. Fixed a bug with logger and rconf initialization in all classes
  37. Added --cewsubprocess option to aeneas.tools.execute_job
  38. Fixed a bug in aeneas.tools.execute_job that prevented processing uncompressed containers
  39. Added --faster-rate, --rates, and --zero options to aeneas.tools.execute_task
  40. More --example-* shortcuts in aeneas.tools.execute_task
  41. Added list of supported language codes to --list-values in aeneas.tools.execute_task
  42. All aeneas.tools.* CLI tools now print messages in color on POSIX OSes
  43. Added gc.PPN_TASK_OS_FILE_NO_ZERO (i.e., os_task_file_no_zero) to avoid fragments with zero duration in sync maps
  44. Added "TRUE" and "YES" as aliases for True value in Configuration
  45. Added AUD, AUDH and AUDM sync map output format for use with Audacity
  46. Added EAF sync map output format for use with ELAN
  47. Deprecated RBSE sync map output format
  48. More unit tests
  49. More uniform documentation: unless byte is specified, string indicates a Unicode string (unicode in Python 2, str in Python 3)

v1.4.1 (2016-02-13)

  1. Added DFXP sync map output format, alias for TTML
  2. Added SBV sync map output format (SubViewer format with newline, used by YouTube)
  3. Added SUB sync map output format (SubViewer format with [br])
  4. Added aeneas.diagnostics to perform setup check, modified aeneas_check_setup.py accordingly
  5. Marked Czech (cs) language as tested
  6. Optimizated computation of MFCCs if no head/tail has been cut
  7. Fixed the numpy deprecated API warning for C extensions
  8. Fixed a few bugs and cleaned the source code of the cmfcc C extension, added a C driver program
  9. Cleaned the source code of the cew C extension, added a C driver program
  10. Cleaned the source code of the cdtw C extension, added a C driver program
  11. Added cwave C extension (currently not used), added a C driver program
  12. Added write method to Logger to dump log to file
  13. Added ConfigurationObject to represent a dictionary with a fixed set of keys, default values, and aliases
  14. Now JobConfiguration and TaskConfiguration extend ConfigurationObject
  15. Added RuntimeConfiguration, extending ConfigurationObject, to keep the runtime settings, tunable by (expert) users
  16. Added to AbstractCLIProgram support for specifying log file path
  17. Added to AbstractCLIProgram support for specifying runtime configuration
  18. Changed FFMPEG_PARAMETERS_DEFAULT in ffmpeg.py to FFMPEG_PARAMETERS_SAMPLE_16000 (i.e., from 22050 Hz to 16000 Hz)
  19. Added support for specifying the temporary directory path in the RuntimeConfiguration
  20. Refactored mfcc.py to better fit into the library structure
  21. Moved the original mfcc.py into the thirdparty/ directory for clarity and attribution
  22. Nicer aeneas_check_setup.py script
  23. More unit tests covering runtime configuration options
  24. Slimmed the README.md down

v1.4.0 (2016-01-15)

  1. Now running on both Python 2.7.x and Python 3.4.x or later, including C extensions
  2. For XML-based sync map formats, now using UTF-8 encoding instead of ASCII
  3. Unified aeneas.tools.* structure, with better help messages and exit codes
  4. All aeneas.tools.* can be run interactively or called from Python code by passing a list of arguments
  5. aeneas.tools.convert_syncmap has slightly different option names
  6. aeneas.tools.read_text has a different order of arguments and different option names
  7. aeneas.tools.synthesize_text has a different order of arguments and different option names
  8. aeneas.tools.run_sd has a different order of arguments and different option names
  9. Added bin/ scripts
  10. Added a flag to disable checking a language code string against listed (supported) ones, allowing for testing with custom espeak voices
  11. Ported the unit test launcher run_all_unit_tests.py in Python, with more options than unittest discover
  12. Added unit test aeneas.tests.test_idsortingalgorithm
  13. Added unit tests for aeneas.tools.* (--tool-tests)
  14. Added unit tests for executejob.py and executetask.py (--long-tests)
  15. Added unit tests for downloader.py and aeneas.tools.download (--net-tests)
  16. Better and more unit tests
  17. Changed all IOError to OSError, per Python 3 recommendation
  18. Changed parameters=None default value in the constructor of FFMPEGWrapper
  19. Renamed AudioFileMonoWAV to AudioFileMonoWAVE
  20. Renamed best_audio parameter to largest_audio in downloader.py and in aeneas.tools.execute_task and aeneas.tools.download
  21. Renamed get_rel_path (resp., get_abs_path) into relative_path (resp., absolute_path) in aeneas.globalfunctions
  22. Fixed a potential bug in relative_path: now getting the cwd path using os.getcwd()
  23. Fixed a bug in cew.c triggered when passing espeak voices with variants (e.g., en-gb)

v1.3.3 (2015-12-20)

  1. Added all voice variants (e.g., en-gb to language.py) supported by espeak v1.48.03

v1.3.2 (2015-11-11)

  1. Added is_text_file_ignore_regex parameter to ignore text from the input file
  2. Added is_text_file_transliterate_map parameter to read a transliteration map from file and apply it to the input text
  3. Added thirdparty/transliteration.map sample transliteration map (courtesy of Steve Gallagher and Richard Margetts)
  4. Edited README.md, stating the optional dependency from pafy
  5. Renamed check_dependencies.py into aeneas_check_setup.py

v1.3.1.1 (2015-11-03)

  1. Added debian/ directory containing files for creating a Debian/Ubuntu .deb package (courtesy of Chris Hubbard)
  2. Removed pafy from required dependencies

v1.3.1 (2015-10-28)

  1. Added os_task_file_id_regex parameter to add user-defined id values for plain and subtitles input files
  2. Added the HTML file finetuneas.html for manually fine tuning the sync maps (courtesy of Firat Özdemir)
  3. Added an option to aeneas.tools.convert_syncmap and aeneas.tools.execute_task to output finetuneas HTML file

v1.3.0 (2015-10-14)

  1. Added cew C module for synthesizing text with espeak much faster than in pure Python (only available on Linux at the moment)
  2. Added wavfile.py from scipy.io to replace scikits.audiolab
  3. Added AudioFileMonoWAV, containing all the mono WAV functions previously in AudioFile
  4. Added is_audio_file_tail_length parameter
  5. Added exception handling, especially in aeneas.tools.*
  6. Added Downloader to download files from Web sources (currently, audio from YouTube)
  7. Added the corresponding aeneas.tools.download utility
  8. Added pafy as a Python dependency, and removed scikits.audiolab
  9. Added third party licenses
  10. Unified the I/O of aeneas.tools.*, creating the aeneas/tools/res/ and output/ directories
  11. Better and more unit tests
  12. Improved documentation, especially the README.md
  13. Added licenses/ directory, containing the licenses of third party code

v1.2.0 (2015-09-27)

  1. Added sd.py to automatically detect the head/tail/interval of an audio file
  2. Added the corresponding aeneas.tools.run_sd utility
  3. Added the corresponding Task configuration parameters: is_audio_file_detect_head_min, is_audio_file_detect_head_max, is_audio_file_detect_tail_min, is_audio_file_detect_tail_max, and os_task_file_head_tail_format
  4. Added SMILH and SMILM sync map output formats (SMIL becoming an alias of SMILH)
  5. Added CSVM, SSVM, TSVM, and TXTM formats (CSV, SSV, TSV, and TXT becoming their aliases)
  6. Renamed the previous JSON sync map output format to RBSE
  7. Added a new JSON format
  8. Renamed the previous XML sync map output format to XML_LEGACY
  9. Changed JSON (and RBSE) write function, now using the json library
  10. Added a new XML format
  11. Changed SMIL, TTML, and XML write functions, now using the lxml library
  12. Added functions to read sync map files
  13. Added the aeneas.tools.convert_syncmap utility to convert sync maps
  14. Added reverse, trim, and write functions to AudioFile
  15. Added all the languages that espeak v1.48.03 supports to the Language enumeration (those not tested yet are marked as such)
  16. Marked Persian (fa) and Swahili (sw) languages as tested
  17. Added the aeneas.tools.synthesize_text utility to synthesize multiple fragments into a single wave file
  18. Changed FFMPEG_PARAMETERS_DEFAULT in ffmpeg.py to FFMPEG_PARAMETERS_SAMPLE_22050 (i.e., from 44100 Hz to 22050 Hz)
  19. Fixed the TTML output
  20. Fixed a KeyError bug in ffprobewrapper.py when probing a file not recognized as audio file
  21. Fixed a bug in cdtw.c: int overflow when computing the centers array on long (>30 minutes) audio files
  22. Many unit tests have been rewritten, extended, or refactored
  23. Other minor fixes and code/documentation improvements

v1.1.2 (2015-09-24)

  1. Better setup.py, especially for Windows users (courtesy of David Smith)

v1.1.1 (2015-08-23)

  1. Added compile_c_extensions.bat and directions for Windows users (courtesy of Richard Margetts)
  2. Added warning to aeneas.tools.* when running without Python C extensions compiled
  3. Improved README.md

v1.1.0 (2015-08-21)

  1. Added cdtw C module for running the DTW much faster than in pure Python (falling back to Python if cdtw cannot be load)
  2. Added cmfcc C module for extracting the MFCCs much faster than in pure Python (falling back to Python if cmfcc cannot be load)
  3. Moved code for extracting MFCCs into AudioFile, and rewritten dtw.py and vad.py accordingly
  4. Added aeneas.tools.extract_mfcc utility
  5. Rewritten the STRIPE and EXACT (Python) algorithms to compute the accumulated cost matrix in place
  6. Renamed ALIGNER_USE_EXACT_ALGO_WHEN_MARGIN_TOO_LARGE to ALIGNER_USE_EXACT_ALGORITHM_WHEN_MARGIN_TOO_LARGE
  7. Removed STRIPE_NOT_OPTIMIZED algorithm from dtw.py
  8. Added the OFFSET and RATEAGGRESSIVE boundary adjustment algorithms
  9. Cleaned the code for RATE boundary adjustment algorithm
  10. Other minor fixes and code/docs improvements

v1.0.4 (2015-08-09)

  1. Added boundary adjustment algorithm
  2. Added VAD algorithm and aeneas.tools.run_vad utility
  3. Added subtitles input text format and the ability of dealing with multiline text fragments
  4. Added SSV output format
  5. Added CSVH, SSVH, TSVH, TXTH output formats (i.e., human-readable variants)
  6. Added -v option to aeneas.tools.execute_task and aeneas.tools.execute_job to produce verbose output
  7. Added install_dependencies.sh
  8. Added this changelog
  9. Sanitized log messages, fixing a problem with tee=True crashing in non UTF-8 shells (tested in a POSIX shell)
  10. Improved unit tests
  11. Other minor fixes and code/docs improvements

v1.0.3 (2015-06-13)

  1. Added TSV output format
  2. Added reference to aeneas-vagrant
  3. Added run_all_unit_tests.sh

v1.0.2 (2015-05-14)

  1. Corrected typos
  2. Merged requirements.txt

v1.0.1 (2015-05-12)

  1. Initial version