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

View File

@ -49,9 +49,9 @@ def sbc_analyse(frame, ch, blk, C, debug):
if debug:
#print "EX:", frame.EX
print "X:", X
print "Z:"
print "Y:", Y
print "W:", W
# print "Z:"
# print "Y:", Y
# print "W:", W
print "S:", S
for sb in range(M):
@ -163,60 +163,63 @@ def sbc_quantization(frame):
return 0
if __name__ == "__main__":
usage = '''
Usage: ./sbc_encoder.py input.wav block_size nr_subbands bitpool
'''
nr_blocks = 0
nr_subbands = 0
# usage = '''
# Usage: ./sbc_encoder.py input.wav block_size nr_subbands bitpool
# '''
# nr_blocks = 0
# nr_subbands = 0
if (len(sys.argv) < 5):
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')
# if (len(sys.argv) < 5):
# 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')
# 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)
# 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
# sbc_frame_count = 0
# audio_frame_count = 0
# while audio_frame_count < wav_nr_frames:
while audio_frame_count < wav_nr_frames:
# if sbc_frame_count % 200 == 0:
# print "== Frame %d ==" % (sbc_frame_count)
print "== Frame %d ==" % (sbc_frame_count)
# sbc_encoder_frame = SBCFrame(nr_blocks, nr_subbands, wav_nr_channels, sbc_sampling_frequency, bitpool)
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)
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
# stream = frame_to_bitstream(frame)
audio_frame_count += wav_nr_audio_frames
sbc_frame_count += 1
# # except TypeError:
# # fin.close()
# # print "DONE, WAV file %s encoded into SBC file %s ", (infile, sbcfile)
if sbc_frame_count == 87:
break;
# #channels, num_audio_frames, wav_nr_channels, wav_sample_rate = read_waw_file(wavfile)
# 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)
except IOError as e:
print(usage)
sys.exit(1)

View File

@ -149,7 +149,6 @@ try:
sbc_decoder_frame.nr_channels,
sbc_decoder_frame.sampling_frequency,
sbc_decoder_frame.bitpool)
sbc_encoder_frame.pcm = np.array(sbc_decoder_frame.pcm)
# TODO: join field
# TODO: clear memory
@ -158,8 +157,9 @@ try:
# sbc_quantization(sbc_encoder_frame)
# 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
err = check_equal(sbc_encoder_frame, sbc_decoder_frame, frame_count)
if err: