Skip to content

Instantly share code, notes, and snippets.

@THeK3nger
Last active September 1, 2023 21:35
Show Gist options
  • Save THeK3nger/3624478 to your computer and use it in GitHub Desktop.
Save THeK3nger/3624478 to your computer and use it in GitHub Desktop.
Python Wave Audio Loop
import os
import wave
import threading
import sys
# PyAudio Library
import pyaudio
class WavePlayerLoop(threading.Thread) :
"""
A simple class based on PyAudio to play wave loop.
It's a threading class. You can play audio while your application
continues to do its stuff. :)
"""
CHUNK = 1024
def __init__(self,filepath,loop=True) :
"""
Initialize `WavePlayerLoop` class.
PARAM:
-- filepath (String) : File Path to wave file.
-- loop (boolean) : True if you want loop playback.
False otherwise.
"""
super(WavePlayerLoop, self).__init__()
self.filepath = os.path.abspath(filepath)
self.loop = loop
def run(self):
# Open Wave File and start play!
wf = wave.open(self.filepath, 'rb')
player = pyaudio.PyAudio()
# Open Output Stream (basen on PyAudio tutorial)
stream = player.open(format = player.get_format_from_width(wf.getsampwidth()),
channels = wf.getnchannels(),
rate = wf.getframerate(),
output = True)
# PLAYBACK LOOP
data = wf.readframes(self.CHUNK)
while self.loop :
stream.write(data)
data = wf.readframes(self.CHUNK)
if data == b'' : # If file is over then rewind.
wf.rewind()
data = wf.readframes(self.CHUNK)
stream.close()
player.terminate()
def play(self) :
"""
Just another name for self.start()
"""
self.start()
def stop(self) :
"""
Stop playback.
"""
self.loop = False
@abcshubhamabc
Copy link

I also wanted to ask that, how can we play all the songs from a particular folder, in python because as a beginner I'm facing a problem with that,

currently, I'm using the code -

elif 'play some music' in query:
music_dir = 'D:\Music'
songs = os.listdir(music_dir)
print(songs)
os.startfile(os.path.join(music_dir, songs[0]))

But this only plays the 1st song, [0]

if anyone knows - how to play all the songs then, please help,

thanks

insta - im__ace_

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment