Форум сайта python.su
Подскажите, пожалуйста, как сделать задержку воспроизведения звука, чтобы клиент сказал, а сервер воспроизвел только через секунд 5.
Вот код принимающего сервера:
import pyaudio
import sys
import socket
chunk = 256
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 15000
timer = 0
host = 'localhost'
port = 2000
adr = (host,port)
p = pyaudio.PyAudio()
stream = p.open(format = FORMAT,channels = CHANNELS,rate = RATE,input = True,output = True,frames_per_buffer = chunk)
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_socket.bind(adr)
print "Your IP address is: ", socket.gethostbyname(host)
print "Server Waiting for client on port 2000"
while 1:
data,adr = server_socket.recvfrom(1024)
stream.write(data,chunk)
Отредактировано (Май 28, 2011 19:16:29)
Офлайн
Может как-то так?: в цикле приема, все пакеты складывать в массив и отмечать время их прибытия, а во втором потоке проверять если время пришло то передать пакет в стрим.
Офлайн
Т.е. сделать еще один буфер? А как отмечать время их прибытия, плохо это в коде представляю?
Офлайн
вот пример ключевого кода
q = Queue.Queue()
# добавляем
while 1:
data,adr = server_socket.recvfrom(1024)
q.put( (data,time.time()) )
# обрабатываем в потоке
while 1:
data, t = q.get()
t += 5
time.sleep( t - time.time() )
stream.write(data,chunk)
Офлайн
похоже программа в цикле добавления зацикливается и до воспроизведения даже не доходит. А q.put до какого момента будет добавлять данные в очередь, непонятно как вообще из этого цикла выйти…..(сорри, с потоками совсем не дружу пока)
Отредактировано (Май 29, 2011 00:55:44)
Офлайн
> похоже программа в цикле добавления зацикливается и до воспроизведения даже не доходит.
поэтому я и сказал что во второй поток.
Офлайн
Пример, который ты привел, как я понял, и есть мое решение. И там в первом цикле первый поток принимает и складывает в очередь, во втором цикле идет второй поток, который достает из очереди и воспроизводит. Так вот, пытаясь так реализовать, у меня во второй цикл вообще не заходит, или я неверно пользуюсь отладкой. Как вообще правильно смотреть в отладчике программы с потоками?
Офлайн