#!/usr/bin/python
import struct
import socket
import math
def makeSin( freq, number_samples, samples_per_seq ) :
data = ''
for i in range(0,number_samples):
data += struct.pack('h', 1000*math.sin( 2*freq*i*math.pi/samples_per_seq ))
return data
# print '''Rev 500'''
Host = '127.0.0.1'
Port = 2600
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((Host, Port))
chunk = s.recv(4*5)
print struct.unpack_from('LLLLL', chunk)
if chunk == '':
print 'Error receiving data\n'
number_samples = 5000
samples_per_sec = 4000
header_fmt = struct.pack('L', 0x20746d66 ) # fmt
header_fmt += struct.pack('L', 16 ) # size = 16
header_fmt += struct.pack('h', 1 ) # format = pcm
header_fmt += struct.pack('h', 1 ) # n. Chanels. unused
header_fmt += struct.pack('L', samples_per_sec )
header_fmt += struct.pack('L', 1 ) # Avg. Bytes Sec. unused
header_fmt += struct.pack('h', 2 ) # block align. Bytes/sample*channel
header_fmt += struct.pack('h', 16 ) # bits_per_sample
size_header_data = number_samples * 2
frequencies = struct.unpack_from('LLLLL', chunk)
header_data = struct.pack('L', 0x61746164 )
header_data += struct.pack('L', size_header_data )
header_data += makeSin( frequencies[0], number_samples/5, samples_per_sec)
header_data += makeSin( frequencies[1], number_samples/5, samples_per_sec)
header_data += makeSin( frequencies[2], number_samples/5, samples_per_sec)
header_data += makeSin( frequencies[3], number_samples/5, samples_per_sec)
header_data += makeSin( frequencies[4], number_samples/5, samples_per_sec)
size = len(header_fmt) + len(header_data) + 4
header = struct.pack('<L', 0x46464952 ) # RIFF
header += struct.pack('<L', size ) # size
header += struct.pack('<L', 0x45564157 ) # WAVE
s.send( header)
s.send( header_fmt)
s.send( header_data )
file = header + header_fmt + header_data
print s.recv(1024)
|