Package: audio-offset-finder
audio-offset-finderA simple tool and library for finding the offset of an audio file within another file.The algorithm uses cross-correlation of standardised Mel-Frequency Cepstral Coefficients, so it should be relatively robust to noise (encoding, compression, etc).  The accuracy is typically to within about 0.01s.The tool outputs the calculated offset in seconds, and a"standard score"indicating the prominence of the chosen correlation peak.  This can be used as a very rough estimate of the accuracy of the calculated offset - one with a score greater than ten is likely to be correct (at least for audio without similar repeated sections) within the accuracy of the tool; an offset with a score less than five is unlikely to be correct, and a manual check should be carried out.  Note that the value of the score depends on the length of the audio analysed.The tool usesFFmpegfor transcoding, so should work on all file formats supported by FFmpeg.  It is tested for compatibility with Python 3.8 and 3.9 on Linux, Windows and macOS.The aim of this open source project is to provide a simple tool and library that do one job well, and that can be the basis of customisation for more complex use cases.  Theforks of the base respositoryare worth exploring if you need a feature that is not included here.  The maintainers welcome pull requests with bug fixes, new features and other improvements that fit this philosophy - please seeCONTRIBUTING.mdfor details.InstallationTo install from source once downloadedfrom GitHub:$ pip install .Or, to install the latest package from PyPi.org:$ pip install audio-offset-finderYou will need toinstall FFmpegto use the command-line tool, or to use the file-related functions in the library.UsageTo use the command-line tool:$ audio-offset-finder --help
$ audio-offset-finder --find-offset-of file1.wav --within file2.wav
Offset: 12.26 (seconds)
Standard score: 28.99

$ audio-offset-finder --find-offset-of file2.wav --within file1.wav
Offset: -12.26 (seconds)
Standard score: 28.99To provide additional information about the accuracy of the result in addition to the standard score, the--show-plotoption shows a plot of the cross-correlation curve, and the--save-plotoption saves one to a file.  The two options can be used separately, or together if you want to both view the plot and save a copy of it:$ audio-offset-finder --find-offset-of file2.wav --within file1.wav --show-plot --save-plot example.pngA single well-defined peak such as the one shown in the image below is a good indication that the offset is correct.Library UsageTo use the Python library:fromaudio_offset_finder.audio_offset_finderimportfind_offset_between_filesresults=find_offset_between_files(filepath1,filepath2,trim=30)print("Offset:%s(seconds)"%str(results["time_offset"]))print("Standard score:%s"%str(results["standard_score"]))Afind_offset_between_buffers()function is also provided if you want to find offsets between audio buffers that you already
have in memory.Testing$ pytestLicensing terms and authorshipSee theCOPYINGandAUTHORSfiles.For details of how to contribute changes, seeCONTRIBUTING.md.The audio file used in the tests was downloaded fromWikimedia Commons,
and was originally extracted from the 9 July 2008
episode of the BBCToday programme.