Audio files are a widespread means of transferring information. So let's see how to work with audio files using Python. Python provides a module called pydub to work with audio files. pydub is a Python library to work with only .wav files. By using this library we can play, split, merge, edit our .wav audio files.
Installation
This module does not come built-in with Python. To install it type the below command in the terminal.
pip install pydub
Following are some functionalities that can be performed by pydub:
- Playing audio file.
- We can get certain information of file like length channels.
- Increase/Decrease volume of given .wav file.
- Merging two or more audio files.
- Exporting an audio file.
- Splitting an audio file.
Let's see the code for some functionalities of pydub library:
1) Playing Audio File: This is done using play() method.
# import required libraries
from pydub import AudioSegment
from pydub.playback import play
# Import an audio file
# Format parameter only
# for readability
wav_file = AudioSegment.from_file(file = "Sample.wav",
format = "wav")
# Play the audio file
play(wav_file)
Output:
2) Knowing about .wav file: for this we will use attributes of audio file object.
# import required library
from pydub import AudioSegment
# import the audio file
wav_file = AudioSegment.from_file(file="Sample.wav", format="wav")
# data type for the file
print(type(wav_file))
# OUTPUT: <class 'pydub.audio_segment.AudioSegment'>
# To find frame rate of song/file
print(wav_file.frame_rate)
# OUTPUT: 22050
# To know about channels of file
print(wav_file.channels)
# OUTPUT: 1
# Find the number of bytes per sample
print(wav_file.sample_width )
# OUTPUT : 2
# Find Maximum amplitude
print(wav_file.max)
# OUTPUT 17106
# To know length of audio file
print(len(wav_file))
# OUTPUT 60000
'''
We can change the attributes of file by
changeed_audio_segment = audio_segment.set_ATTRIBUTENAME(x)
'''
wav_file_new = wav_file.set_frame_rate(50)
print(wav_file_new.frame_rate)
Output:
<class 'pydub.audio_segment.AudioSegment'> 22050 1 2 17106 60000 50
3) Increasing/Decreasing volume of the file: By using '+' and '-' operator.
# import required library
import pydub
from pydub.playback import play
wav_file = pydub.AudioSegment.from_file(file = "Sample.wav",
format = "wav")
# Increase the volume by 10 dB
new_wav_file = wav_file + 10
# Reducing volume by 5
silent_wav_file = wav_file - 5
# Playing silent file
play(silent_wav_file)
# Playing original file
play(wav_file)
# Playing louder file
play(new_wav_file)
# Feel the difference!
Output:
4) Merging files: This is done using '+' operator.
# import required libraries
from pydub import AudioSegment
from pydub.playback import play
wav_file_1 = AudioSegment.from_file("noice.wav")
wav_file_2 = AudioSegment.from_file("Sample.wav")
# Combine the two audio files
wav_file_3 = wav_file_1 + wav_file_2
# play the sound
play(wav_file_3)
Output:
5) Exporting files: This is done using export() method.
# import library
from pydub import AudioSegment
# Import audio file
wav_file = AudioSegment.from_file("Sample.wav")
'''
You can do anything like remixing and export
I'm increasing volume just for sake of my simplicity
Increase by 10 decibels
'''
louder_wav_file = wav_file + 10
# Export louder audio file
louder_wav_file.export(out_f = "louder_wav_file.wav",
format = "wav")
Output:
6) Splitting Audio: Splitting audio using split_to_mono() method.
# import required libraries
from pydub import AudioSegment
from pydub.playback import play
# importing audio file
a = AudioSegment.from_file("pzm12.wav")
# Split stereo to mono
b = a.split_to_mono()
print(b)
print(b[0].channels )
b[0].export(out_f="outNow.wav",format="wav")
Output:
[<pydub.audio_segment.AudioSegment object at 0x000001358727E860>, <pydub.audio_segment.AudioSegment object at 0x000001358721F978>] 1