diff --git a/class/audio/usbd_audio.c b/class/audio/usbd_audio.c index df177220..1d1d0c8e 100644 --- a/class/audio/usbd_audio.c +++ b/class/audio/usbd_audio.c @@ -65,7 +65,7 @@ struct audio_entity_info { static usb_slist_t usbd_audio_entity_info_head = USB_SLIST_OBJECT_INIT(usbd_audio_entity_info_head); const uint8_t default_sampling_freq_table[] = { - AUDIO_SAMPLE_FREQ_NUM(8), + AUDIO_SAMPLE_FREQ_NUM(5), AUDIO_SAMPLE_FREQ_4B(8000), AUDIO_SAMPLE_FREQ_4B(8000), AUDIO_SAMPLE_FREQ_4B(0x00), @@ -75,21 +75,21 @@ const uint8_t default_sampling_freq_table[] = { AUDIO_SAMPLE_FREQ_4B(32000), AUDIO_SAMPLE_FREQ_4B(32000), AUDIO_SAMPLE_FREQ_4B(0x00), - AUDIO_SAMPLE_FREQ_4B(48000), - AUDIO_SAMPLE_FREQ_4B(48000), - AUDIO_SAMPLE_FREQ_4B(0x00), - AUDIO_SAMPLE_FREQ_4B(96000), - AUDIO_SAMPLE_FREQ_4B(96000), - AUDIO_SAMPLE_FREQ_4B(0x00), AUDIO_SAMPLE_FREQ_4B(44100), AUDIO_SAMPLE_FREQ_4B(44100), AUDIO_SAMPLE_FREQ_4B(0x00), - AUDIO_SAMPLE_FREQ_4B(88200), - AUDIO_SAMPLE_FREQ_4B(88200), - AUDIO_SAMPLE_FREQ_4B(0x00), - AUDIO_SAMPLE_FREQ_4B(192000), - AUDIO_SAMPLE_FREQ_4B(192000), + AUDIO_SAMPLE_FREQ_4B(48000), + AUDIO_SAMPLE_FREQ_4B(48000), AUDIO_SAMPLE_FREQ_4B(0x00), + // AUDIO_SAMPLE_FREQ_4B(88200), + // AUDIO_SAMPLE_FREQ_4B(88200), + // AUDIO_SAMPLE_FREQ_4B(0x00), + // AUDIO_SAMPLE_FREQ_4B(96000), + // AUDIO_SAMPLE_FREQ_4B(96000), + // AUDIO_SAMPLE_FREQ_4B(0x00), + // AUDIO_SAMPLE_FREQ_4B(192000), + // AUDIO_SAMPLE_FREQ_4B(192000), + // AUDIO_SAMPLE_FREQ_4B(0x00), }; #if CONFIG_USBDEV_AUDIO_VERSION < 0x0200 diff --git a/demo/audio_v2_mic_dualchan_template.c b/demo/audio_v2_mic_dualchan_template.c index 4abe8c7b..e6f80804 100644 --- a/demo/audio_v2_mic_dualchan_template.c +++ b/demo/audio_v2_mic_dualchan_template.c @@ -14,14 +14,14 @@ #define AUDIO_IN_EP 0x01 -#define AUDIO_FREQ 96000 +#define AUDIO_FREQ 48000 #define HALF_WORD_BYTES 2 //2 half word (one channel) #define SAMPLE_BITS 16 //16 bit per channel -#define AUDIO_IN_PACKET ((uint32_t)((AUDIO_FREQ * 2 * HALF_WORD_BYTES) / 1000)) - #define CHANNEL_NUM 2 +#define AUDIO_IN_PACKET ((uint32_t)((AUDIO_FREQ * HALF_WORD_BYTES * CHANNEL_NUM) / 1000)) + #define BMCONTROL (AUDIO_V2_FU_CONTROL_MUTE | AUDIO_V2_FU_CONTROL_VOLUME) #define USB_AUDIO_CONFIG_DESC_SIZ (9 + \ diff --git a/demo/audio_v2_mic_speaker_multichan_template.c b/demo/audio_v2_mic_speaker_multichan_template.c index 382a2ba6..fd71452c 100644 --- a/demo/audio_v2_mic_speaker_multichan_template.c +++ b/demo/audio_v2_mic_speaker_multichan_template.c @@ -15,25 +15,26 @@ #define AUDIO_OUT_EP 0x02 #define AUDIO_IN_EP 0x81 -#define AUDIO_FREQ 96000 +#define AUDIO_FREQ 48000 #define HALF_WORD_BYTES 2 //2 half word (one channel) #define SAMPLE_BITS 16 //16 bit per channel -#define AUDIO_OUT_PACKET ((uint32_t)((AUDIO_FREQ * 2 * HALF_WORD_BYTES) / 1000)) -#define AUDIO_IN_PACKET ((uint32_t)((AUDIO_FREQ * 2 * HALF_WORD_BYTES) / 1000)) - #if 1 #define OUT_CHANNEL_NUM 2 #define IN_CHANNEL_NUM 2 -#define INPUT_CTRL DBVAL(BMCONTROL),DBVAL(BMCONTROL) +#define INPUT_CTRL DBVAL(BMCONTROL), DBVAL(BMCONTROL) #define INPUT_CH_ENABLE 0x00000003 #else #define OUT_CHANNEL_NUM 2 #define IN_CHANNEL_NUM 6 -#define INPUT_CTRL DBVAL(BMCONTROL),DBVAL(BMCONTROL),DBVAL(BMCONTROL),DBVAL(BMCONTROL),DBVAL(BMCONTROL),DBVAL(BMCONTROL) +#define INPUT_CTRL DBVAL(BMCONTROL), DBVAL(BMCONTROL), DBVAL(BMCONTROL), DBVAL(BMCONTROL), DBVAL(BMCONTROL), DBVAL(BMCONTROL) #define INPUT_CH_ENABLE 0x0000001F #endif +/* AudioFreq * DataSize (2 bytes) * NumChannels */ +#define AUDIO_OUT_PACKET ((uint32_t)((AUDIO_FREQ * HALF_WORD_BYTES * OUT_CHANNEL_NUM) / 1000)) +#define AUDIO_IN_PACKET ((uint32_t)((AUDIO_FREQ * HALF_WORD_BYTES * IN_CHANNEL_NUM) / 1000)) + #define BMCONTROL (AUDIO_V2_FU_CONTROL_MUTE | AUDIO_V2_FU_CONTROL_VOLUME) #define USB_AUDIO_CONFIG_DESC_SIZ (9 + \ @@ -173,11 +174,13 @@ void usbd_audio_close(uint8_t intf) void usbd_audio_set_sampling_freq(uint8_t entity_id, uint8_t ep_ch, uint32_t sampling_freq) { - uint16_t packet_size = ((sampling_freq * 2 * 2) / 1000); + uint16_t packet_size = 0; if (entity_id == 1) { + packet_size = ((sampling_freq * 2 * OUT_CHANNEL_NUM) / 1000); audio_descriptor[18 + USB_AUDIO_CONFIG_DESC_SIZ - AUDIO_V2_AS_DESCRIPTOR_INIT_LEN - 11] = packet_size; audio_descriptor[18 + USB_AUDIO_CONFIG_DESC_SIZ - AUDIO_V2_AS_DESCRIPTOR_INIT_LEN - 10] = packet_size >> 8; } else if (entity_id == 5) { + packet_size = ((sampling_freq * 2 * IN_CHANNEL_NUM) / 1000); audio_descriptor[18 + USB_AUDIO_CONFIG_DESC_SIZ - 11] = packet_size; audio_descriptor[18 + USB_AUDIO_CONFIG_DESC_SIZ - 10] = packet_size >> 8; } diff --git a/demo/audio_v2_speaker_dualchan_template.c b/demo/audio_v2_speaker_dualchan_template.c index 1b35690f..3b4b8c35 100644 --- a/demo/audio_v2_speaker_dualchan_template.c +++ b/demo/audio_v2_speaker_dualchan_template.c @@ -14,14 +14,14 @@ #define AUDIO_OUT_EP 0x01 -#define AUDIO_FREQ 96000 +#define AUDIO_FREQ 48000 #define HALF_WORD_BYTES 2 //2 half word (one channel) #define SAMPLE_BITS 16 //16 bit per channel -#define AUDIO_OUT_PACKET ((uint32_t)((AUDIO_FREQ * 2 * HALF_WORD_BYTES) / 1000)) - #define CHANNEL_NUM 2 +#define AUDIO_OUT_PACKET ((uint32_t)((AUDIO_FREQ * HALF_WORD_BYTES * CHANNEL_NUM) / 1000)) + #define BMCONTROL (AUDIO_V2_FU_CONTROL_MUTE | AUDIO_V2_FU_CONTROL_VOLUME) #define USB_AUDIO_CONFIG_DESC_SIZ (9 + \