sbc_decoder.py (4771dcb8bbb128f1a2264324662f0c69d4e4d9eb) sbc_decoder.py (1522543de84c04e141f181431af0e80f00b6b718)
1#!/usr/bin/env python
2import numpy as np
3import wave
4import struct
5import sys
6from sbc import *
7
8V = np.zeros(shape = (2, 10*2*8))

--- 30 unchanged lines hidden (view full) ---

39
40 frame.scale_factor = np.zeros(shape=(frame.nr_channels, frame.nr_subbands), dtype = np.int32)
41
42 # print frame.audio_sample
43
44 for ch in range(frame.nr_channels):
45 for sb in range(frame.nr_subbands):
46 frame.scale_factor[ch][sb] = get_bits(fin, 4)
1#!/usr/bin/env python
2import numpy as np
3import wave
4import struct
5import sys
6from sbc import *
7
8V = np.zeros(shape = (2, 10*2*8))

--- 30 unchanged lines hidden (view full) ---

39
40 frame.scale_factor = np.zeros(shape=(frame.nr_channels, frame.nr_subbands), dtype = np.int32)
41
42 # print frame.audio_sample
43
44 for ch in range(frame.nr_channels):
45 for sb in range(frame.nr_subbands):
46 frame.scale_factor[ch][sb] = get_bits(fin, 4)
47
47 crc = calculate_crc(frame)
48 if crc != frame.crc_check:
49 print frame
50 print "error, crc not equal: ", crc, frame.crc_check
51 exit(1)
52
53 frame.scalefactor = np.zeros(shape=(frame.nr_channels, frame.nr_subbands), dtype = np.int32)
54 for ch in range(frame.nr_channels):

--- 5 unchanged lines hidden (view full) ---

60
61 frame.audio_sample = np.ndarray(shape=(frame.nr_blocks, frame.nr_channels, frame.nr_subbands), dtype = np.uint16)
62 for blk in range(frame.nr_blocks):
63 for ch in range(frame.nr_channels):
64 for sb in range(frame.nr_subbands):
65 frame.audio_sample[blk][ch][sb] = get_bits(fin, frame.bits[ch][sb])
66 # print "block %2d - audio sample: %s" % (blk, frame.audio_sample[blk][0])
67
48 crc = calculate_crc(frame)
49 if crc != frame.crc_check:
50 print frame
51 print "error, crc not equal: ", crc, frame.crc_check
52 exit(1)
53
54 frame.scalefactor = np.zeros(shape=(frame.nr_channels, frame.nr_subbands), dtype = np.int32)
55 for ch in range(frame.nr_channels):

--- 5 unchanged lines hidden (view full) ---

61
62 frame.audio_sample = np.ndarray(shape=(frame.nr_blocks, frame.nr_channels, frame.nr_subbands), dtype = np.uint16)
63 for blk in range(frame.nr_blocks):
64 for ch in range(frame.nr_channels):
65 for sb in range(frame.nr_subbands):
66 frame.audio_sample[blk][ch][sb] = get_bits(fin, frame.bits[ch][sb])
67 # print "block %2d - audio sample: %s" % (blk, frame.audio_sample[blk][0])
68
68 # add padding
69 drop_remaining_bits()
70 return 0
71
72def sbc_reconstruct_subband_samples(frame):
73 frame.levels = np.zeros(shape=(frame.nr_channels, frame.nr_subbands), dtype = np.int32)
74 frame.sb_sample = np.zeros(shape=(frame.nr_blocks, frame.nr_channels, frame.nr_subbands))
75
76 for ch in range(frame.nr_channels):

--- 54 unchanged lines hidden (view full) ---

131 U[i*M2+j] = V[ch][i*2*M2+j]
132 U[(i*2+1)*M+j] = V[ch][(i*4+3)*M+j]
133
134 for i in range(L):
135 D = proto_table[i] * (-M)
136 W[i] = U[i]*D
137
138
69 drop_remaining_bits()
70 return 0
71
72def sbc_reconstruct_subband_samples(frame):
73 frame.levels = np.zeros(shape=(frame.nr_channels, frame.nr_subbands), dtype = np.int32)
74 frame.sb_sample = np.zeros(shape=(frame.nr_blocks, frame.nr_channels, frame.nr_subbands))
75
76 for ch in range(frame.nr_channels):

--- 54 unchanged lines hidden (view full) ---

131 U[i*M2+j] = V[ch][i*2*M2+j]
132 U[(i*2+1)*M+j] = V[ch][(i*4+3)*M+j]
133
134 for i in range(L):
135 D = proto_table[i] * (-M)
136 W[i] = U[i]*D
137
138
139 offset = blk*M
140
139 for j in range(M):
140 for i in range(10):
141 frame.X[j] += W[j+M*i]
141 for j in range(M):
142 for i in range(10):
143 frame.X[j] += W[j+M*i]
142
143 frame.pcm = np.concatenate([frame.pcm, np.int16(frame.X)])
144
145 frame.pcm[ch][offset + j] = np.int16(frame.X[j])
144
145
146def sbc_synthesis(frame):
147 if frame.nr_subbands == 4:
148 proto_table = Proto_4_40
149 elif frame.nr_subbands == 8:
150 proto_table = Proto_8_80
151 else:

--- 9 unchanged lines hidden (view full) ---

161 err = sbc_reconstruct_subband_samples(frame)
162 if err >= 0:
163 err = sbc_synthesis(frame)
164 return err
165
166
167def write_wav_file(fout, frame):
168 values = []
146
147
148def sbc_synthesis(frame):
149 if frame.nr_subbands == 4:
150 proto_table = Proto_4_40
151 elif frame.nr_subbands == 8:
152 proto_table = Proto_8_80
153 else:

--- 9 unchanged lines hidden (view full) ---

163 err = sbc_reconstruct_subband_samples(frame)
164 if err >= 0:
165 err = sbc_synthesis(frame)
166 return err
167
168
169def write_wav_file(fout, frame):
170 values = []
169 for i in range(len(frame.pcm)):
170 try:
171 packed_value = struct.pack('h', frame.pcm[i])
172 values.append(packed_value)
173 except struct.error:
174 print frame
175 print i, frame.pcm[i], frame.pcm
176 exit(1)
177
171
172 for i in range(frame.nr_subbands * frame.nr_blocks):
173 for ch in range(frame.nr_channels):
174 try:
175 packed_value = struct.pack('h', frame.pcm[ch][i])
176 values.append(packed_value)
177 except struct.error:
178 print frame
179 print i, frame.pcm[ch][i], frame.pcm[ch]
180 exit(1)
181
178 value_str = ''.join(values)
179 fout.writeframes(value_str)
180
181
182if __name__ == "__main__":
183 usage = '''
184 Usage: ./sbc_decoder.py input.sbc
185 '''

--- 61 unchanged lines hidden ---
182 value_str = ''.join(values)
183 fout.writeframes(value_str)
184
185
186if __name__ == "__main__":
187 usage = '''
188 Usage: ./sbc_decoder.py input.sbc
189 '''

--- 61 unchanged lines hidden ---