audio – how to play wav file in python?

audio – how to play wav file in python?

You can use PyAudio. An example here on my Linux it works:

#!usr/bin/env python  
#coding=utf-8  

import pyaudio  
import wave  

#define stream chunk   
chunk = 1024  

#open a wav format music  
f = wave.open(r/usr/share/sounds/alsa/Rear_Center.wav,rb)  
#instantiate PyAudio  
p = pyaudio.PyAudio()  
#open stream  
stream = p.open(format = p.get_format_from_width(f.getsampwidth()),  
                channels = f.getnchannels(),  
                rate = f.getframerate(),  
                output = True)  
#read data  
data = f.readframes(chunk)  

#play stream  
while data:  
    stream.write(data)  
    data = f.readframes(chunk)  

#stop stream  
stream.stop_stream()  
stream.close()  

#close PyAudio  
p.terminate()  

The reason pygame changes your audio is mixer defaults to a 22k sample rate:

initialize the mixer module
pygame.mixer.init(frequency=22050, size=-16, channels=2, buffer=4096): return None

Your wav is probably 8k. So when pygame plays it, it plays roughly twice as fast. So specify your wav frequency in the init.

Pyglet has some problems correctly reading RIFF headers. If you have a very basic wav file (with exactly a 16 byte fmt block) with no other information in the fmt chunk (like fact data), it works. But it makes no provision for additional data in the chunks, so its really not adhering to the RIFF interface specification.

audio – how to play wav file in python?

Works for me on Windows:
https://pypi.org/project/playsound/

>>> from playsound import playsound
>>> playsound(/path/to/a/sound/file/you/want/to/play.wav)

NOTE: This has a bug in Windows where it doesnt close the stream.
Ive added a PR for a fix here:
https://github.com/TaylorSMarks/playsound/pull/53/commits/53240d970aef483b38fc6d364a0ae0ad6f8bf9a0

Leave a Reply

Your email address will not be published. Required fields are marked *