Package: audioowl
AudioOwlAudioOwl is usinglibrosaandRNN modelsto run fast analysis of music files 🎸.Jump to:QuickstartInstallationUsageOutput data explainedMix your music automatically withMixingBear- Automatic beat-mixing of music files 🎚QuickstartAnalyze a WAV audio file -importaudioowldata=audioowl.analyze_file(path='my_music_file.wav',sr=22050)print(data)==>{'sample_rate':22050,'duration':36.096009070294784,'beat_samples':[12794,40148,66179,93092,...,'notes':[2,2,2,2,3,3,3,1,1,...]...}or an MP3 file -data=audioowl.analyze_file(path='my_music_file.mp3',sr=22050)Get beat times in samples (data['beat_samples']) -importmatplotlib.pyplotaspltwaveform=audioowl.get_waveform('drums.mp3',sr=22050)data=audioowl.analyze_file('drums.mp3',sr=22050)plt.figure()plt.vlines(data['beat_samples'],-1.0,1.0)plt.plot(waveform)plt.show()InstallationTested on Python 3.6 or later⚠️ AudioOwl needsffmpegto be installed on your machine.
The easiest way to install ffmpeg (at least on a Mac) is using homebrew.See instructions here.The latest stable release is available on PyPI.Install it using the following command -$pipinstallaudioowlUsageGiven an audio file, AudioOwl generates an objects with many useful information about your file 💪.audioowl.get_waveform()Returns a numpy array that contains that audio file time series.Supported keyword arguments foraudioowl.get_waveform():path- Local path to the audio file.sr[optional]- Requested sample rate for the analyzed file. This does not have to be the actual sample rate of the file, but the sample rate that will be used for the analysis. default = 22050.audioowl.analyze_file()Returns an object (dictionary) with the analysis results.Theaudioowl.analyze_file()function allows you to use the path to the audio file.Supported keyword arguments foraudioowl.analyze_file():path- Local path to the audio file.sr[optional]- Requested sample rate for the analyzed file. This does not have to be the actual sample rate of the file, but the sample rate that will be used for the analysis. default = 22050.audioowl.analyze_samples()Returns a numpy array that contains that audio file time series.Theaudioowl.analyze_samples()function allows you to use an audio time series (as numpy array).Example -importaudioowltime_series=audioowl.get_waveform('my_music_file.wav')data=audioowl.analyze_samples(y=time_series,sr=44100)Supported keyword arguments foraudioowl.analyze_samples():y- Time series. Must be a numpy array, with shape (1,) for mono, and (2,) for stereo.sr- Requested sample rate for the analyzed file. This does not have to be the actual sample rate of the file, but the sample rate that will be used for the analysis.Output data explainedThe return value of all function is a an object (dictionary) with the analysis results.
In case where the return value is stored indata:importaudioowldata=audioowl.analyze_file(path='my_music_file.wav',sr=22050)Thedataobject will include the following properties:data['sample_rate']# [int] sample ratedata['duration']# [float] file durationdata['beat_samples']# [list] beat location in samplesdata['number_of_beats']# [list] number of detected beatsdata['tempo_float']# [float] detected tempo as a floatdata['tempo_int']# [int] detected tempo as an intdata['zero_crossing']# [list] detected zero level crossing, in samples detecteddata['noisiness_median']# [float] nosiness value as a median, across the filedata['noisiness_sum']# [float] nosiness value as a sum, across the filedata['notes']# [list] notes across the file, based on chromagram of hop_length=512 samples.# notes legend:# 0   c# 1   c## 2   d# 3   d## 4   e# 5   f# 6   f## 7   g# 8   g## 9   a# 10  a## 11  bdata['dominant_note']# [int] most dominant (frequent) note across the file