Итак, я хочу создать простую программу, такую как проигрыватель музыки, используя протокол сокета UDP.Пока что я могу прочитать файл mp3, разбить его на несколько байтов и непрерывно отправлять его получателю (клиенту).Моя проблема в том, что я хочу воспроизвести mp3-файл по частям при получении его с сервера.Кто-нибудь может дать мне идею, как это сделать?Я пытался сыграть партию после ее получения, но между партией есть переход.Я хочу играть в нее гладко, как спойти.
Примечание: я не хочу получать все партии, присоединяться к ним и играть в них.То, что я хочу, это сыграть роль, получив ее.Большое спасибо за помощь.Я ценю это
Мой код:
Я отправил файл разделения через UDP по этому коду
with open('test.mp3', 'rb') as infile:
d = infile.read(65500)
while d :
time.sleep(1)
sent = sock.sendto(d, address)
d = infile.read(65500)
Я получил файл разделения по этому коду
p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paInt16,
channels=10,
rate=44100,
output=True)
data, server = (sock.recvfrom(65500))
while data != 'stop':
stream.write(data)
data, server = (sock.recvfrom(65500))
stream.stop_stream()
stream.close()
p.terminate()
Я попробовал этот код и получил гудящий звук.
Другой подход:
while 1:
data, server = (sock.recvfrom(65500))
song = AudioSegment.from_file(io.BytesIO(data), format="mp3")
play(song) #with pydub
Этот код работает, но, как вы знаете, я играю каждую партиюотдельно, поэтому существует задержка между каждой частью, и некоторая часть песни отсутствует