How to play an audiofile with pyaudio?

JShoe picture JShoe · Aug 5, 2011 · Viewed 33.6k times · Source

I do not understand the example material for pyaudio. It seems they had written an entire small program and it threw me off.

How do I just play a single audio file?

Format is not an issue, I just want to know the bare minimum code I need to play an audio file.

Answer

Mikhail Churbanov picture Mikhail Churbanov · Aug 5, 2011

May be this small wrapper (warning: created on knees) of their example will help you to understand the meaning of code they wrote.

import pyaudio
import wave
import sys

class AudioFile:
    chunk = 1024

    def __init__(self, file):
        """ Init audio stream """ 
        self.wf = wave.open(file, 'rb')
        self.p = pyaudio.PyAudio()
        self.stream = self.p.open(
            format = self.p.get_format_from_width(self.wf.getsampwidth()),
            channels = self.wf.getnchannels(),
            rate = self.wf.getframerate(),
            output = True
        )

    def play(self):
        """ Play entire file """
        data = self.wf.readframes(self.chunk)
        while data != '':
            self.stream.write(data)
            data = self.wf.readframes(self.chunk)

    def close(self):
        """ Graceful shutdown """ 
        self.stream.close()
        self.p.terminate()

# Usage example for pyaudio
a = AudioFile("1.wav")
a.play()
a.close()