chunk = 1024# Record in chunks of 1024 samples sample_format = pyaudio.paInt16 # 16 bits per sample channels = 2 fs = 44100# Record at 44100 samples per second seconds = 3 filename = "output.wav"
p = pyaudio.PyAudio() # Create an interface to PortAudio
# Store data in chunks for 3 seconds for i inrange(0, int(fs / chunk * seconds)): data = stream.read(chunk) frames.append(data)
# Stop and close the stream stream.stop_stream() stream.close() # Terminate the PortAudio interface p.terminate()
print('Finished recording')
# Save the recorded data as a WAV file wf = wave.open(filename, 'wb') wf.setnchannels(channels) wf.setsampwidth(p.get_sample_size(sample_format)) wf.setframerate(fs) wf.writeframes(b''.join(frames)) wf.close()
一个相似的情况是网络套接字通讯。假设一个程序每次只从套接字读取 A 个字节,而网卡缓冲区的大小是 B 字节(通常情况下,缓冲区都是足够大的,也就是 A < B)。在不断有新的数据传入的情况下,如果程序没有及时读取数据,那么这些数据就会留在网卡缓冲区中;直到网卡缓冲区满了,才会发生数据丢失的情况。那么从程序的角度来看,无论相邻的两次读取的操作间隔了多久,只要缓冲区没有溢出,读取得到的数据都会是连续的。这是因为网卡缓冲区起到了暂时保管数据的作用。