-
-
Save THeK3nger/3624478 to your computer and use it in GitHub Desktop.
| 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 |
@benoitvalery
Ah, thanks for that. somehow i read that comment the other way round.
@THeK3nger
Thanks a lot :D
Hello, i have the same problem:
Sorry I am a beginner programmer and I am wondering where to insert the .wav file and if this will play the file or just loop it
Do I have to insert the file AND my local file path here?
def run(self):
# Open Wave File and start play!
wf = wave.open(self.filepath, 'rb')
player = pyaudio.PyAudio()
I tried different options but nothing is working..
@leamu no you have to use it outside the class like this:
import os
import wave
import threading
import sys
# PyAudio Library
import pyaudio
class WavePlayerLoop(threading.Thread):
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 (based 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
player = WavePlayerLoop("sounds/1.wav")
player.play()
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_
I updated the main file to fix this. Thank you all. :)