532 lines
23 KiB
C
532 lines
23 KiB
C
#include "app_config.h"
|
|
#include "system/includes.h"
|
|
#include "audio_server.h"
|
|
|
|
#ifdef USE_LC3_TEST
|
|
|
|
|
|
|
|
static const u8 data_44100_16[882] = {
|
|
0xFF, 0xFF, 0x2F, 0x12, 0xF9, 0x23, 0x12, 0x35, 0x0D, 0x45, 0xAC, 0x53, 0x93, 0x60, 0x84, 0x6B,
|
|
0x4F, 0x74, 0xB2, 0x7A, 0xA6, 0x7E, 0xFD, 0x7F, 0xC7, 0x7E, 0xF5, 0x7A, 0xB0, 0x74, 0xFF, 0x6B,
|
|
0x2F, 0x61, 0x58, 0x54, 0xD6, 0x45, 0xE3, 0x35, 0xD9, 0x24, 0x18, 0x13, 0xE4, 0x00, 0xC2, 0xEE,
|
|
0xDC, 0xDC, 0xCC, 0xCB, 0xB1, 0xBB, 0x09, 0xAD, 0x08, 0xA0, 0xF6, 0x94, 0x1C, 0x8C, 0x87, 0x85,
|
|
0x86, 0x81, 0x03, 0x80, 0x1E, 0x81, 0xC8, 0x84, 0xF4, 0x8A, 0x80, 0x93, 0x3F, 0x9E, 0xF5, 0xAA,
|
|
0x69, 0xB9, 0x49, 0xC9, 0x45, 0xDA, 0x06, 0xEC, 0x2D, 0xFE, 0x5E, 0x10, 0x3C, 0x22, 0x62, 0x33,
|
|
0x88, 0x43, 0x45, 0x52, 0x5F, 0x5F, 0x85, 0x6A, 0x87, 0x73, 0x2B, 0x7A, 0x5F, 0x7E, 0xF8, 0x7F,
|
|
0x05, 0x7F, 0x73, 0x7B, 0x6B, 0x75, 0xFA, 0x6C, 0x5A, 0x62, 0xB7, 0x55, 0x59, 0x47, 0x8C, 0x37,
|
|
0x97, 0x26, 0xE1, 0x14, 0xBE, 0x02, 0x86, 0xF0, 0xAC, 0xDE, 0x6C, 0xCD, 0x44, 0xBD, 0x6C, 0xAE,
|
|
0x3E, 0xA1, 0xFE, 0x95, 0xDD, 0x8C, 0x1C, 0x86, 0xC7, 0x81, 0x0E, 0x80, 0xDD, 0x80, 0x52, 0x84,
|
|
0x39, 0x8A, 0x8A, 0x92, 0x15, 0x9D, 0x99, 0xA9, 0xE5, 0xB7, 0xA8, 0xC7, 0x83, 0xD8, 0x3F, 0xEA,
|
|
0x56, 0xFC, 0x91, 0x0E, 0x76, 0x20, 0xBA, 0x31, 0xF4, 0x41, 0xE2, 0x50, 0x23, 0x5E, 0x80, 0x69,
|
|
0xB9, 0x72, 0xA0, 0x79, 0x0C, 0x7E, 0xF2, 0x7F, 0x36, 0x7F, 0xEF, 0x7B, 0x20, 0x76, 0xEE, 0x6D,
|
|
0x7F, 0x63, 0x13, 0x57, 0xD7, 0x48, 0x31, 0x39, 0x52, 0x28, 0xB0, 0x16, 0x8C, 0x04, 0x5B, 0xF2,
|
|
0x69, 0xE0, 0x20, 0xCF, 0xD1, 0xBE, 0xD8, 0xAF, 0x77, 0xA2, 0x09, 0x97, 0xAB, 0x8D, 0xAC, 0x86,
|
|
0x1C, 0x82, 0x17, 0x80, 0xB1, 0x80, 0xD7, 0x83, 0x87, 0x89, 0x9D, 0x91, 0xEA, 0x9B, 0x49, 0xA8,
|
|
0x63, 0xB6, 0x04, 0xC6, 0xCD, 0xD6, 0x6E, 0xE8, 0x86, 0xFA, 0xC2, 0x0C, 0xAF, 0x1E, 0x0D, 0x30,
|
|
0x61, 0x40, 0x76, 0x4F, 0xE4, 0x5C, 0x75, 0x68, 0xE8, 0x71, 0x09, 0x79, 0xBC, 0x7D, 0xDA, 0x7F,
|
|
0x6B, 0x7F, 0x5E, 0x7C, 0xD0, 0x76, 0xDD, 0x6E, 0xA0, 0x64, 0x66, 0x58, 0x59, 0x4A, 0xCA, 0x3A,
|
|
0x14, 0x2A, 0x75, 0x18, 0x63, 0x06, 0x28, 0xF4, 0x30, 0xE2, 0xD0, 0xD0, 0x67, 0xC0, 0x41, 0xB1,
|
|
0xBF, 0xA3, 0x10, 0x98, 0x86, 0x8E, 0x42, 0x87, 0x72, 0x82, 0x2E, 0x80, 0x82, 0x80, 0x6C, 0x83,
|
|
0xD8, 0x88, 0xB3, 0x90, 0xCB, 0x9A, 0xF4, 0xA6, 0xEB, 0xB4, 0x62, 0xC4, 0x17, 0xD5, 0xA0, 0xE6,
|
|
0xB7, 0xF8, 0xEF, 0x0A, 0xEB, 0x1C, 0x58, 0x2E, 0xCF, 0x3E, 0x04, 0x4E, 0xA0, 0x5B, 0x67, 0x67,
|
|
0x0D, 0x71, 0x70, 0x78, 0x61, 0x7D, 0xBF, 0x7F, 0x97, 0x7F, 0xC8, 0x7C, 0x7C, 0x77, 0xC0, 0x6F,
|
|
0xC2, 0x65, 0xB3, 0x59, 0xD4, 0x4B, 0x69, 0x3C, 0xC8, 0x2B, 0x41, 0x1A, 0x34, 0x08, 0xFC, 0xF5,
|
|
0xF4, 0xE3, 0x86, 0xD2, 0xF9, 0xC1, 0xB9, 0xB2, 0x00, 0xA5, 0x27, 0x99, 0x5E, 0x8F, 0xE0, 0x87,
|
|
0xD2, 0x82, 0x4A, 0x80, 0x5D, 0x80, 0xFF, 0x82, 0x37, 0x88, 0xC9, 0x8F, 0xB5, 0x99, 0xA5, 0xA5,
|
|
0x71, 0xB3, 0xCB, 0xC2, 0x5A, 0xD3, 0xDD, 0xE4, 0xE3, 0xF6, 0x1B, 0x09, 0x29, 0x1B, 0x9D, 0x2C,
|
|
0x3C, 0x3D, 0x8E, 0x4C, 0x57, 0x5A, 0x53, 0x66, 0x2C, 0x70, 0xD3, 0x77, 0xFB, 0x7C, 0xA4, 0x7F,
|
|
0xB7, 0x7F, 0x2D, 0x7D, 0x21, 0x78, 0xA2, 0x70, 0xD7, 0x66, 0x01, 0x5B, 0x47, 0x4D, 0x05, 0x3E,
|
|
0x7F, 0x2D, 0x06, 0x1C, 0x08, 0x0A, 0xCB, 0xF7, 0xBE, 0xE5, 0x3B, 0xD4, 0x93, 0xC3, 0x30, 0xB4,
|
|
0x4B, 0xA6, 0x3F, 0x9A, 0x3E, 0x90, 0x86, 0x88, 0x35, 0x83, 0x6F, 0x80, 0x3B, 0x80, 0xA2, 0x82,
|
|
0x8E, 0x87, 0xF4, 0x8E, 0x97, 0x98, 0x63, 0xA4, 0xF9, 0xB1, 0x34, 0xC1, 0xA5, 0xD1, 0x16, 0xE3,
|
|
0x10, 0xF5, 0x4B, 0x07, 0x5E, 0x19, 0xEA, 0x2A, 0x9E, 0x3B, 0x13, 0x4B, 0x0F, 0x59, 0x33, 0x65,
|
|
0x4D, 0x6F, 0x28, 0x77, 0x94, 0x7C, 0x7F, 0x7F, 0xD2, 0x7F, 0x8C, 0x7D, 0xBE, 0x78, 0x7C, 0x71,
|
|
0xEE, 0x67, 0x45, 0x5C, 0xBA, 0x4E, 0x9C, 0x3F, 0x2F, 0x2F, 0xD2, 0x1D, 0xD5, 0x0B, 0xA0, 0xF9,
|
|
0x86, 0xE7, 0xF3, 0xD5, 0x30, 0xC5, 0xAB, 0xB5, 0x98, 0xA7, 0x5F, 0x9B, 0x24, 0x91, 0x2F, 0x89,
|
|
0xA4, 0x83, 0x93, 0x80, 0x28, 0x80, 0x41, 0x82, 0xF9, 0x86, 0x17, 0x8E, 0x8D, 0x97, 0x19, 0xA3,
|
|
0x8D, 0xB0, 0x9B, 0xBF, 0xF7, 0xCF, 0x4E, 0xE1, 0x41, 0xF3, 0x78, 0x05, 0x91, 0x17, 0x35, 0x29,
|
|
0xFA, 0x39, 0x9F, 0x49, 0xB6, 0x57, 0x16, 0x64, 0x63, 0x6E, 0x7B, 0x76, 0x25, 0x7C, 0x52, 0x7F,
|
|
0xE7, 0x7F, 0xE5, 0x7D, 0x57, 0x79, 0x4F, 0x72, 0xFC, 0x68, 0x86, 0x5D, 0x29, 0x50, 0x2E, 0x41,
|
|
0xE1, 0x30, 0x96, 0x1F, 0xA8, 0x0D, 0x6F, 0xFB, 0x55, 0xE9, 0xA7, 0xD7, 0xD7, 0xC6, 0x25, 0xB7,
|
|
0xED, 0xA8, 0x82, 0x9C, 0x11, 0x92, 0xDF, 0x89, 0x16, 0x84, 0xC2, 0x80, 0x15, 0x80, 0xF1, 0x81,
|
|
0x60, 0x86, 0x48, 0x8D, 0x7E, 0x96, 0xDC, 0xA1, 0x23, 0xAF, 0x07, 0xBE, 0x4A, 0xCE, 0x86, 0xDF,
|
|
0x72, 0xF1, 0xA5, 0x03, 0xC9, 0x15, 0x75, 0x27, 0x5D, 0x38, 0x1B, 0x48, 0x63, 0x56, 0xEF, 0x62,
|
|
0x74, 0x6D, 0xC5, 0x75, 0xB5, 0x7B, 0x1B, 0x7F, 0xF8, 0x7F, 0x35, 0x7E, 0xE7, 0x79, 0x21, 0x73,
|
|
0x02, 0x6A, 0xC4, 0x5E, 0x90, 0x51, 0xC2, 0x42, 0x8C, 0x32, 0x5B, 0x21, 0x77, 0x0F, 0x42, 0xFD,
|
|
0x21, 0xEB, 0x65, 0xD9, 0x77, 0xC8, 0xA7, 0xB8, 0x47, 0xAA, 0xAB, 0x9D, 0xFF, 0x92, 0x9B, 0x8A,
|
|
0x88, 0x84, 0x00, 0x81, 0x04, 0x80, 0xA4, 0x81, 0xD4, 0x85, 0x79, 0x8C, 0x7D, 0x95, 0x9D, 0xA0,
|
|
0xC0, 0xAD, 0x74, 0xBC, 0xA1, 0xCC, 0xC2, 0xDD, 0xA4, 0xEF, 0xD1, 0x01, 0xFB, 0x13, 0xB9, 0x25,
|
|
0xBA, 0x36, 0x95, 0x46, 0x0A, 0x55, 0xC3, 0x61, 0x7F, 0x6C, 0x0D, 0x75, 0x36, 0x7B, 0xE3, 0x7E,
|
|
0xFF, 0x7F, 0x7D, 0x7E, 0x75, 0x7A, 0xE7, 0x73, 0x08, 0x6B, 0xF8, 0x5F, 0xFB, 0x52, 0x47, 0x44,
|
|
0x3F, 0x34, 0x18, 0x23, 0x48, 0x11, 0x14, 0xFF, 0xEF, 0xEC, 0x22, 0xDB, 0x1F, 0xCA, 0x2C, 0xBA,
|
|
0xA2, 0xAB, 0xD9, 0x9E, 0xF9, 0x93, 0x55, 0x8B, 0x0A, 0x85, 0x3A, 0x81, 0x01, 0x80, 0x5C, 0x81,
|
|
0x4A, 0x85, 0xB5, 0x8B, 0x7B, 0x94, 0x6D, 0x9F, 0x54, 0xAC, 0xF2, 0xBA, 0xEE, 0xCA, 0x08, 0xDC,
|
|
0xD1, 0xED
|
|
};
|
|
|
|
|
|
static const u8 data_44100_24[1323] = {
|
|
0x00, 0x00, 0x00, 0xDE, 0x2C, 0x12, 0x74, 0xFB, 0x23, 0x5B, 0x0F, 0x35, 0xFF, 0x0F, 0x45, 0x5B,
|
|
0xAA, 0x53, 0xA9, 0x92, 0x60, 0xFA, 0x85, 0x6B, 0x74, 0x4B, 0x74, 0xA1, 0xB5, 0x7A, 0x34, 0xA3,
|
|
0x7E, 0xC9, 0xFF, 0x7F, 0x5B, 0xC4, 0x7E, 0x3C, 0xF7, 0x7A, 0x3E, 0xAC, 0x74, 0xE6, 0x03, 0x6C,
|
|
0x42, 0x2B, 0x61, 0x78, 0x5A, 0x54, 0x16, 0xD4, 0x45, 0x73, 0xE3, 0x35, 0x3A, 0xDB, 0x24, 0xD1,
|
|
0x13, 0x13, 0x70, 0xE9, 0x00, 0x4E, 0xBA, 0xEE, 0xCF, 0xE4, 0xDC, 0x6A, 0xC5, 0xCB, 0xFE, 0xB4,
|
|
0xBB, 0xD8, 0x06, 0xAD, 0x2D, 0x07, 0xA0, 0x5E, 0xF9, 0x94, 0xD4, 0x16, 0x8C, 0x93, 0x8D, 0x85,
|
|
0x9A, 0x7F, 0x81, 0xDD, 0x01, 0x80, 0x28, 0x1C, 0x81, 0xBC, 0xC8, 0x84, 0x86, 0xF4, 0x8A, 0x8A,
|
|
0x7F, 0x93, 0x72, 0x3D, 0x9E, 0x7E, 0xF6, 0xAA, 0xBD, 0x68, 0xB9, 0x2B, 0x49, 0xC9, 0x77, 0x45,
|
|
0xDA, 0x7D, 0x05, 0xEC, 0x25, 0x2D, 0xFE, 0x48, 0x5E, 0x10, 0x7D, 0x3A, 0x22, 0x21, 0x65, 0x33,
|
|
0x24, 0x85, 0x43, 0xDE, 0x46, 0x52, 0xBE, 0x5D, 0x5F, 0xE6, 0x85, 0x6A, 0x66, 0x85, 0x73, 0x9C,
|
|
0x2D, 0x7A, 0xFA, 0x5B, 0x7E, 0xCC, 0xFA, 0x7F, 0xB2, 0x01, 0x7F, 0xB2, 0x75, 0x7B, 0x33, 0x69,
|
|
0x75, 0x99, 0xFB, 0x6C, 0x9D, 0x58, 0x62, 0x68, 0xB7, 0x55, 0x8A, 0x59, 0x47, 0x80, 0x89, 0x37,
|
|
0x59, 0x99, 0x26, 0xF8, 0xE0, 0x14, 0x3A, 0xBC, 0x02, 0x5C, 0x89, 0xF0, 0xA5, 0xA6, 0xDE, 0x02,
|
|
0x71, 0xCD, 0x99, 0x41, 0xBD, 0x80, 0x6C, 0xAE, 0x90, 0x3E, 0xA1, 0x3C, 0xFC, 0x95, 0xE2, 0xDF,
|
|
0x8C, 0xC8, 0x18, 0x86, 0x1B, 0xCA, 0x81, 0x2E, 0x0A, 0x80, 0x1C, 0xE2, 0x80, 0x7D, 0x4D, 0x84,
|
|
0x9A, 0x3A, 0x8A, 0xAC, 0x8A, 0x92, 0xA0, 0x12, 0x9D, 0xC7, 0x9B, 0xA9, 0x23, 0xE5, 0xB7, 0x8A,
|
|
0xA4, 0xC7, 0x57, 0x88, 0xD8, 0xDE, 0x38, 0xEA, 0x67, 0x5A, 0xFC, 0xD6, 0x8E, 0x0E, 0xC1, 0x77,
|
|
0x20, 0x3C, 0xB8, 0x31, 0xC3, 0xF6, 0x41, 0x1C, 0xDF, 0x50, 0xDF, 0x23, 0x5E, 0x48, 0x80, 0x69,
|
|
0x56, 0xB9, 0x72, 0x3D, 0x9F, 0x79, 0x30, 0x0E, 0x7E, 0x27, 0xEF, 0x7F, 0x74, 0x38, 0x7F, 0xB8,
|
|
0xED, 0x7B, 0x14, 0x20, 0x76, 0x9E, 0xED, 0x6D, 0xDD, 0x80, 0x63, 0xE5, 0x0F, 0x57, 0x48, 0xDB,
|
|
0x48, 0xAC, 0x2C, 0x39, 0x77, 0x55, 0x28, 0x03, 0xAD, 0x16, 0xEA, 0x8E, 0x04, 0x2D, 0x59, 0xF2,
|
|
0x40, 0x6A, 0xE0, 0x32, 0x1F, 0xCF, 0xB4, 0xD1, 0xBE, 0x5C, 0xD6, 0xAF, 0xE7, 0x7A, 0xA2, 0x98,
|
|
0x04, 0x97, 0xED, 0xAE, 0x8D, 0x53, 0xAA, 0x86, 0x28, 0x1B, 0x82, 0x2B, 0x19, 0x80, 0xA5, 0xAE,
|
|
0x80, 0xB2, 0xD8, 0x83, 0xC4, 0x86, 0x89, 0x86, 0x9B, 0x91, 0xF2, 0xEC, 0x9B, 0x8B, 0x45, 0xA8,
|
|
0x49, 0x65, 0xB6, 0xD6, 0x02, 0xC6, 0x44, 0xCD, 0xD6, 0x64, 0x6D, 0xE8, 0xD6, 0x87, 0xFA, 0xA4,
|
|
0xBE, 0x0C, 0x53, 0xB3, 0x1E, 0xC2, 0x08, 0x30, 0xF6, 0x64, 0x40, 0x24, 0x73, 0x4F, 0x1C, 0xE5,
|
|
0x5C, 0x2E, 0x75, 0x68, 0x52, 0xE7, 0x71, 0x8C, 0x0A, 0x79, 0xD8, 0xB9, 0x7D, 0xDE, 0xDC, 0x7F,
|
|
0x98, 0x68, 0x7F, 0x4E, 0x5F, 0x7C, 0xD1, 0xD0, 0x76, 0xEC, 0xD9, 0x6E, 0xF2, 0xA3, 0x64, 0xDC,
|
|
0x63, 0x58, 0x3C, 0x59, 0x4A, 0xDC, 0xCC, 0x3A, 0x81, 0x0F, 0x2A, 0xDF, 0x77, 0x18, 0x5B, 0x61,
|
|
0x06, 0xB8, 0x29, 0xF4, 0x7A, 0x2F, 0xE2, 0xF2, 0xCF, 0xD0, 0x2C, 0x65, 0xC0, 0x69, 0x44, 0xB1,
|
|
0x14, 0xBC, 0xA3, 0x6A, 0x12, 0x98, 0xEB, 0x83, 0x8E, 0x28, 0x42, 0x87, 0xC8, 0x72, 0x82, 0xC3,
|
|
0x2E, 0x80, 0xD2, 0x81, 0x80, 0x54, 0x6A, 0x83, 0x20, 0xD9, 0x88, 0x15, 0xB2, 0x90, 0x7A, 0xCC,
|
|
0x9A, 0xDE, 0xF3, 0xA6, 0x3F, 0xE9, 0xB4, 0x2A, 0x64, 0xC4, 0x50, 0x14, 0xD5, 0x29, 0xA3, 0xE6,
|
|
0x8A, 0xB5, 0xF8, 0xCA, 0xED, 0x0A, 0x4C, 0xED, 0x1C, 0xC8, 0x56, 0x2E, 0xD4, 0xCF, 0x3E, 0x09,
|
|
0x03, 0x4E, 0x88, 0xA1, 0x5B, 0xA2, 0x64, 0x67, 0x66, 0x0F, 0x71, 0x8E, 0x6F, 0x78, 0xFA, 0x5E,
|
|
0x7D, 0xF0, 0xC3, 0x7F, 0x1A, 0x92, 0x7F, 0x70, 0xCA, 0x7C, 0x62, 0x7B, 0x77, 0x76, 0xC0, 0x6F,
|
|
0xCE, 0xC1, 0x65, 0x38, 0xB3, 0x59, 0x54, 0xD3, 0x4B, 0x04, 0x6A, 0x3C, 0x52, 0xC7, 0x2B, 0x7E,
|
|
0x41, 0x1A, 0x72, 0x33, 0x08, 0xE0, 0xFA, 0xF5, 0x46, 0xF6, 0xE3, 0x1E, 0x83, 0xD2, 0xFA, 0xFB,
|
|
0xC1, 0x88, 0xB6, 0xB2, 0x10, 0x02, 0xA5, 0xA4, 0x25, 0x99, 0xCA, 0x5E, 0x8F, 0x47, 0xE0, 0x87,
|
|
0xEA, 0xD0, 0x82, 0x04, 0x4B, 0x80, 0xA0, 0x5B, 0x80, 0x6C, 0x02, 0x83, 0xAD, 0x31, 0x88, 0x6F,
|
|
0xCE, 0x8F, 0x42, 0xB1, 0x99, 0xD1, 0xA6, 0xA5, 0x20, 0x71, 0xB3, 0x90, 0xC8, 0xC2, 0xA0, 0x5D,
|
|
0xD3, 0x34, 0xDA, 0xE4, 0xA9, 0xE3, 0xF6, 0x58, 0x1C, 0x09, 0xCA, 0x25, 0x1B, 0x62, 0xA2, 0x2C,
|
|
0x6C, 0x37, 0x3D, 0xE5, 0x8E, 0x4C, 0x2C, 0x59, 0x5A, 0xBE, 0x4E, 0x66, 0x90, 0x31, 0x70, 0x56,
|
|
0xCE, 0x77, 0x91, 0xFD, 0x7C, 0x62, 0xA4, 0x7F, 0xFC, 0xB4, 0x7F, 0x14, 0x2F, 0x7D, 0xBD, 0x1F,
|
|
0x78, 0x31, 0xA1, 0x70, 0x5F, 0xDA, 0x66, 0xF0, 0xFD, 0x5A, 0x77, 0x49, 0x4D, 0x08, 0x04, 0x3E,
|
|
0xE0, 0x7C, 0x2D, 0xBA, 0x09, 0x1C, 0x22, 0x05, 0x0A, 0x8B, 0xCC, 0xF7, 0x83, 0xBE, 0xE5, 0xB0,
|
|
0x38, 0xD4, 0xF7, 0x95, 0xC3, 0xB2, 0x2C, 0xB4, 0xC2, 0x4C, 0xA6, 0x34, 0x3E, 0x9A, 0x8B, 0x3F,
|
|
0x90, 0x9C, 0x84, 0x88, 0x92, 0x35, 0x83, 0xE6, 0x6D, 0x80, 0x0B, 0x3C, 0x80, 0x0E, 0xA1, 0x82,
|
|
0x6A, 0x90, 0x87, 0xA2, 0xF0, 0x8E, 0x58, 0x9B, 0x98, 0x7C, 0x5E, 0xA4, 0xF4, 0xFC, 0xB1, 0x2D,
|
|
0x30, 0xC1, 0x3A, 0xA9, 0xD1, 0xB0, 0x12, 0xE3, 0x3A, 0x12, 0xF5, 0x72, 0x4A, 0x07, 0xDA, 0x5C,
|
|
0x19, 0xAF, 0xEB, 0x2A, 0xD4, 0x9B, 0x3B, 0xC5, 0x16, 0x4B, 0x1E, 0x0C, 0x59, 0x89, 0x33, 0x65,
|
|
0xEA, 0x4D, 0x6F, 0xDF, 0x26, 0x77, 0xB0, 0x95, 0x7C, 0x2A, 0x7E, 0x7F, 0x3F, 0xD1, 0x7F, 0x36,
|
|
0x8D, 0x7D, 0xDA, 0xBD, 0x78, 0x14, 0x7C, 0x71, 0x98, 0xED, 0x67, 0xE8, 0x43, 0x5C, 0x9C, 0xBB,
|
|
0x4E, 0xCF, 0x9A, 0x3F, 0x12, 0x30, 0x2F, 0x84, 0xD0, 0x1D, 0x47, 0xD6, 0x0B, 0xA9, 0x9E, 0xF9,
|
|
0x1C, 0x88, 0xE7, 0x84, 0xF0, 0xD5, 0x20, 0x33, 0xC5, 0xC5, 0xA6, 0xB5, 0x25, 0x9C, 0xA7, 0x0C,
|
|
0x5C, 0x9B, 0x18, 0x26, 0x91, 0x2C, 0x2F, 0x89, 0xB3, 0xA0, 0x83, 0x68, 0x97, 0x80, 0x22, 0x23,
|
|
0x80, 0x28, 0x46, 0x82, 0x74, 0xF5, 0x86, 0xAE, 0x18, 0x8E, 0xD2, 0x8A, 0x97, 0xE4, 0x1A, 0xA3,
|
|
0xDE, 0x8C, 0xB0, 0x06, 0x9B, 0xBF, 0x41, 0xF7, 0xCF, 0xAB, 0x4C, 0xE1, 0x5D, 0x41, 0xF3, 0x2B,
|
|
0x78, 0x05, 0x9A, 0x92, 0x17, 0xBD, 0x32, 0x29, 0x29, 0xFD, 0x39, 0xB8, 0x9A, 0x49, 0x76, 0xBA,
|
|
0x57, 0x0A, 0x13, 0x64, 0x80, 0x64, 0x6E, 0x34, 0x79, 0x76, 0x57, 0x27, 0x7C, 0x53, 0x51, 0x7F,
|
|
0xDE, 0xE6, 0x7F, 0xD0, 0xE4, 0x7D, 0xB2, 0x55, 0x79, 0x10, 0x51, 0x72, 0x6A, 0xFB, 0x68, 0x18,
|
|
0x85, 0x5D, 0xA6, 0x29, 0x50, 0x48, 0x2E, 0x41, 0xD3, 0xE0, 0x30, 0xBA, 0x95, 0x1F, 0xD9, 0xA6,
|
|
0x0D, 0x11, 0x71, 0xFB, 0x00, 0x53, 0xE9, 0x88, 0xAA, 0xD7, 0x52, 0xD3, 0xC6, 0xBC, 0x24, 0xB7,
|
|
0x19, 0xF0, 0xA8, 0x22, 0x7F, 0x9C, 0x65, 0x12, 0x92, 0xE8, 0xDF, 0x89, 0x4B, 0x12, 0x84, 0x8C,
|
|
0xC7, 0x80, 0xD8, 0x10, 0x80, 0xD0, 0xF1, 0x81, 0xC4, 0x60, 0x86, 0xA6, 0x46, 0x8D, 0xBE, 0x7F,
|
|
0x96, 0x1D, 0xDC, 0xA1, 0xE6, 0x20, 0xAF, 0x3E, 0x09, 0xBE, 0xC0, 0x47, 0xCE, 0x42, 0x88, 0xDF,
|
|
0x2A, 0x71, 0xF1, 0x99, 0xA5, 0x03, 0x21, 0xC7, 0x15, 0xAA, 0x77, 0x27, 0x74, 0x5B, 0x38, 0xE0,
|
|
0x1A, 0x48, 0x38, 0x64, 0x56, 0x61, 0xED, 0x62, 0x50, 0x75, 0x6D, 0x6A, 0xC5, 0x75, 0x80, 0xB2,
|
|
0x7B, 0xE9, 0x1D, 0x7F, 0xCC, 0xF5, 0x7F, 0xEA, 0x35, 0x7E, 0x34, 0xE7, 0x79, 0x20, 0x20, 0x73,
|
|
0xC6, 0x03, 0x6A, 0x6C, 0xC1, 0x5E, 0x86, 0x93, 0x51, 0x60, 0xBE, 0x42, 0x05, 0x8F, 0x32, 0x54,
|
|
0x59, 0x21, 0xAC, 0x76, 0x0F, 0xBF, 0x43, 0xFD, 0x0C, 0x1F, 0xEB, 0xA6, 0x66, 0xD9, 0x7F, 0x76,
|
|
0xC8, 0x78, 0xA6, 0xB8, 0x96, 0x48, 0xAA, 0x64, 0xA7, 0x9D, 0x66, 0x04, 0x93, 0xCE, 0x96, 0x8A,
|
|
0x4C, 0x8A, 0x84, 0x52, 0xFE, 0x80, 0x30, 0x05, 0x80, 0x08, 0xA4, 0x81, 0x64, 0xD2, 0x85, 0x98,
|
|
0x7A, 0x8C, 0x1E, 0x7A, 0x95, 0x3F, 0xA2, 0xA0, 0x23, 0xB9, 0xAD, 0xDC, 0x7A, 0xBC, 0xE0, 0x9A,
|
|
0xCC, 0x82, 0xC5, 0xDD, 0xB8, 0xA1, 0xEF, 0xDB, 0xD2, 0x01, 0x81, 0xFA, 0x13, 0x8C, 0xBA, 0x25,
|
|
0xD3, 0xB6, 0x36, 0x45, 0x97, 0x46, 0x80, 0x09, 0x55, 0x8E, 0xC2, 0x61, 0x77, 0x80, 0x6C, 0x7A,
|
|
0x0B, 0x75, 0x43, 0x37, 0x7B, 0xDB, 0xE3, 0x7E, 0x1E, 0xFE, 0x7F, 0x6B, 0x80, 0x7E, 0x68, 0x72,
|
|
0x7A, 0x32, 0xE9, 0x73, 0x9C, 0x06, 0x6B, 0xD8, 0xF8, 0x5F, 0x24, 0xF9, 0x52, 0x03, 0x4B, 0x44,
|
|
0x96, 0x3A, 0x34, 0x32, 0x1B, 0x23, 0xB0, 0x45, 0x11, 0x92, 0x16, 0xFF, 0x2E, 0xEC, 0xEC, 0xC6,
|
|
0x24, 0xDB, 0x8E, 0x1C, 0xCA, 0xE8, 0x2B, 0xBA, 0x8A, 0xA5, 0xAB, 0xBD, 0xD4, 0x9E, 0x1A, 0xFC,
|
|
0x93, 0xC2, 0x53, 0x8B, 0xC4, 0x08, 0x85, 0xA6, 0x3B, 0x81, 0x35, 0x00, 0x80, 0xCE, 0x5C, 0x81,
|
|
0x5E, 0x4A, 0x85, 0x8A, 0xB4, 0x8B, 0x0B, 0x7A, 0x94, 0x51, 0x6D, 0x9F, 0xAC, 0x55, 0xAC, 0xFB,
|
|
0xEF, 0xBA, 0xA6, 0xF0, 0xCA, 0x8E, 0x04, 0xDC, 0x20, 0xD3, 0xED
|
|
};
|
|
|
|
|
|
extern const int LC3_INT24bit_INOUT;
|
|
|
|
static int test_sample_rate = 44100;
|
|
static int test_channel = 1;
|
|
static int test_bitrate = 320000;
|
|
|
|
static void *virtual_hdl;
|
|
static FILE *pcm_fd;
|
|
static int virtual_pid;
|
|
static int data_offset;
|
|
|
|
static u8 *sin_data;
|
|
static u8 *tmp_data;
|
|
static int sin_data_len;
|
|
|
|
static void *cahe_buf = NULL;
|
|
static cbuffer_t save_cbuf;
|
|
static void *enc_server;
|
|
static void *dec_server;
|
|
|
|
static u8 run_flag;
|
|
static u8 enc_flag;
|
|
|
|
static OS_SEM r_sem;
|
|
static OS_SEM w_sem;
|
|
|
|
|
|
//编码器输出LC3数据
|
|
static int pcm_vfs_fwrite(void *file, void *data, u32 len)
|
|
{
|
|
//拿到数据填入cbuf
|
|
cbuffer_t *cbuf = (cbuffer_t *)file;
|
|
while (!cbuf_write(cbuf, data, len)) {
|
|
#if 1
|
|
//如果写不进去, 等待数据读取 (要求完整性)
|
|
os_sem_pend(&w_sem, 200);
|
|
#else
|
|
//如果写不进去了,则清空一下cbuf(这一步目的为了不让接收数据有延迟,要求实时性)
|
|
cbuf_clear(cbuf);
|
|
#endif
|
|
}
|
|
os_sem_set(&r_sem, 0);
|
|
os_sem_post(&r_sem);
|
|
|
|
return len;
|
|
}
|
|
|
|
//解码器读取数据,这里将数据传入LC3解码器,数据需要给足len的长度
|
|
static int pcm_vfs_fread(void *file, void *data, u32 len)
|
|
{
|
|
//从cbuf取数据
|
|
cbuffer_t *cbuf = (cbuffer_t *)file;
|
|
do {
|
|
if (cbuf_read(cbuf, data, len)) {
|
|
os_sem_set(&w_sem, 0);
|
|
os_sem_post(&w_sem);
|
|
break;
|
|
}
|
|
os_sem_pend(&r_sem, 200);
|
|
if (!enc_flag) {
|
|
return 0;
|
|
}
|
|
if (!run_flag) {
|
|
return 0;
|
|
}
|
|
} while (run_flag);
|
|
|
|
|
|
return len;
|
|
}
|
|
|
|
static int pcm_vfs_fclose(void *file)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static int pcm_vfs_flen(void *file)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static const struct audio_vfs_ops pcm_vfs_ops = {
|
|
.fwrite = pcm_vfs_fwrite,
|
|
.fread = pcm_vfs_fread,
|
|
.fclose = pcm_vfs_fclose,
|
|
.flen = pcm_vfs_flen,
|
|
|
|
};
|
|
|
|
|
|
|
|
/***************dec******************/
|
|
static int test_dec_close(void)
|
|
{
|
|
union audio_req req = {0};
|
|
|
|
run_flag = 0;
|
|
thread_kill(&virtual_pid, KILL_WAIT);
|
|
if (dec_server) {
|
|
req.dec.cmd = AUDIO_DEC_STOP;
|
|
server_request(dec_server, AUDIO_REQ_DEC, &req);
|
|
}
|
|
if (cahe_buf) {
|
|
free(cahe_buf);
|
|
}
|
|
if (pcm_fd) {
|
|
fclose(pcm_fd);
|
|
}
|
|
if (LC3_INT24bit_INOUT && sin_data) {
|
|
free(sin_data);
|
|
}
|
|
virtual_hdl = NULL;
|
|
return 0;
|
|
}
|
|
|
|
static void dec_server_event_handler(void *priv, int argc, int *argv)
|
|
{
|
|
switch (argv[0]) {
|
|
case AUDIO_SERVER_EVENT_ERR:
|
|
case AUDIO_SERVER_EVENT_END:
|
|
test_dec_close();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
static void virtual_get_data(void *priv)
|
|
{
|
|
struct audio_cbuf_t *virtual = (struct audio_cbuf_t *)priv;
|
|
if (!virtual) {
|
|
return;
|
|
}
|
|
int rlen = 0;
|
|
u8 buf[1024];
|
|
while (run_flag) {
|
|
os_sem_post(virtual->wr_sem);
|
|
rlen = cbuf_read(virtual->cbuf, buf, 1024);
|
|
if (LC3_INT24bit_INOUT) {
|
|
for (int i = 0; i < rlen / 4; i++) {
|
|
memcpy(buf + i * 3, buf + i * 4, 3);
|
|
}
|
|
}
|
|
if (rlen == 1024) {
|
|
fwrite(buf, 1, rlen / 4 * 3, pcm_fd);
|
|
continue;
|
|
}
|
|
//收到end为1, 把剩余的数据读出
|
|
if (virtual->end) {
|
|
virtual->end = 2;
|
|
os_sem_post(virtual->wr_sem);
|
|
rlen = cbuf_get_data_size(virtual->cbuf);
|
|
cbuf_read(virtual->cbuf, buf, rlen);
|
|
if (LC3_INT24bit_INOUT) {
|
|
for (int i = 0; i < rlen / 4; i++) {
|
|
memcpy(buf + i * 3, buf + i * 4, 3);
|
|
}
|
|
}
|
|
fwrite(buf, 1, rlen / 4 * 3, pcm_fd);
|
|
break;
|
|
}
|
|
putchar('<');
|
|
//等待解码器post信号量
|
|
os_sem_pend(virtual->rd_sem, 0);
|
|
putchar('>');
|
|
}
|
|
|
|
|
|
|
|
return;
|
|
}
|
|
|
|
|
|
static void dec_test()
|
|
{
|
|
int err;
|
|
union audio_req req = {0};
|
|
|
|
|
|
dec_server = server_open("audio_server", "dec");
|
|
server_register_event_handler_to_task(dec_server, NULL, dec_server_event_handler, "app_core");
|
|
|
|
req.dec.cmd = AUDIO_DEC_OPEN;
|
|
req.dec.output_buf_len = 4 * 1024;
|
|
req.dec.channel = test_channel;
|
|
req.dec.volume = 50;
|
|
req.dec.dec_type = "lc3";
|
|
req.dec.sample_rate = test_sample_rate;
|
|
//16bit解码到dac输出,由于24bit数据dac不支持播放, 所以将24bit数据写到文件中,在电脑查看数据的正确性
|
|
req.dec.sample_source = LC3_INT24bit_INOUT ? "virtual" : "dac";
|
|
req.dec.file = &save_cbuf;
|
|
req.dec.vfs_ops = &pcm_vfs_ops;
|
|
|
|
err = server_request(dec_server, AUDIO_REQ_DEC, &req);
|
|
if (err) {
|
|
printf("-------%s-------%d\n\r", __func__, __LINE__);
|
|
return ;
|
|
}
|
|
|
|
run_flag = 1;
|
|
if (LC3_INT24bit_INOUT) {
|
|
virtual_hdl = req.dec.virtual_audio;
|
|
thread_fork("test", 20, 1024, 0, &virtual_pid, virtual_get_data, req.dec.virtual_audio);
|
|
}
|
|
req.dec.cmd = AUDIO_DEC_START;
|
|
err = server_request(dec_server, AUDIO_REQ_DEC, &req);
|
|
if (err) {
|
|
printf("-------%s-------%d\n\r", __func__, __LINE__);
|
|
return ;
|
|
}
|
|
}
|
|
|
|
/*******************enc**********************/
|
|
|
|
//可自己调用该函数,也可设置编码时间,时间到回调AUDIO_SERVER_EVENT_END事件关闭
|
|
static int test_enc_close(void)
|
|
{
|
|
union audio_req req = {0};
|
|
|
|
enc_flag = 0;
|
|
if (enc_server) {
|
|
req.enc.cmd = AUDIO_ENC_CLOSE;
|
|
server_request(enc_server, AUDIO_REQ_ENC, &req);
|
|
}
|
|
if (LC3_INT24bit_INOUT) {
|
|
struct audio_cbuf_t *virtual = (struct audio_cbuf_t *)virtual_hdl;
|
|
//等待end标志位
|
|
while (!virtual->end) {
|
|
os_time_dly(20);
|
|
}
|
|
os_sem_post(virtual->rd_sem);
|
|
}
|
|
|
|
|
|
return 0;
|
|
}
|
|
|
|
static void enc_server_event_handler(void *priv, int argc, int *argv)
|
|
{
|
|
switch (argv[0]) {
|
|
case AUDIO_SERVER_EVENT_ERR:
|
|
case AUDIO_SERVER_EVENT_END:
|
|
test_enc_close();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
static int pcm_input(u8 *buf, u32 len)
|
|
{
|
|
int rlen = len;
|
|
int offset = 0;;
|
|
int remain = 0;
|
|
while (rlen) {
|
|
remain = sin_data_len - data_offset;
|
|
if (remain >= rlen) {
|
|
memcpy(buf + offset, (u8 *)sin_data + data_offset, rlen);
|
|
data_offset += rlen;
|
|
offset += rlen;
|
|
rlen = 0;
|
|
} else {
|
|
memcpy(buf + offset, (u8 *)sin_data + data_offset, remain);
|
|
offset += remain;
|
|
data_offset = 0;
|
|
rlen -= remain;
|
|
}
|
|
if (!run_flag) {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
return len;
|
|
}
|
|
|
|
|
|
static void enc_test()
|
|
{
|
|
int err;
|
|
union audio_req req = {0};
|
|
|
|
enc_server = server_open("audio_server", "enc");
|
|
if (!enc_server) {
|
|
printf("failed-------%s-------%d\n\r", __func__, __LINE__);
|
|
return ;
|
|
}
|
|
//将事件回调注册到app_core
|
|
server_register_event_handler_to_task(enc_server, NULL, enc_server_event_handler, "app_core");
|
|
|
|
req.enc.cmd = AUDIO_ENC_OPEN;
|
|
req.enc.frame_size = test_sample_rate / 100 * 4 * test_channel;
|
|
req.enc.output_buf_len = req.enc.frame_size * 3;
|
|
req.enc.channel = test_channel;
|
|
req.enc.volume = 50;
|
|
req.enc.sample_rate = test_sample_rate;
|
|
req.enc.bitrate = test_bitrate; //lc3编码必须传入比特率
|
|
req.enc.sample_source = "virtual"; //数据输入方式
|
|
req.enc.file = (FILE *)&save_cbuf;
|
|
req.enc.vfs_ops = &pcm_vfs_ops;
|
|
req.enc.read_input = pcm_input;
|
|
req.enc.vir_data_wait = 1; //等待编码数据处理标志位, 不要求实时性,要求数据完整性可以置1
|
|
req.enc.format = "lc3";
|
|
if (LC3_INT24bit_INOUT) {
|
|
//置1采样深度是24bit, 置0采样深度是16bit
|
|
req.enc.sample_depth = 1;
|
|
}
|
|
req.enc.msec = 30 * 1000; //单位ms,编码多少时间后关闭编码器
|
|
|
|
err = server_request(enc_server, AUDIO_REQ_ENC, &req);
|
|
if (err) {
|
|
printf("-------%s-------%d\n\r", __func__, __LINE__);
|
|
return ;
|
|
}
|
|
|
|
enc_flag = 1;
|
|
|
|
}
|
|
|
|
|
|
void test()
|
|
{
|
|
//1. 如为24bit数据, 则先转换成32bit格式
|
|
if (LC3_INT24bit_INOUT) {
|
|
sin_data_len = sizeof(data_44100_24) * 4 / 3;
|
|
tmp_data = data_44100_24;
|
|
|
|
sin_data = zalloc(sin_data_len);
|
|
if (!sin_data) {
|
|
printf("---%s---%s---%d\n\r", __FILE__, __func__, __LINE__);
|
|
return;
|
|
}
|
|
|
|
for (int i = 0; i < sin_data_len / 4; i++) {
|
|
*((s32 *)sin_data + i) = (s32)(*(tmp_data + i * 3) << 0 | *(tmp_data + i * 3 + 1) << 8 | *(tmp_data + i * 3 + 2) << 16) << 8 >> 8;
|
|
}
|
|
} else {
|
|
sin_data_len = sizeof(data_44100_16);
|
|
sin_data = data_44100_16;
|
|
}
|
|
|
|
//2. 创建cbuf
|
|
cahe_buf = zalloc(test_sample_rate * test_channel * 1);
|
|
if (!cahe_buf) {
|
|
printf("-------%s-------%d\n\r", __func__, __LINE__);
|
|
return ;
|
|
}
|
|
cbuf_init(&save_cbuf, cahe_buf, test_sample_rate * test_channel * 1);
|
|
os_sem_create(&r_sem, 0);
|
|
os_sem_create(&w_sem, 0);
|
|
|
|
if (LC3_INT24bit_INOUT) {
|
|
while (!storage_device_ready()) {
|
|
os_time_dly(20);
|
|
}
|
|
pcm_fd = fopen(CONFIG_ROOT_PATH"1.pcm", "w+");
|
|
if (!pcm_fd) {
|
|
printf("---%s---%s---%d\n\r", __FILE__, __func__, __LINE__);
|
|
return;
|
|
}
|
|
}
|
|
//3. 打开编码器, 使用virtual传入pcm数据
|
|
enc_test();
|
|
|
|
//4. 打开解码器, 获取编码后的lc3数据,
|
|
dec_test();
|
|
}
|
|
static void test_test()
|
|
{
|
|
thread_fork("test_test", 20, 1024, 0, 0, test, 0);
|
|
}
|
|
|
|
late_initcall(test_test);
|
|
|
|
|
|
|
|
#endif
|