Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyQt5设置回放速率 从PyQt5导入QtCore、QtGui、qtwidget、qtmedia 从PyQt5.QtCore导入QByteArray 从PyQt5.QtMultimedia导入QaudioCoder 类Ui_主窗口(对象): def设置U_Python_Pyqt5 - Fatal编程技术网

Python PyQt5设置回放速率 从PyQt5导入QtCore、QtGui、qtwidget、qtmedia 从PyQt5.QtCore导入QByteArray 从PyQt5.QtMultimedia导入QaudioCoder 类Ui_主窗口(对象): def设置U

Python PyQt5设置回放速率 从PyQt5导入QtCore、QtGui、qtwidget、qtmedia 从PyQt5.QtCore导入QByteArray 从PyQt5.QtMultimedia导入QaudioCoder 类Ui_主窗口(对象): def设置U,python,pyqt5,Python,Pyqt5,PyQt5设置回放速率 从PyQt5导入QtCore、QtGui、qtwidget、qtmedia 从PyQt5.QtCore导入QByteArray 从PyQt5.QtMultimedia导入QaudioCoder 类Ui_主窗口(对象): def设置UI(自我,主窗口): MainWindow.setObjectName(“MainWindow”) 主窗口。调整大小(246134) self.centralwidget=qtwidts.QWidget(主窗口) self.centralwid

PyQt5设置回放速率
从PyQt5导入QtCore、QtGui、qtwidget、qtmedia
从PyQt5.QtCore导入QByteArray
从PyQt5.QtMultimedia导入QaudioCoder
类Ui_主窗口(对象):
def设置UI(自我,主窗口):
MainWindow.setObjectName(“MainWindow”)
主窗口。调整大小(246134)
self.centralwidget=qtwidts.QWidget(主窗口)
self.centralwidget.setObjectName(“centralwidget”)
MainWindow.setCentralWidget(self.centralwidget)
自重传(主窗口)
QtCore.QMetaObject.connectSlotsByName(主窗口)
自启动\u mp3(主窗口)
def重新传输(自身,主窗口):
_translate=QtCore.QCoreApplication.translate
setWindowTitle(_translate(“MainWindow”、“MainWindow”))
def start_mp3(自身,主窗口):
self.output\u devices\u qt=qtmedia.QAudioDeviceInfo.availableDevices(qtmedia.QAudio.AudioOutput)
文件路径=r“C:\Users\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\n
自我解码测试声音(文件路径,主窗口)
def解码测试声音(自身、文件路径、主窗口):
self.desiredFormat=qtmedia.QAudioFormat()
self.desiredFormat.setCodec(“音频/pcm”)
self.desiredFormat.setSampleRate(44100)
self.desiredFormat.setChannelCount(1)
self.desiredFormat.setSampleSize(16)
self.desiredFormat.setByteOrder(qtmedia.QAudioFormat.LittleEndian)
self.desiredFormat.setSampleType(QtMultimedia.QAudioFormat.SignedInt)
self.m_buffer=QByteArray()
self.m_buffer_copy=QByteArray()
self.decoder=QAudioDecoder()
self.decoder.bufferReady.connect(lambda:self.readBuffer(主窗口))
self.decoder.setAudioFormat(self.desiredFormat)
self.decoder.setSourceFilename(文件路径)
self.decoder.start()
self.play\u状态=0
def读取缓冲区(自身,主窗口):
buffer=self.decoder.read()
count=缓冲区。字节计数()
如果(计数>0):
buffer_data=buffer.constData().asstring(计数)
self.m\u buffer.append(buffer\u数据)
如果(自我播放状态!=1):
自启动\u播放器(主窗口)
self.play_status=1
其他:
返回1
def timeToSize_1(自身):
返回((self.desiredFormat.channelCount()*(self.desiredFormat.sampleSize()/8)*self.desiredFormat.sampleRate())*self.m_time_to_buffer/1000)
def timeToSize_2(自身):
返回((self.desiredFormat.channelCount()*(self.desiredFormat.sampleSize()/8)*self.desiredFormat.sampleRate())*self.MAX\u BUFFERED\u TIME/1000)
def预播放(自,主窗口):
如果(自我播放状态!=0):
如果(self.m_play_called==False):
self.m_play_called=True
self.timer=QtCore.QTimer(主窗口)
self.timer.setSingleShot(真)
自拍定时器。单拍(0,lambda:self.sound_mp3(主窗口))
def sound_mp3(自身,主窗口):
如果(自我播放状态!=0):
self.m_play_called=False
如果self.m_buffer.isEmpty():
自动停止播放器(主窗口)
self.m_buffer_requested=真
返回
elif self.m_buffer.size()0):
samples=self.m_buffer.mid(0,readlen)
len=samples.size()
self.m_buffer.remove(0,len)
如果(len>0):
如果(self.m_audio_output.state()!=2):
self.m_output_device.write(示例)
其他:
返回1
如果(len!=readlen):
打破
chunks=chunks-1
def start_播放器(自身,主窗口):
self.m_play_called=False
self.m_buffer_requested=真
self.m_time_to_buffer=50
self.MAX\u缓冲时间=100
如果(self.desiredFormat.sampleRate()>=44100):
self.internal_buffer_size=(1024*10)*self.desiredFormat.channelCount()
elif(self.desiredFormat.sampleRate()>=24000):
self.internal_buffer_size=(1024*6)*self.desiredFormat.channelCount()
其他:
self.internal_buffer_size=(1024*4)*self.desiredFormat.channelCount()
#self.m\u audio\u output=qtmedia.QAudioOutput(self.output\u devices\u qt[self.output\u device\u index],self.desiredFormat)
self.m_audio_output=qtmedia.QAudioOutput(self.output_devices_qt[0],self.desiredFormat)
self.m_audio_output.setBufferSize(self.internal_buffer_size)
self.m\u size\u to\u buffer=int(self.timeToSize\u 1())
self.m_max_size_to_buffer=self.m_size_to_buffer+int(self.timeToSize_2())
self.m_output_device=self.m_audio_output.start()
self.timer_play=QtCore.QTimer(主窗口)
self.timer\u play.settimer类型(QtCore.Qt.PreciseTimer)
self.timer\u play.timeout.connect(lambda:self.preplay(主窗口))
自动定时器\播放启动(10)
def stop_播放器(自身,主窗口):
self.play\u状态=0
self.m_audio_output.stop()
self.timer\u play.stop()
如果名称=“\uuuuu main\uuuuuuuu”:
导入系统
app=qtwidts.QApplication(sys.argv)
app.addLibraryPath(r“C:/Users/Χρήστος/AppData/Local/Programs/Python/Python38/Lib/site-packages/pyqt5_-tools/Qt/plugins)
app.addLibraryPath(r“C:/Users/Χρήστος)
from PyQt5 import QtCore, QtGui, QtWidgets, QtMultimedia
from PyQt5.QtCore import QByteArray
from PyQt5.QtMultimedia import QAudioDecoder

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(246, 134)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
        
        self.start_mp3(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        
    def start_mp3(self,MainWindow):
        self.output_devices_qt = QtMultimedia.QAudioDeviceInfo.availableDevices(QtMultimedia.QAudio.AudioOutput)
        file_path = r"C:\Users\Χρήστος\Desktop\Papinhio player\project\disket box\mp3 files\ΑΓΙΑ ΚΥΡΙΑΚΗ.mp3"
        self.decode_test_sound(file_path,MainWindow)

    def decode_test_sound(self,file_path,MainWindow):
        self.desiredFormat = QtMultimedia.QAudioFormat()
        self.desiredFormat.setCodec("audio/pcm")
        self.desiredFormat.setSampleRate(44100)
        self.desiredFormat.setChannelCount(1)
        self.desiredFormat.setSampleSize(16)
        self.desiredFormat.setByteOrder(QtMultimedia.QAudioFormat.LittleEndian)
        self.desiredFormat.setSampleType(QtMultimedia.QAudioFormat.SignedInt)
        
        self.m_buffer = QByteArray()
        self.m_buffer_copy = QByteArray()
        
        self.decoder = QAudioDecoder()
        self.decoder.bufferReady.connect(lambda:self.readBuffer(MainWindow))
        self.decoder.setAudioFormat(self.desiredFormat)
        self.decoder.setSourceFilename(file_path)   
        self.decoder.start()
        
        self.play_status = 0
        
    def readBuffer(self,MainWindow):
        buffer = self.decoder.read()
        count = buffer.byteCount()
        if(count>0):
            buffer_data = buffer.constData().asstring(count)
            self.m_buffer.append(buffer_data)
            if(self.play_status!=1):
                self.start_player(MainWindow)
                self.play_status = 1
        else:
            return 1
            
    def timeToSize_1(self):
        return ((self.desiredFormat.channelCount() * (self.desiredFormat.sampleSize() / 8) * self.desiredFormat.sampleRate()) * self.m_time_to_buffer / 1000)
    
    def timeToSize_2(self):

        return ((self.desiredFormat.channelCount() * (self.desiredFormat.sampleSize() / 8) * self.desiredFormat.sampleRate()) * self.MAX_BUFFERED_TIME / 1000)
    
            
    def preplay(self,MainWindow):
        if(self.play_status!=0):
            if(self.m_play_called==False):
                self.m_play_called = True
                self.timer = QtCore.QTimer(MainWindow)
                self.timer.setSingleShot(True)
                self.timer.singleShot(0,lambda:self.sound_mp3(MainWindow))
            
    def sound_mp3(self,MainWindow):
        if(self.play_status!=0):
            self.m_play_called = False
            if self.m_buffer.isEmpty():
                self.stop_player(MainWindow)
                self.m_buffer_requested = True
                return
            elif self.m_buffer.size() < self.m_size_to_buffer:
                if self.m_buffer_requested:
                    return
            else:
                self.m_buffer_requested = False
                
            readlen = int(self.m_audio_output.periodSize())
            chunks = int(self.m_audio_output.bytesFree() / readlen)
            
            
            while (chunks>0):
                samples = self.m_buffer.mid(0, readlen)
                len = samples.size()
                self.m_buffer.remove(0, len)
                if (len>0):
                    if(self.m_audio_output.state()!=2):
                        self.m_output_device.write(samples)
                    else:
                        return 1

                if (len != readlen):
                    break

                chunks = chunks - 1
    
    def start_player(self,MainWindow):
        self.m_play_called = False
        self.m_buffer_requested = True
        self.m_time_to_buffer = 50
        self.MAX_BUFFERED_TIME = 100
        
        if (self.desiredFormat.sampleRate() >= 44100):
            self.internal_buffer_size = (1024 * 10) * self.desiredFormat.channelCount()
        elif (self.desiredFormat.sampleRate() >= 24000):
            self.internal_buffer_size = (1024 * 6) * self.desiredFormat.channelCount()
        else:
            self.internal_buffer_size = (1024 * 4) * self.desiredFormat.channelCount()
            
        #self.m_audio_output = QtMultimedia.QAudioOutput(self.output_devices_qt[self.output_device_index], self.desiredFormat)
        self.m_audio_output = QtMultimedia.QAudioOutput(self.output_devices_qt[0], self.desiredFormat)
        self.m_audio_output.setBufferSize(self.internal_buffer_size)
        
        self.m_size_to_buffer = int(self.timeToSize_1())
        
        self.m_max_size_to_buffer = self.m_size_to_buffer + int(self.timeToSize_2())
        
        self.m_output_device = self.m_audio_output.start()
        
        self.timer_play = QtCore.QTimer(MainWindow)
        self.timer_play.setTimerType(QtCore.Qt.PreciseTimer)
        self.timer_play.timeout.connect(lambda:self.preplay(MainWindow))
        self.timer_play.start(10)
        
    def stop_player(self,MainWindow):
        self.play_status = 0
        self.m_audio_output.stop()
        self.timer_play.stop()

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    app.addLibraryPath(r"C:/Users/Χρήστος/AppData/Local/Programs/Python/Python38/Lib/site-packages/pyqt5_tools/Qt/plugins")
    app.addLibraryPath(r"C:/Users/Χρήστος/AppData/Local/Programs/Python/Python38/lib/site-packages/PyQt5/Qt/plugins")   
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())