test/sbc: allow stand alone use of encoder/decoder

This commit is contained in:
Matthias Ringwald 2016-05-03 15:24:36 +02:00
parent 41a4a18d9c
commit ba114a9841
3 changed files with 108 additions and 104 deletions

View File

@ -200,59 +200,60 @@ def write_wav_file(fout, sample):
fout.writeframes(value_str) fout.writeframes(value_str)
# usage = ''' if __name__ == "__main__":
# Usage: ./sbc_decoder.py input.sbc usage = '''
# ''' Usage: ./sbc_decoder.py input.sbc
'''
# if (len(sys.argv) < 2): if (len(sys.argv) < 2):
# print(usage) print(usage)
# sys.exit(1) sys.exit(1)
# try: try:
# infile = sys.argv[1] infile = sys.argv[1]
# if not infile.endswith('.sbc'): if not infile.endswith('.sbc'):
# print(usage) print(usage)
# sys.exit(1) sys.exit(1)
# wavfile = infile.replace('.sbc', '-decoded.wav') wavfile = infile.replace('.sbc', '-decoded.wav')
# with open (infile, 'rb') as fin: with open (infile, 'rb') as fin:
# try: try:
# frame_count = 0 frame_count = 0
# while True: while True:
# sbc_frame = SBCFrame(0,0,0,0,0) sbc_frame = SBCFrame(0,0,0,0,0)
# if frame_count % 200 == 0: if frame_count % 200 == 0:
# print "== Frame %d ==" % (frame_count) print "== Frame %d ==" % (frame_count)
# err = sbc_unpack_frame(fin, sbc_frame) err = sbc_unpack_frame(fin, sbc_frame)
# if err: if err:
# print "error, frame_count: ", frame_count print "error, frame_count: ", frame_count
# break break
# sbc_decode(sbc_frame) sbc_decode(sbc_frame)
# # print sbc_frame.pcm # print sbc_frame.pcm
# if frame_count == 0: if frame_count == 0:
# fout = wave.open(wavfile, 'w') fout = wave.open(wavfile, 'w')
# fout.setnchannels(sbc_frame.nr_channels) fout.setnchannels(sbc_frame.nr_channels)
# fout.setsampwidth(2) fout.setsampwidth(2)
# fout.setframerate(sampling_frequency[sbc_frame.sampling_frequency]) fout.setframerate(sampling_frequency[sbc_frame.sampling_frequency])
# fout.setnframes(0) fout.setnframes(0)
# fout.setcomptype = 'NONE' fout.setcomptype = 'NONE'
# write_wav_file(fout, sbc_frame.pcm) write_wav_file(fout, sbc_frame.pcm)
# frame_count += 1 frame_count += 1
# # if frame_count == 8: # if frame_count == 8:
# # fout.close() # fout.close()
# # break # break
# except TypeError: except TypeError:
# fout.close() fout.close()
# print "DONE, SBC file %s decoded into WAV file %s ", (infile, wavfile) print "DONE, SBC file %s decoded into WAV file %s ", (infile, wavfile)
# exit(0) exit(0)
# except IOError as e: except IOError as e:
# print(usage) print(usage)
# sys.exit(1) sys.exit(1)

View File

@ -49,9 +49,9 @@ def sbc_analyse(frame, ch, blk, C, debug):
if debug: if debug:
#print "EX:", frame.EX #print "EX:", frame.EX
print "X:", X print "X:", X
print "Z:" # print "Z:"
print "Y:", Y # print "Y:", Y
print "W:", W # print "W:", W
print "S:", S print "S:", S
for sb in range(M): for sb in range(M):
@ -163,60 +163,63 @@ def sbc_quantization(frame):
return 0 return 0
if __name__ == "__main__":
usage = '''
Usage: ./sbc_encoder.py input.wav block_size nr_subbands bitpool
'''
nr_blocks = 0
nr_subbands = 0
# usage = ''' if (len(sys.argv) < 5):
# Usage: ./sbc_encoder.py input.wav block_size nr_subbands bitpool print(usage)
# ''' sys.exit(1)
# nr_blocks = 0 try:
# nr_subbands = 0 infile = sys.argv[1]
if not infile.endswith('.wav'):
print(usage)
sys.exit(1)
nr_blocks = int(sys.argv[2])
nr_subbands = int(sys.argv[3])
bitpool = int(sys.argv[4])
sbcfile = infile.replace('.wav', '-encoded.sbc')
# if (len(sys.argv) < 5): fin = wave.open(infile, 'rb')
# print(usage)
# sys.exit(1)
# try:
# infile = sys.argv[1]
# if not infile.endswith('.wav'):
# print(usage)
# sys.exit(1)
# nr_blocks = int(sys.argv[2])
# nr_subbands = int(sys.argv[3])
# bitpool = int(sys.argv[4])
# sbcfile = infile.replace('.wav', '-encoded.sbc')
# fin = wave.open(infile, 'rb')
# wav_nr_channels = fin.getnchannels()
# wav_sample_rate = fin.getframerate()
# wav_nr_frames = fin.getnframes()
# sbc_sampling_frequency = sbc_sampling_frequency_index(wav_sample_rate)
# sbc_frame_count = 0
# audio_frame_count = 0
# while audio_frame_count < wav_nr_frames:
# if sbc_frame_count % 200 == 0:
# print "== Frame %d ==" % (sbc_frame_count)
# sbc_encoder_frame = SBCFrame(nr_blocks, nr_subbands, wav_nr_channels, sbc_sampling_frequency, bitpool)
# wav_nr_audio_frames = sbc_encoder_frame.nr_blocks * sbc_encoder_frame.nr_subbands wav_nr_channels = fin.getnchannels()
# fetch_samples_for_next_sbc_frame(fin, wav_nr_audio_frames, sbc_encoder_frame) wav_sample_rate = fin.getframerate()
# sbc_encode(sbc_encoder_frame) wav_nr_frames = fin.getnframes()
sbc_sampling_frequency = sbc_sampling_frequency_index(wav_sample_rate)
sbc_frame_count = 0
audio_frame_count = 0
while audio_frame_count < wav_nr_frames:
# if sbc_frame_count % 200 == 0:
print "== Frame %d ==" % (sbc_frame_count)
sbc_encoder_frame = SBCFrame(nr_blocks, nr_subbands, wav_nr_channels, sbc_sampling_frequency, bitpool)
wav_nr_audio_frames = sbc_encoder_frame.nr_blocks * sbc_encoder_frame.nr_subbands
fetch_samples_for_next_sbc_frame(fin, wav_nr_audio_frames, sbc_encoder_frame)
sbc_encode(sbc_encoder_frame, 1)
# stream = frame_to_bitstream(frame)
audio_frame_count += wav_nr_audio_frames
sbc_frame_count += 1
if sbc_frame_count == 87:
break;
# except TypeError:
# fin.close()
# print "DONE, WAV file %s encoded into SBC file %s ", (infile, sbcfile)
#channels, num_audio_frames, wav_nr_channels, wav_sample_rate = read_waw_file(wavfile)
# # stream = frame_to_bitstream(frame)
# audio_frame_count += wav_nr_audio_frames except IOError as e:
# sbc_frame_count += 1 print(usage)
sys.exit(1)
# # except TypeError:
# # fin.close()
# # print "DONE, WAV file %s encoded into SBC file %s ", (infile, sbcfile)
# #channels, num_audio_frames, wav_nr_channels, wav_sample_rate = read_waw_file(wavfile)
# except IOError as e:
# print(usage)
# sys.exit(1)

View File

@ -149,7 +149,6 @@ try:
sbc_decoder_frame.nr_channels, sbc_decoder_frame.nr_channels,
sbc_decoder_frame.sampling_frequency, sbc_decoder_frame.sampling_frequency,
sbc_decoder_frame.bitpool) sbc_decoder_frame.bitpool)
sbc_encoder_frame.pcm = np.array(sbc_decoder_frame.pcm) sbc_encoder_frame.pcm = np.array(sbc_decoder_frame.pcm)
# TODO: join field # TODO: join field
# TODO: clear memory # TODO: clear memory
@ -158,8 +157,9 @@ try:
# sbc_quantization(sbc_encoder_frame) # sbc_quantization(sbc_encoder_frame)
# print "encoder pcm ", sbc_encoder_frame.pcm # print "encoder pcm ", sbc_encoder_frame.pcm
sbc_encode(sbc_encoder_frame,frame_count >86) # if frame_count > 86:
print sbc_decoder_frame.sb_sample[0][0]
sbc_encode(sbc_encoder_frame,frame_count >= 0)
# test # test
err = check_equal(sbc_encoder_frame, sbc_decoder_frame, frame_count) err = check_equal(sbc_encoder_frame, sbc_decoder_frame, frame_count)
if err: if err: