rs-qrsk
Июнь 1, 2020 16:17:39
Всем привет.
Подскажите, какой модуль поможет мне в решении данной задачи.
Есть файл аудио, например filename.wav, определенной кодировки. Мне нужно этот файл представить в виде массива байтов и отправлять порциями в TCP сокет.
С модулем socket я разобрался, а вот каким модулем мне работать с аудиофайлом не пойму.
Рассматривал wave, pyaudio, librosa
FishHook
Июнь 1, 2020 16:29:33
А, простите, какое дело протоколу TCP до того, что это именно аудио-файл? Ну байты и байты, одни байты от других ничем не отличаются, будь то музыка, текст, программа или картинка. Это работа клиента думать, что с этими байтами делать, а не сервера.
rs-qrsk
Июнь 1, 2020 16:38:12
Т.е если я начну работу вот так, то я смогу дальше это определить в TCP?
f = open('filename.wav', 'rb')
song = f.read()
FishHook
Июнь 1, 2020 16:49:16
Дайте хоть одну причину, почему нет.
rs-qrsk
Июнь 1, 2020 16:52:15
FishHook
я не знаю, поэтому и спрашиваю)
py.user.next
Июнь 1, 2020 23:52:37
rs-qrsk
Т.е если я начну работу вот так, то я смогу дальше это определить в TCP?
Читай блоками, для этого в .read() подавай число - размер блока в байтах (октетах). Можно сделать генератор, который будет из файла читать поблочно и возвращать куски, пока файл не закончится.
>>> def get_blocks(fname, block_size):
... with open(fname, 'rb') as fin:
... block = fin.read(block_size)
... while block != b'':
... yield block
... block = fin.read(block_size)
...
>>> it = get_blocks('/etc/passwd', 4)
>>> for _ in range(3):
... block = next(it)
... print(block)
...
b'root'
b':x:0'
b':0:r'
>>> for block in get_blocks('/home/guest/.bash_profile', 15):
... print(block)
...
b'# .bash_profile'
b'\n\n# Get the ali'
b'ases and functi'
b'ons\nif [ -f ~/.'
b'bashrc ]; then\n'
b'\t. ~/.bashrc\nfi'
b'\n\n# User specif'
b'ic environment '
b'and startup pro'
b'grams\n\nPATH=$PA'
b'TH:$HOME/.local'
b'/bin:$HOME/bin:'
b'/usr/local/bin\n'
b'\nexport PATH\n\ne'
b'xport PATH="$HO'
b'ME/.cargo/bin:$'
b'PATH"\n'
>>>
tags: generator file
rs-qrsk
Июнь 2, 2020 09:52:30
py.user.next, спасибо большое)
Я пока написал свой вариант, но попробую и так.