From 05c5673442cc0e6cdd73ca10d84adae860d5bae0 Mon Sep 17 00:00:00 2001 From: Milanka Ringwald Date: Fri, 8 Jul 2016 11:48:14 +0200 Subject: [PATCH] add msbc support to python sbc decoder --- test/sbc/data/testfile.msbc | Bin 0 -> 30024 bytes test/sbc/sbc_decoder.py | 74 ++++++++++++++++++++++++++---------- 2 files changed, 54 insertions(+), 20 deletions(-) create mode 100644 test/sbc/data/testfile.msbc diff --git a/test/sbc/data/testfile.msbc b/test/sbc/data/testfile.msbc new file mode 100644 index 0000000000000000000000000000000000000000..a41340b857ddd5da796b924ff515a4df694a69dc GIT binary patch literal 30024 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 UMih*=%dPkPWc*k)`!AXQ4*=R(0ssI2 literal 0 HcmV?d00001 diff --git a/test/sbc/sbc_decoder.py b/test/sbc/sbc_decoder.py index 8e5938ce0..e9b55b404 100755 --- a/test/sbc/sbc_decoder.py +++ b/test/sbc/sbc_decoder.py @@ -9,6 +9,7 @@ from sbc_synthesis_v1 import * V = np.zeros(shape = (2, 10*2*8)) N = np.zeros(shape = (16,8)) total_time_ms = 0 +mSBC_enabled = 1 def sbc_unpack_frame(fin, available_bytes, frame): if available_bytes == 0: @@ -16,12 +17,17 @@ def sbc_unpack_frame(fin, available_bytes, frame): raise TypeError frame.syncword = get_bits(fin,8) - if frame.syncword != 156: - print ("out of sync %02x" % frame.syncword) - return -1 + if mSBC_enabled: + if frame.syncword != 173: + print ("out of sync %02x" % frame.syncword) + return -1 + else: + if frame.syncword != 156: + print ("out of sync %02x" % frame.syncword) + return -1 + frame.sampling_frequency = get_bits(fin,2) frame.nr_blocks = nr_blocks[get_bits(fin,2)] - frame.channel_mode = get_bits(fin,2) if frame.channel_mode == MONO: @@ -31,12 +37,10 @@ def sbc_unpack_frame(fin, available_bytes, frame): frame.allocation_method = get_bits(fin,1) frame.nr_subbands = nr_subbands[get_bits(fin,1)] - frame.init(frame.nr_blocks, frame.nr_subbands, frame.nr_channels) - frame.bitpool = get_bits(fin,8) frame.crc_check = get_bits(fin,8) - # frame.join = np.zeros(frame.nr_subbands, dtype = np.uint8) + frame.init(frame.nr_blocks, frame.nr_subbands, frame.nr_channels) if frame.channel_mode == JOINT_STEREO: for sb in range(frame.nr_subbands-1): @@ -49,12 +53,40 @@ def sbc_unpack_frame(fin, available_bytes, frame): for ch in range(frame.nr_channels): for sb in range(frame.nr_subbands): frame.scale_factor[ch][sb] = get_bits(fin, 4) - + if mSBC_enabled: + #frame.nr_blocks = 16 + #frame.bitpool = 26 + #frame.nr_subbands = 1 + print "frequency: ", frame.sampling_frequency + print "subbands: ", frame.nr_blocks/4-1 + print "bitpool: ", frame.bitpool + print "blocks : ", frame.nr_blocks/4-1 + print "alloc : ", frame.allocation_method + print "mode : ", frame.channel_mode + print "scale factor: ", frame.scale_factor + crc = calculate_crc(frame) if crc != frame.crc_check: - print frame - print "error, crc not equal: ", crc, frame.crc_check - exit(1) + print "CRC mismatch: calculated %d, expected %d" % (crc, frame.crc_check) + exit(10) + + if mSBC_enabled: + frame.nr_subbands = 8 + frame.bitpool = 26 + frame.nr_blocks = 15 + #frame.sampling_frequency = 0 + + frame.init(frame.nr_blocks, frame.nr_subbands, frame.nr_channels) + + if frame.channel_mode == JOINT_STEREO: + for sb in range(frame.nr_subbands-1): + frame.join[sb] = get_bits(fin,1) + get_bits(fin,1) # RFA + + for ch in range(frame.nr_channels): + for sb in range(frame.nr_subbands): + frame.scale_factor[ch][sb] = get_bits(fin, 4) + frame.scalefactor = np.zeros(shape=(frame.nr_channels, frame.nr_subbands), dtype = np.int32) for ch in range(frame.nr_channels): @@ -266,10 +298,14 @@ if __name__ == "__main__": print(usage) sys.exit(1) try: + mSBC_enabled = 0 infile = sys.argv[1] if not infile.endswith('.sbc'): - print(usage) - sys.exit(1) + if infile.endswith('.msbc'): + mSBC_enabled = 1 + else: + print(usage) + sys.exit(1) wavfile = infile.replace('.sbc', '-decoded.wav') fout = False @@ -296,15 +332,13 @@ if __name__ == "__main__": print "== Frame %d == %d" % (frame_count, fin.tell()) err = sbc_unpack_frame(fin, file_size - fin.tell(), frame) - if frame_count == 0: - sbc_init_sythesis(frame.nr_subbands, implementation) - print frame - - if err: print "error, frame_count: ", frame_count - break - + continue + + if frame_count == 0: + sbc_init_sythesis(frame.nr_subbands, implementation) + print frame sbc_decode(frame, implementation)