mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-01-26 12:35:25 +00:00
sbc: fiz loading stereo wav file
This commit is contained in:
parent
c9498b1266
commit
9462b3da58
@ -165,7 +165,7 @@ def calculate_channel_mode_and_scale_factors(frame):
|
|||||||
frame.channel_mode = STEREO
|
frame.channel_mode = STEREO
|
||||||
frame.join = np.zeros(frame.nr_subbands, dtype = np.uint8)
|
frame.join = np.zeros(frame.nr_subbands, dtype = np.uint8)
|
||||||
return
|
return
|
||||||
|
|
||||||
sb_sample = np.zeros(shape = (frame.nr_blocks,2,frame.nr_subbands), dtype = np.uint16)
|
sb_sample = np.zeros(shape = (frame.nr_blocks,2,frame.nr_subbands), dtype = np.uint16)
|
||||||
for blk in range(frame.nr_blocks):
|
for blk in range(frame.nr_blocks):
|
||||||
for sb in range(frame.nr_subbands):
|
for sb in range(frame.nr_subbands):
|
||||||
@ -303,6 +303,7 @@ def sbc_bit_allocation_stereo_joint(frame):
|
|||||||
if bitneed[ch][sb] > max_bitneed:
|
if bitneed[ch][sb] > max_bitneed:
|
||||||
max_bitneed = bitneed[ch][sb]
|
max_bitneed = bitneed[ch][sb]
|
||||||
|
|
||||||
|
|
||||||
# calculate how many bitslices fit into the bitpool
|
# calculate how many bitslices fit into the bitpool
|
||||||
bitcount = 0
|
bitcount = 0
|
||||||
slicecount = 0
|
slicecount = 0
|
||||||
@ -397,7 +398,8 @@ def sbc_bit_allocation_mono_dual(frame):
|
|||||||
for sb in range(frame.nr_subbands):
|
for sb in range(frame.nr_subbands):
|
||||||
if bitneed[ch][sb] > max_bitneed:
|
if bitneed[ch][sb] > max_bitneed:
|
||||||
max_bitneed = bitneed[ch][sb]
|
max_bitneed = bitneed[ch][sb]
|
||||||
|
|
||||||
|
print "mono: bitneed", bitneed, max_bitneed
|
||||||
# calculate how many bitslices fit into the bitpool
|
# calculate how many bitslices fit into the bitpool
|
||||||
bitcount = 0
|
bitcount = 0
|
||||||
slicecount = 0
|
slicecount = 0
|
||||||
@ -419,6 +421,7 @@ def sbc_bit_allocation_mono_dual(frame):
|
|||||||
bitcount = bitcount + slicecount
|
bitcount = bitcount + slicecount
|
||||||
bitslice = bitslice - 1
|
bitslice = bitslice - 1
|
||||||
|
|
||||||
|
print "mono: bitslice", bitslice
|
||||||
for sb in range(frame.nr_subbands):
|
for sb in range(frame.nr_subbands):
|
||||||
if bitneed[ch][sb] < bitslice+2 :
|
if bitneed[ch][sb] < bitslice+2 :
|
||||||
bits[ch][sb]=0;
|
bits[ch][sb]=0;
|
||||||
|
@ -9,13 +9,13 @@ X = np.zeros(shape=(2,80), dtype = np.int16)
|
|||||||
|
|
||||||
|
|
||||||
def fetch_samples_for_next_sbc_frame(fin, frame):
|
def fetch_samples_for_next_sbc_frame(fin, frame):
|
||||||
nr_samples = frame.nr_blocks * frame.nr_subbands
|
nr_samples = frame.nr_blocks * frame.nr_subbands
|
||||||
raw_data = fin.readframes(nr_samples) # Returns byte data
|
raw_data = fin.readframes(nr_samples) # Returns byte data
|
||||||
fmt = "%ih" % (len(raw_data) / 2)
|
fmt = "%ih" % (len(raw_data) / 2)
|
||||||
data = struct.unpack(fmt, raw_data)
|
data = struct.unpack(fmt, raw_data)
|
||||||
|
|
||||||
if frame.nr_channels == 2:
|
if frame.nr_channels == 2:
|
||||||
for i in range(len(data)/2 - 1):
|
for i in range(len(data)/2):
|
||||||
frame.pcm[0][i] = data[2*i]
|
frame.pcm[0][i] = data[2*i]
|
||||||
frame.pcm[1][i] = data[2*i+1]
|
frame.pcm[1][i] = data[2*i+1]
|
||||||
else:
|
else:
|
||||||
@ -40,7 +40,6 @@ def sbc_frame_analysis(frame, ch, blk, C):
|
|||||||
X[ch][i] = X[ch][i-M]
|
X[ch][i] = X[ch][i-M]
|
||||||
for i in range(M-1, -1, -1):
|
for i in range(M-1, -1, -1):
|
||||||
X[ch][i] = frame.EX[M-1-i]
|
X[ch][i] = frame.EX[M-1-i]
|
||||||
|
|
||||||
for i in range(L):
|
for i in range(L):
|
||||||
Z[i] = X[ch][i] * C[i]
|
Z[i] = X[ch][i] * C[i]
|
||||||
|
|
||||||
@ -55,7 +54,7 @@ def sbc_frame_analysis(frame, ch, blk, C):
|
|||||||
|
|
||||||
for sb in range(M):
|
for sb in range(M):
|
||||||
frame.sb_sample[blk][ch][sb] = S[sb]
|
frame.sb_sample[blk][ch][sb] = S[sb]
|
||||||
|
|
||||||
def sbc_analysis(frame):
|
def sbc_analysis(frame):
|
||||||
if frame.nr_subbands == 4:
|
if frame.nr_subbands == 4:
|
||||||
C = Proto_4_40
|
C = Proto_4_40
|
||||||
@ -154,8 +153,8 @@ if __name__ == "__main__":
|
|||||||
sbc_encode(sbc_encoder_frame)
|
sbc_encode(sbc_encoder_frame)
|
||||||
sbc_write_frame(fout, sbc_encoder_frame)
|
sbc_write_frame(fout, sbc_encoder_frame)
|
||||||
|
|
||||||
# if subband_frame_count == 0:
|
if subband_frame_count == 1:
|
||||||
# exit(0)
|
exit(0)
|
||||||
audio_frame_count += nr_samples
|
audio_frame_count += nr_samples
|
||||||
subband_frame_count += 1
|
subband_frame_count += 1
|
||||||
|
|
||||||
|
@ -61,15 +61,15 @@ def sbc_compare_headers(frame_count, actual_frame, expected_frame):
|
|||||||
|
|
||||||
|
|
||||||
if mse(actual_frame.scale_factor, expected_frame.scale_factor) > 0:
|
if mse(actual_frame.scale_factor, expected_frame.scale_factor) > 0:
|
||||||
print "scale_factor error \nE:\n %s \nD:\n %s" % (actual_frame.scale_factor, expected_frame.scale_factor)
|
print "scale_factor error %d \nE:\n %s \nD:\n %s" % (frame_count, actual_frame.scale_factor, expected_frame.scale_factor)
|
||||||
return -1
|
return -1
|
||||||
|
|
||||||
if mse(actual_frame.scalefactor, expected_frame.scalefactor) > 0:
|
if mse(actual_frame.scalefactor, expected_frame.scalefactor) > 0:
|
||||||
print "scalefactor error \nE:\n %s \nD:\n %s" % (actual_frame.scalefactor, expected_frame.scalefactor)
|
print "scalefactor error %d \nE:\n %s \nD:\n %s" % (frame_count, actual_frame.scalefactor, expected_frame.scalefactor)
|
||||||
return -1
|
return -1
|
||||||
|
|
||||||
if mse(actual_frame.bits, expected_frame.bits) > 0:
|
if mse(actual_frame.bits, expected_frame.bits) > 0:
|
||||||
print "bits error \nE:\n %s \nD:\n %s" % (actual_frame.bits, expected_frame.bits)
|
print "bits error %d \nE:\n %s \nD:\n %s" % (frame_count, actual_frame.bits, expected_frame.bits)
|
||||||
return -1
|
return -1
|
||||||
|
|
||||||
if actual_frame.crc_check != expected_frame.crc_check:
|
if actual_frame.crc_check != expected_frame.crc_check:
|
||||||
@ -141,23 +141,20 @@ try:
|
|||||||
err = sbc_compare_headers(subband_frame_count, actual_frame, expected_frame)
|
err = sbc_compare_headers(subband_frame_count, actual_frame, expected_frame)
|
||||||
if err < 0:
|
if err < 0:
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
err = sbc_compare_audio_frames(subband_frame_count, actual_frame, expected_frame)
|
err = sbc_compare_audio_frames(subband_frame_count, actual_frame, expected_frame)
|
||||||
if err < 0:
|
if err < 0:
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
if subband_frame_count == 0:
|
|
||||||
print actual_frame
|
|
||||||
|
|
||||||
audio_frame_count += nr_samples
|
audio_frame_count += nr_samples
|
||||||
subband_frame_count += 1
|
subband_frame_count += 1
|
||||||
|
|
||||||
print "DONE, max MSE audio sample error %d", max_error
|
print ("DONE, max MSE audio sample error %f" % max_error)
|
||||||
fin.close()
|
fin.close()
|
||||||
fin_expected.close()
|
fin_expected.close()
|
||||||
|
|
||||||
except TypeError:
|
except TypeError:
|
||||||
print "DONE, max MSE audio sample error %d", max_error
|
print ("DONE, max MSE audio sample error %f" % max_error)
|
||||||
fin.close()
|
fin.close()
|
||||||
fin_expected.close()
|
fin_expected.close()
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user