Python-sounddevice chơi tập tin wav
ca838 Bài viết. 21 Chủ đề. 11 Đã tham gia. Tháng 2 năm 2017 Danh tiếng. 0 Mar-10-2022, 11. 06 giờ chiềuTôi đã tìm ra cách phát tệp và tôi đang sử dụng biểu mẫu PyQT5 do tôi tạo. Không có gì lạ mắt import sounddevice as sd import soundfile as sf def _buttonplay(self, clicked): global filename filename = self.lineEditsdir.text() + '/' + self.listWidget.currentItem().text() print('Playing:' + filename) self.lblstatus.setStyleSheet("QLabel {background-color: rgb(255, 255, 0);color: rgb(0, 170, 0);}") self.lblstatus.setText("Playing") self.playwav() self.lblstatus.setText("Not Playing") self.lblstatus.setStyleSheet("QLabel {background-color: rgb(255, 255, 0);color: rgb(255, 0, 0);}") def playwav(self): data, fs = sf.read(filename,dtype='float32') sd.play(data,fs) status = sd.wait() returncảm ơn SHIFT838 Hồi đáp Trang web Tìm Hồi đáp cố vấn01 Bài viết. 791 Chủ đề. 94 Đã tham gia. Tháng 9 năm 2019 Danh tiếng. 70 Kiểm tra liên kết này về cách phát tệp wav pyqt5 Tôi hoan nghênh mọi phản hồi Hồi đáp Tìm thấy Hồi đáp ca838 Bài viết. 21 Chủ đề. 11 Đã tham gia. Tháng 2 năm 2017 Danh tiếng. 0 11-03-2022, 12. 07 giờ sángĐã xem liên kết của bạn và cố gắng triển khai cả phương pháp #1 và #3 nhưng tôi không nghe thấy âm thanh nào def playwav(self): filename = self.lineEditsdir.text() + '/' + self.listWidget.currentItem().text() sound_file = filename sound = PyQt5.QtMultimedia.QSoundEffect() sound.setSource(QtCore.QUrl.fromLocalFile(sound_file)) # sound.setLoopCount(QtMultimedia.QSoundEffect.Infinite) sound.setVolume(50) sound.play() SHIFT838 Hồi đáp Trang web Tìm Hồi đáp ca838 Bài viết. 21 Chủ đề. 11 Đã tham gia. Tháng 2 năm 2017 Danh tiếng. 0 Mar-11-2022, 03. 35 giờ sángPhân tích cú pháp thông qua liên kết của bạn một lần nữa tôi đã đưa ra đoạn mã dưới đây. Các nút phát và dừng hoạt động bình thường # -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'PC28BITCAS.ui' # # Created by: PyQt5 UI code generator 5.15.6 # # WARNING: Any manual changes made to this file will be lost when pyuic5 is # run again. Do not edit this file unless you know what you are doing. import sys import os import time import glob import wave import contextlib from datetime import timedelta from os import path from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5 import QtMultimedia as M from PyQt5.QtWidgets import QApplication, QWidget, QInputDialog, QLineEdit, QFileDialog, QLineEdit class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(800, 600) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.tabWidget = QtWidgets.QTabWidget(self.centralwidget) self.tabWidget.setGeometry(QtCore.QRect(10, 10, 781, 551)) font = QtGui.QFont() font.setFamily("DAGGERSQUARE") font.setPointSize(10) self.tabWidget.setFont(font) self.tabWidget.setObjectName("tabWidget") self.tab = QtWidgets.QWidget() self.tab.setObjectName("tab") self.butplay = QtWidgets.QPushButton(self.tab) self.butplay.setEnabled(False) self.butplay.setGeometry(QtCore.QRect(90, 500, 75, 23)) self.butplay.setAutoDefault(False) self.butplay.setDefault(False) self.butplay.setFlat(False) self.butplay.setObjectName("butplay") self.butstop = QtWidgets.QPushButton(self.tab) self.butstop.setEnabled(False) self.butstop.setGeometry(QtCore.QRect(260, 500, 75, 23)) self.butstop.setObjectName("butstop") self.butrecord = QtWidgets.QPushButton(self.tab) self.butrecord.setGeometry(QtCore.QRect(410, 500, 75, 23)) self.butrecord.setObjectName("butrecord") self.listWidget = QtWidgets.QListWidget(self.tab) self.listWidget.setGeometry(QtCore.QRect(10, 110, 411, 361)) font = QtGui.QFont() font.setFamily("DAGGERSQUARE") font.setPointSize(10) self.listWidget.setFont(font) self.listWidget.setAlternatingRowColors(True) self.listWidget.setModelColumn(0) self.listWidget.setSelectionRectVisible(True) self.listWidget.setObjectName("listWidget") self.lineEditsdir = QtWidgets.QLineEdit(self.tab) self.lineEditsdir.setEnabled(False) self.lineEditsdir.setGeometry(QtCore.QRect(10, 30, 671, 31)) font = QtGui.QFont() font.setFamily("DAGGERSQUARE") font.setPointSize(10) self.lineEditsdir.setFont(font) self.lineEditsdir.setText("") self.lineEditsdir.setObjectName("lineEditsdir") self.butbrowse = QtWidgets.QPushButton(self.tab) self.butbrowse.setGeometry(QtCore.QRect(690, 30, 75, 31)) self.butbrowse.setObjectName("butbrowse") self.lblcurrentpath = QtWidgets.QLabel(self.tab) self.lblcurrentpath.setGeometry(QtCore.QRect(10, 10, 151, 16)) font = QtGui.QFont() font.setFamily("DAGGERSQUARE") font.setPointSize(12) self.lblcurrentpath.setFont(font) self.lblcurrentpath.setObjectName("lblcurrentpath") self.lblcurrentpath_2 = QtWidgets.QLabel(self.tab) self.lblcurrentpath_2.setGeometry(QtCore.QRect(460, 120, 41, 16)) font = QtGui.QFont() font.setFamily("DAGGERSQUARE") font.setPointSize(12) self.lblcurrentpath_2.setFont(font) self.lblcurrentpath_2.setObjectName("lblcurrentpath_2") self.lblcurrentpath_3 = QtWidgets.QLabel(self.tab) self.lblcurrentpath_3.setGeometry(QtCore.QRect(430, 210, 81, 16)) font = QtGui.QFont() font.setFamily("DAGGERSQUARE") font.setPointSize(12) self.lblcurrentpath_3.setFont(font) self.lblcurrentpath_3.setObjectName("lblcurrentpath_3") self.lineEditselected = QtWidgets.QLineEdit(self.tab) self.lineEditselected.setEnabled(False) self.lineEditselected.setGeometry(QtCore.QRect(500, 110, 271, 31)) font = QtGui.QFont() font.setFamily("DAGGERSQUARE") font.setPointSize(12) self.lineEditselected.setFont(font) self.lineEditselected.setObjectName("lineEditselected") self.lineEditduration = QtWidgets.QLineEdit(self.tab) self.lineEditduration.setEnabled(False) self.lineEditduration.setGeometry(QtCore.QRect(500, 200, 271, 31)) font = QtGui.QFont() font.setFamily("DAGGERSQUARE") font.setPointSize(12) self.lineEditduration.setFont(font) self.lineEditduration.setObjectName("lineEditduration") self.lblcurrentpath_4 = QtWidgets.QLabel(self.tab) self.lblcurrentpath_4.setGeometry(QtCore.QRect(10, 80, 201, 16)) font = QtGui.QFont() font.setFamily("DAGGERSQUARE") font.setPointSize(12) self.lblcurrentpath_4.setFont(font) self.lblcurrentpath_4.setObjectName("lblcurrentpath_4") self.lblstatus = QtWidgets.QLabel(self.tab) self.lblstatus.setGeometry(QtCore.QRect(490, 310, 201, 20)) font = QtGui.QFont() font.setFamily("DAGGERSQUARE") font.setPointSize(16) self.lblstatus.setFont(font) self.lblstatus.setStyleSheet("") self.lblstatus.setFrameShadow(QtWidgets.QFrame.Raised) self.lblstatus.setLineWidth(4) self.lblstatus.setAlignment(QtCore.Qt.AlignCenter) self.lblstatus.setObjectName("lblstatus") self.tabWidget.addTab(self.tab, "") self.tab_3 = QtWidgets.QWidget() self.tab_3.setObjectName("tab_3") self.lblsdir = QtWidgets.QLabel(self.tab_3) self.lblsdir.setGeometry(QtCore.QRect(30, 30, 231, 16)) font = QtGui.QFont() font.setFamily("DAGGERSQUARE") font.setPointSize(12) self.lblsdir.setFont(font) self.lblsdir.setObjectName("lblsdir") self.qlesourcedir = QtWidgets.QLineEdit(self.tab_3) self.qlesourcedir.setGeometry(QtCore.QRect(280, 30, 431, 20)) font = QtGui.QFont() font.setFamily("DAGGERSQUARE") font.setPointSize(10) self.qlesourcedir.setFont(font) self.qlesourcedir.setObjectName("qlesourcedir") self.butsdir = QtWidgets.QPushButton(self.tab_3) self.butsdir.setGeometry(QtCore.QRect(720, 20, 31, 31)) self.butsdir.setText("") icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap("images/browse-2.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.butsdir.setIcon(icon) self.butsdir.setIconSize(QtCore.QSize(24, 24)) self.butsdir.setObjectName("butsdir") self.butsavecfg = QtWidgets.QPushButton(self.tab_3) self.butsavecfg.setGeometry(QtCore.QRect(650, 412, 91, 91)) self.butsavecfg.setText("") icon1 = QtGui.QIcon() icon1.addPixmap(QtGui.QPixmap("images/save-icon.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.butsavecfg.setIcon(icon1) self.butsavecfg.setIconSize(QtCore.QSize(90, 90)) self.butsavecfg.setObjectName("butsavecfg") self.tabWidget.addTab(self.tab_3, "") self.tab_4 = QtWidgets.QWidget() self.tab_4.setObjectName("tab_4") self.label = QtWidgets.QLabel(self.tab_4) self.label.setGeometry(QtCore.QRect(80, 40, 611, 401)) self.label.setText("") self.label.setPixmap(QtGui.QPixmap("images/logocassette-medium.png")) self.label.setObjectName("label") self.tabWidget.addTab(self.tab_4, "") MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) self.tabWidget.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.butplay.setText(_translate("MainWindow", "Play")) self.butstop.setText(_translate("MainWindow", "Stop")) self.butrecord.setText(_translate("MainWindow", "Record")) self.listWidget.setSortingEnabled(True) self.butbrowse.setText(_translate("MainWindow", "Browse")) self.lblcurrentpath.setText(_translate("MainWindow", "Current Folder: ")) self.lblcurrentpath_2.setText(_translate("MainWindow", "File:")) self.lblcurrentpath_3.setText(_translate("MainWindow", "Duration:")) self.lblcurrentpath_4.setText(_translate("MainWindow", "Select file to load below:")) self.lblstatus.setText(_translate("MainWindow", "Not Playing")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "Cassete #1")) self.lblsdir.setText(_translate("MainWindow", "RAW Wave Source Directory")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("MainWindow", "Configuration")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_4), _translate("MainWindow", "About")) self.butplay.clicked.connect(self.play) self.butstop.clicked.connect(self.stop) self.butbrowse.clicked.connect(self._buttonbrowse) self.listWidget.currentItemChanged.connect(self._fileselected) def play(self): self.url = QtCore.QUrl.fromLocalFile(self.lineEditsdir.text() + '/' + self.listWidget.currentItem().text()) self.content = M.QMediaContent(self.url) self.player = M.QMediaPlayer() self.player.setMedia(self.content) self.lblstatus.setStyleSheet("QLabel {background-color: rgb(255, 255, 0);color: rgb(0, 170, 0);}") self.lblstatus.setText("Playing") self.butstop.setEnabled(True) self.player.play() self.butstop.setEnabled(False) def stop(self): self.player.stop() self.lblstatus.setText("Not Playing") self.lblstatus.setStyleSheet("QLabel {background-color: rgb(255, 255, 0);color: rgb(255, 0, 0);}") def playreset(self): self.lblstatus.setText("Not Playing") self.lblstatus.setStyleSheet("QLabel {background-color: rgb(255, 255, 0);color: rgb(255, 0, 0);}") def _buttonbrowse(self, clicked): a = 0 folder = str(QFileDialog.getExistingDirectory(None, "Select Directory")) self.lineEditsdir.setText(folder) os.chdir(folder) self.listWidget.clear() for file in glob.glob("*.wav"): self.listWidget.insertItem(a, file) def _fileselected(self,clicked): self.lineEditselected.setText(self.listWidget.currentItem().text()) self.getwavduration() self.butplay.setEnabled(True) def getwavduration(self): fname = self.listWidget.currentItem().text() print(fname) with contextlib.closing(wave.open(fname, 'r')) as f: frames = f.getnframes() rate = f.getframerate() duration = frames / float(rate) # rounded = int(duration(round)) duration = round(duration) td = timedelta(seconds=duration) self.lineEditduration.setText(str(td)) if __name__ == "__main__": app = QtWidgets.QApplication(sys.argv) MainWindow = QtWidgets.QMainWindow() ui = Ui_MainWindow() ui.setupUi(MainWindow) ui.lblstatus.setStyleSheet("QLabel {background-color: rgb(255, 255, 0);color: rgb(255, 0, 0);}") MainWindow.show() sys.exit(app.exec_()) SHIFT838 Hồi đáp Trang web Tìm Hồi đáp trưởng khoa Bài viết. 4.558 Chủ đề. 16 Đã tham gia. Tháng 2 năm 2020 Danh tiếng. 263 Mar-11-2022, 05. 15 giờ sángĐây không phải là nút vật lý. Tại sao có một nút dừng ở tất cả? . Và khi bạn nhấn nút dừng, nó sẽ quay lại phát. Điều đó chỉ còn lại việc đi đến cuối phương tiện và tự động chuyển từ Dừng sang Phát Hồi đáp Tìm thấy Hồi đáp cố vấn01 Bài viết. 791 Chủ đề. 94 Đã tham gia. Tháng 9 năm 2019 Danh tiếng. 70 11-Mar-2022, 07. 58 PM (Bài đăng này đã được sửa đổi lần cuối. Mar-11-2022, 07. 58 PM by menator01. Chỉnh sửa lý do. Mã cập nhật )Đây là một ví dụ đơn giản. thay thế old_car. tập tin wav #! /usr/bin/env python3 import sys from PyQt5.QtWidgets import (QApplication, QLabel, QVBoxLayout, QWidget, QPushButton) from PyQt5 import QtCore from PyQt5.QtMultimedia import(QMediaPlayer, QMediaContent) def _play(): player.play() def state_changed(state): if state == QMediaPlayer.PlayingState: text = 'Playing' color = 'green' else: text = 'Stopped' color = 'red' label.setText(f'{text}') label.setStyleSheet(f'color:{color}') if __name__ == '__main__': app = QApplication([]) layout = QVBoxLayout() file = 'old_car.wav' player = QMediaPlayer() sound = QtCore.QUrl.fromLocalFile(file) player.setMedia(QMediaContent(sound)) label = QLabel('Stopped') label.setStyleSheet('color:red;') btn = QPushButton('Play') btn.pressed.connect(_play) player.stateChanged.connect(state_changed) layout.addWidget(label) layout.addWidget(btn) widget = QWidget() widget.setLayout(layout) widget.show() sys.exit(app.exec()) Tôi hoan nghênh mọi phản hồi Hồi đáp Tìm thấy Hồi đáp |