Open In App

Working with wav files in Python using Pydub

Last Updated : 20 Mar, 2024
Improve
Improve
Like Article
Like
Save
Share
Report

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. 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.

Python3




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

Python3




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

Python3




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

Python3




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

Python3




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

Python3




# 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


Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads