Working with wav files in Python using Pydub

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:

  1. Playing audio file.
  2. We can get certain information of file like length channels.
  3. Increase/Decrease volume of given .wav file.
  4. Merging two or more audio files.
  5. Exporting an audio file.
  6. Spliiting an audio file.

For accessing input Sound files click here. Let’s see the code for some functionalities of pydub library:



1) Playing Audio File: This is done using play() method.

Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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)

chevron_right


Output:

2) Knowing about .wav file: for this we will use attributes of audio file object.

Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# import required library
from pydub import AudioSegment 
  
# import the audio file
wav_file = AudioSegment.from_file(file="Sample.wav", format="wav"
  
# data type fo 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 attrinbutes 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)

chevron_right


Output:

<class 'pydub.audio_segment.AudioSegment'>
22050
1
2
17106
60000
50

3) Increasing/Decreasing volume of the file: By using ‘+’ and ‘-‘ operator.

Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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!

chevron_right


Output:



4) Merging files: This is done using ‘+’ operator.

Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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)

chevron_right


Output:

5) Exporting files: This is done using export() method.

Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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")

chevron_right


Output:

6) Splitting Audio: Splitting audio using split_to_mono() method.

Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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")

chevron_right


Output:

[<pydub.audio_segment.AudioSegment object at 0x000001358727E860>, <pydub.audio_segment.AudioSegment object at 0x000001358721F978>]
1



My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.


Article Tags :

1


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.