Python-sounddevice chơi tập tin wav

ca838
Người Pháp ngớ ngẩn

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ều

Tô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

Vì vậy, tôi muốn có thể cập nhật thông báo trạng thái thành trạng thái 'Đang chơi' trong khi. wav đang phát và sau đó khi hoàn thành 'Không phát'

Vấn đề tôi gặp phải là nếu tôi xóa lệnh thực để phát tệp thì nhãn sẽ được cập nhật trên biểu mẫu. Nhưng ngay sau khi tôi đặt lệnh để phát, nhãn sẽ không bao giờ được cập nhật

tên nhãn của tôi là lblstatus

Khi tệp được chọn từ listwidget và tôi nhấp vào nút phát, nó sẽ phát

Đây là mã của tôi, có gì sai với nó không?

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[]
        return
cảm ơn

SHIFT838
http. // ca838. 99er. mạng lưới

Telnet BBS
hợp nhất. ddns. mạng lưới. 9640

Hồi đáp

Trang web Tìm

Hồi đáp

cố vấn01
bàn chân khổng lồ

Bài viết. 791

Chủ đề. 94

Đã tham gia. Tháng 9 năm 2019

Danh tiếng. 70

Mar-10-2022, 11. 28 giờ tối

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
Câu hỏi ngớ ngẩn duy nhất, là câu hỏi không được hỏi

tập lệnh của tôi
CookBook - Shmup - Trình phát nhạc PyQt5


Hồi đáp

Tìm thấy

Hồi đáp

ca838
Người Pháp ngớ ngẩn

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

Tôi đã thay đổi chức năng playwav bên dưới

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
http. // ca838. 99er. mạng lưới

Telnet BBS
hợp nhất. ddns. mạng lưới. 9640

Hồi đáp

Trang web Tìm

Hồi đáp

ca838
Người Pháp ngớ ngẩn

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áng

Phâ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

Tôi muốn tiếp tục tắt nút dừng cho đến khi tôi nhấn phát một tệp khi tệp phát xong. Tôi muốn nhãn đổi lại thành 'không phát' và nút dừng chuyển sang trạng thái tắt. Trong khi tệp đang phát, tôi muốn tắt nút phát

Nếu tôi đặt enable thành false trong hàm thì nó sẽ bị vô hiệu hóa ngay lập tức vì có vẻ như nó chạy hoàn toàn qua mã

Vì vậy, trong ngắn hạn. Tôi muốn có thể chơi và dừng theo ý muốn nhưng khi nhấn các nút, nhãn sẽ thay đổi thành đang phát hoặc không phát trong khi đảm bảo nút dừng vẫn ở trạng thái chính xác hoặc chuyển sang trạng thái chính xác

# -*- 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
http. // ca838. 99er. mạng lưới

Telnet BBS
hợp nhất. ddns. mạng lưới. 9640

Hồi đáp

Trang web Tìm

Hồi đáp

trưởng khoa
Cân nặng giống như một con vịt

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

Trình phát đa phương tiện có thể có tín hiệu thông báo cho chương trình khi trạng thái phương tiện thay đổi. Có lẽ vị trí đã thay đổi?

Hồi đáp

Tìm thấy

Hồi đáp

cố vấn01
bàn chân khổng lồ

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
Câu hỏi ngớ ngẩn duy nhất, là câu hỏi không được hỏi

tập lệnh của tôi
CookBook - Shmup - Trình phát nhạc PyQt5


Hồi đáp

Tìm thấy

Hồi đáp

Chủ Đề