Recording Audio

Now just switching to the recording mode of the article. Few of the above-mentioned libraries are used for the same, both playing and recording can be explained collectively but for many, it might get a bit confusing. So different dedicated sections are preferred here.

Note- Before using any library for recording, make sure the microphone of your device is actually connected and is ON also not Muted. one can check the same using operating system features and settings.

Method 1. Using python-sounddevice

This library allows you to play (explained above) and record NumPy arrays containing audio signal information. This module requires scipy or wavio to save the recorded audio, this means scipy or wavio library should be pre-installed along with Numpy before using this package for recording.

Python3




# import required libraries
import sounddevice as sd
from scipy.io.wavfile import write
import wavio as wv
 
# Sampling frequency
frequency = 44400
 
# Recording duration in seconds
duration = 3.5
 
# to record audio from
# sound-device into a Numpy
recording = sd.rec(int(duration * frequency),
                   samplerate = freq, channels = 2)
 
# Wait for the audio to complete
sd.wait()
 
# using scipy to save the recording in .wav format
# This will convert the NumPy array
# to an audio file with the given sampling frequency
write("recording0.wav", freq, recording)
 
# using wavio to save the recording in .wav format
# This will convert the NumPy array to an audio
# file with the given sampling frequency
wv.write("recording1.wav", recording, freq, sampwidth=2)


 
 

Output:

 

 

As stated in the Audio section sounddevice had a default option to specify the channel and frequency for the repeated use. After that no need to pass this option as arguments in sd.rec() method. Following code represents the same along with one can also change the data type of recorded array from default type of float32 to others.

 

Python3




import sounddevice as sd
 
sd.default.samplerate = 4400
sd.default.channels = 2
 
myrecording = sd.rec(int(duration * fs))
 
# change the data type: pass a new argument in .rec() of dtype
# myrecording = sd.rec(int(duration * fs), dtype='float64')
 
sd.wait()


 
 

Simultaneous Playback & Recording

 

To Play an array named my_arr and Record at the same time. Here sample rate is smpl_rate

 

Python3




import sounddevice as sd
import numpy as np
 
smpl_rate = 44100
 
my_arr = np.random.uniform(-1,1,smpl_rate)
recordd= sd.playrec(my_arr, smpl_rate, channels=2)
 
sd.wait()


 
 

 

Method 2: Using pyaudio.

 

As above, we played audio using pyaudio by reading the pyaudio.Stream(). To record audio we must write to this same stream. Following is the code to record a few seconds of audio and save the same to a .wav file:

 

Python3




import pyaudio
import wave
 
# Record in chunks of 1024 samples
chunk = 1024 
 
# 16 bits per sample
sample_format = pyaudio.paInt16 
chanels = 2
 
# Record at 44400 samples per second
smpl_rt = 44400 
seconds = 4
filename = "path_of_file.wav"
 
# Create an interface to PortAudio
pa = pyaudio.PyAudio() 
 
stream = pa.open(format=sample_format, channels=chanels,
                 rate=smpl_rt, input=True,
                 frames_per_buffer=chunk)
 
print('Recording...')
 
# Initialize array that be used for storing frames
frames = [] 
 
# Store data in chunks for 8 seconds
for i in range(0, int(smpl_rt / chunk * seconds)):
    data = stream.read(chunk)
    frames.append(data)
 
# Stop and close the stream
stream.stop_stream()
stream.close()
 
# Terminate - PortAudio interface
pa.terminate()
 
print('Done !!! ')
 
# Save the recorded data in a .wav format
sf = wave.open(filename, 'wb')
sf.setnchannels(chanels)
sf.setsampwidth(pa.get_sample_size(sample_format))
sf.setframerate(smpl_rt)
sf.writeframes(b''.join(frames))
sf.close()


Output:



How to Play and Record Audio in Python?

As python can mostly do everything one can imagine including playing and recording audio. This article will make you familiar with some python libraries and straight-forwards methods using those libraries for playing and recording sound in python, with some more functionalities in exchange for few extra intended python lines.

Most of the audio files are in MP3 and WAV file formats. WAV audio files are the simplest digital audio format with lossless high recording rates as a result WAV files are large compared to other formats. For the same reason, MP3 formats are used which are small in size and compresses files with very little difference to overall sound quality. Also, it is very easy to convert WAV to MP3 with open-source and free software which are widely available over the internet.

Similar Reads

Playing Audio

Below mentioned are some python libraries with which you can play various audio formats in python including MP3 formats, WAV formats, and even NumPy arrays....

Recording Audio

...