Audio Input and Output from USB Microphone + Raspberry Pi

From ESE205 Wiki
Jump to navigation Jump to search

Introduction: One of the major components of my project, Vybz, was being able to read raw audio input from a USB microphone. Information from a microphone is originally converted from an analog signal into a group of bytes (binary digits) using the microphone’s built in A/D converter. However, bytes were a relatively difficult unit to work with. For the project, I needed access to nice integer values that were an accurate representation of the volume level in the room. Thus, this tutorial will show you how to read audio input from a USB microphone on the Raspberry Pi.

Note: The basis of the code was derived from the code developed by markjay4k, an engineer working with audio spectrum analyzers. You can find a link to his github at: https://github.com/markjay4k/Audio-Spectrum-Analyzer-in-Python

Step 1: Install Libraries In order to read raw audio data, you will first need to install some useful libraries that will be implemented in your code. First, install pyaudio. With PyAudio, you can easily use Python to play and record audio on a variety of platforms. To install, type the following into the terminal:

pip install pyaudio

Then you’ll want to install NumPy which is a fundamental package for scientific computing in Python. You can install it my typing this into the terminal:

pip install numpy


Step 2: The Code Copy the code into your python script.

import pyaudio
import struct
import numpy as np

 
CHUNK = 1024 * 4         	# samples per frame
FORMAT = pyaudio.paInt16 	# audio format (bytes per sample)
CHANNELS = 1               	# single channel for microphone
RATE = 44100                # samples per second

 
 
p = pyaudio.PyAudio()
 
stream = p.open(
    format=FORMAT,
    channels=CHANNELS,
    rate=RATE,
    input=True,
    output=True,
    frames_per_buffer=CHUNK
)

while True:
    data = stream.read(CHUNK)					                #reading input	
    data_int = struct.unpack(str(2 * CHUNK) + 'B', data) 	#converts bytes to integers
    data_int							                               #prints the integer values

Step 3: Run the code. Once you run the code, you should be able to see the running integer values for the bytes taken in by your microphone.