Я использую sd.Stream для вывода звука и записи с микрофона одновременно.Мне нужно иметь возможность получать вход и выход одновременно для обработки звука в реальном времени, поэтому я использую Stream.Если я использую все файлы, которые используют одну и ту же частоту дискретизации, это работает нормально.Если у меня есть некоторые аудиофайлы, которые не имеют одинаковую частоту дискретизации, я должен иметь возможность изменить частоту дискретизации, используемую Stream.
try:
stream = sd.Stream(device=(args.input_device, args.output_device),
samplerate=args.samplerate, blocksize=args.blocksize,
dtype='float32', latency=(0, 0),
channels=len(args.channels), callback=callback, finished_callback=finished_callback)
with stream:
ani = FuncAnimation(fig, update_plot, interval=args.interval, blit=False, init_func=plot_init)
plt.show()
Моя первая попытка закрыть поток в законченном вызове:
def finished_callback():
global stream
print "just closed"
stream.close()
, а затем снова открыть поток в update_plot:
if stream.closed and callback.fs_mismatch:
args.samplerate = callback.new_fs
callback.fs_mismatch = 0
stream = sd.Stream(device=(args.input_device, args.output_device),
samplerate=args.samplerate, blocksize=args.blocksize,
dtype='float32', latency=(0, 0),
channels=len(args.channels), callback=callback, finished_callback=finished_callback)
print "stopped stream and fs mismatch!\n"
Повторное открытие потока, похоже, не имеет никакого эффекта вообще.Я считаю, что причина этого в том, что у меня нет ничего блокирующего после нового потока, как я использую ранее (plt.show).У меня не может быть ничего блокирующего в этом разделе, потому что именно здесь я обновляю свой сюжет.Есть ли способ изменить частоту дискретизации потока после того, как он уже открыт, или есть другой способ выполнить то, что я пытаюсь сделать?