This library is unfortunately effectively abandoned -- it hasn’t received any updates in over four years, and its latest version doesn’t work at all: https://github.com/TaylorSMarks/playsound/issues/101
(A workaround exists: downgrading to version 1.2.2, but that comes with its own issues.)
The last time I experimented with audio in Python, I was surprised by how lacking its multimedia libraries are.
For example, when I needed to read audio files as data, I tried `SoundFile`, `librosa` (a wrapper around `SoundFile` or `audioread`), and `pydub`, and none of them was particularly satisfying or has seen much active development lately.
If you need to read various formats, pydub is probably your best bet (it does this by invoking ffmpeg under the hood). I was hoping for a more "native" solution, but oh well. Unfortunately, `pydub` is also unmaintained and has some serious performance issues (for example: https://github.com/jiaaro/pydub/issues/518 )
https://www.reddit.com/r/Python/comments/1f00qdo/no_vote_of_...
He cites Glyph Lefkowitz to support him, who now gives advice on lunch vs. dinner networking strategies at PyCons. Which should be taken seriously: Being in the right circles and talking is all that matters in the Python ecosystem.
Who is Tim Peters? How were they slandered? What did the author do that you disliked? Who is Glyph Lefkowitz? Why is citing Glyph Lefkowitz an indictment of the author?
You can use PySide6. Here is an example:
import sys
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout
from PySide6.QtMultimedia import QMediaPlayer, QAudioOutput
from PySide6.QtMultimediaWidgets import QVideoWidget
from PySide6.QtCore import QUrl
class VideoPlayer(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Video Player - video.mp4")
self.resize(800, 600)
# Layout
layout = QVBoxLayout()
self.setLayout(layout)
# Video widget
self.video_widget = QVideoWidget()
layout.addWidget(self.video_widget)
# Media player
self.media_player = QMediaPlayer(self)
self.audio_output = QAudioOutput(self)
self.media_player.setAudioOutput(self.audio_output)
self.media_player.setVideoOutput(self.video_widget)
# Load video file
self.media_player.setSource(QUrl.fromLocalFile("video.mp4"))
self.media_player.play()
if __name__ == "__main__":
app = QApplication(sys.argv)
player = VideoPlayer()
player.show()
sys.exit(app.exec())
The editor recommended we cut this chapter. It made me realize that even though I work with multimedia stuff all the time, this isn't really something most office workers do (at least, not at the scale where you'd want to write Python scripts).
A lot of teaching people to code is hiding details so you don't fire hose them with information they don't need yet. So many software nerds don't get this, and they're excited about all these cool advanced techniques without realizing that beginners don't need to know about recursion or operator overloading. (I completely skip OOP in the book.)