正在显示
18 个修改的文件
包含
772 行增加
和
306 行删除
@@ -109,7 +109,9 @@ | @@ -109,7 +109,9 @@ | ||
109 | "jzsdk_errorcodedef.h": "c", | 109 | "jzsdk_errorcodedef.h": "c", |
110 | "jzsdk_timer.h": "c", | 110 | "jzsdk_timer.h": "c", |
111 | "jzsdk_framecomparsion_6aframe.h": "c", | 111 | "jzsdk_framecomparsion_6aframe.h": "c", |
112 | - "jzsdk_uart.h": "c" | 112 | + "jzsdk_uart.h": "c", |
113 | + "audiomange.h": "c", | ||
114 | + "pcmaudiofile.h": "c" | ||
113 | }, | 115 | }, |
114 | "Codegeex.GenerationPreference": "automatic", | 116 | "Codegeex.GenerationPreference": "automatic", |
115 | "C_Cpp.dimInactiveRegions": false | 117 | "C_Cpp.dimInactiveRegions": false |
@@ -122,7 +122,10 @@ typedef enum { | @@ -122,7 +122,10 @@ typedef enum { | ||
122 | 122 | ||
123 | JZ_INSCODE_5AFRAME_OPUS_PLAY = 0x10000910, //opus播放 | 123 | JZ_INSCODE_5AFRAME_OPUS_PLAY = 0x10000910, //opus播放 |
124 | 124 | ||
125 | - JZ_INSCODE_5AFRAME_OPUS_GETOPUSLIST = 0x10000911, //获取opus列表 | 125 | + JZ_INSCODE_5AFRAME_PCM_PLAY = 0x10000920, //pcm播放 |
126 | + | ||
127 | + JZ_INSCODE_5AFRAME_PCM_GETPCMLIST = 0x10000930, //获pcm列表 | ||
128 | + | ||
126 | 129 | ||
127 | JZ_INSCODE_5AFRAME_OPUS_REALTIMEVOICE_START = 0x10000A00, //开启opus实时语音 | 130 | JZ_INSCODE_5AFRAME_OPUS_REALTIMEVOICE_START = 0x10000A00, //开启opus实时语音 |
128 | JZ_INSCODE_5AFRAME_OPUS_REALTIMEVOICE_UNLIMIT_TRANSMISSION = 0x10000A01, //无限制传输opus实时语音 | 131 | JZ_INSCODE_5AFRAME_OPUS_REALTIMEVOICE_UNLIMIT_TRANSMISSION = 0x10000A01, //无限制传输opus实时语音 |
@@ -333,9 +333,9 @@ static int Comparison_5AFRAME_FirstLevelCode_0x58(char *getdata) | @@ -333,9 +333,9 @@ static int Comparison_5AFRAME_FirstLevelCode_0x58(char *getdata) | ||
333 | return JZ_INSCODE_5AFRAME_CHECKSTATUS_AUDIO_DETAIL_MESSAGE; | 333 | return JZ_INSCODE_5AFRAME_CHECKSTATUS_AUDIO_DETAIL_MESSAGE; |
334 | break; | 334 | break; |
335 | 335 | ||
336 | - //获取opus列表 | 336 | + //获取pcm列表 |
337 | case 0x10: | 337 | case 0x10: |
338 | - return JZ_INSCODE_5AFRAME_OPUS_GETOPUSLIST; | 338 | + return JZ_INSCODE_5AFRAME_PCM_GETPCMLIST; |
339 | break; | 339 | break; |
340 | 340 | ||
341 | default: | 341 | default: |
@@ -348,6 +348,10 @@ static int Comparison_5AFRAME_FirstLevelCode_0x59(char *getdata) | @@ -348,6 +348,10 @@ static int Comparison_5AFRAME_FirstLevelCode_0x59(char *getdata) | ||
348 | //二级功能位 | 348 | //二级功能位 |
349 | switch (getdata[8]) | 349 | switch (getdata[8]) |
350 | { | 350 | { |
351 | + case 0x10: | ||
352 | + return JZ_INSCODE_5AFRAME_OPUS_PLAY; | ||
353 | + break; | ||
354 | + | ||
351 | //opus录音传输 | 355 | //opus录音传输 |
352 | //opus传输开始 | 356 | //opus传输开始 |
353 | case 0xF1: | 357 | case 0xF1: |
@@ -24,6 +24,8 @@ | @@ -24,6 +24,8 @@ | ||
24 | #include "Megaphone/Megaphone.h" | 24 | #include "Megaphone/Megaphone.h" |
25 | #include "Megaphone/Music/AudioFile/Megaphone_AudioFile.h" | 25 | #include "Megaphone/Music/AudioFile/Megaphone_AudioFile.h" |
26 | #include "Megaphone/Opus/Megaphone_Opus.h" | 26 | #include "Megaphone/Opus/Megaphone_Opus.h" |
27 | + #include "Megaphone/PcmAudio/PcmAudioFile.h" | ||
28 | + | ||
27 | #endif | 29 | #endif |
28 | 30 | ||
29 | static int HalRecvMode = JZ_FLAGCODE_OFF; //接收模式,主要是为了限制不同设备同时要求hal层做出 同一个数据接收相关功能 ,目前做法是只限定一个hal设备使用一种数据接收模式 | 31 | static int HalRecvMode = JZ_FLAGCODE_OFF; //接收模式,主要是为了限制不同设备同时要求hal层做出 同一个数据接收相关功能 ,目前做法是只限定一个hal设备使用一种数据接收模式 |
@@ -705,15 +707,24 @@ static T_JZsdkReturnCode RecvDeal_audio_PlayFile(int Port, char *getbuf) | @@ -705,15 +707,24 @@ static T_JZsdkReturnCode RecvDeal_audio_PlayFile(int Port, char *getbuf) | ||
705 | **********/ | 707 | **********/ |
706 | static T_JZsdkReturnCode RecvDeal_audio_PlayContinue(int Port, char *getbuf) | 708 | static T_JZsdkReturnCode RecvDeal_audio_PlayContinue(int Port, char *getbuf) |
707 | { | 709 | { |
710 | + T_JZsdkReturnCode ret; | ||
711 | + | ||
708 | JZSDK_LOG_INFO("%s,音频继续播放",JZsdk_DefineCode_GetPortName(Port)); | 712 | JZSDK_LOG_INFO("%s,音频继续播放",JZsdk_DefineCode_GetPortName(Port)); |
709 | 713 | ||
710 | //获取帧的序列号 | 714 | //获取帧的序列号 |
711 | int FrameSequence = JZsdk_Get_FrameSequence(getbuf); | 715 | int FrameSequence = JZsdk_Get_FrameSequence(getbuf); |
712 | 716 | ||
713 | - UIcontrol_ContinuePlayAudio(Port); | ||
714 | - | ||
715 | - //回复操作成功 | ||
716 | - HalSend_type1Send_Reply_Success(Port, FrameSequence); | 717 | + ret = UIcontrol_ContinuePlayAudio(Port); |
718 | + if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
719 | + { | ||
720 | + //回复操作成功 | ||
721 | + HalSend_type1Send_Reply_Success(Port, FrameSequence); | ||
722 | + } | ||
723 | + else | ||
724 | + { | ||
725 | + //回复操作失败 | ||
726 | + HalSend_type1Send_Reply_Failure(Port, FrameSequence); | ||
727 | + } | ||
717 | 728 | ||
718 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 729 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
719 | } | 730 | } |
@@ -1581,13 +1592,13 @@ static T_JZsdkReturnCode RecvDeal_Delete_Audio(int Port, char *getbuf) | @@ -1581,13 +1592,13 @@ static T_JZsdkReturnCode RecvDeal_Delete_Audio(int Port, char *getbuf) | ||
1581 | 1592 | ||
1582 | /********* | 1593 | /********* |
1583 | * | 1594 | * |
1584 | - * 删除录音 | 1595 | + * 删除pcm文件 |
1585 | * | 1596 | * |
1586 | * | 1597 | * |
1587 | **********/ | 1598 | **********/ |
1588 | static T_JZsdkReturnCode RecvDeal_Delete_VoiceRecord(int Port, char *getbuf) | 1599 | static T_JZsdkReturnCode RecvDeal_Delete_VoiceRecord(int Port, char *getbuf) |
1589 | { | 1600 | { |
1590 | - JZSDK_LOG_INFO("%s,删除opus录音操作",JZsdk_DefineCode_GetPortName(Port)); | 1601 | + JZSDK_LOG_INFO("%s,删除pcm文件操作",JZsdk_DefineCode_GetPortName(Port)); |
1591 | 1602 | ||
1592 | //获取帧的序列号 | 1603 | //获取帧的序列号 |
1593 | int FrameSequence = JZsdk_Get_FrameSequence(getbuf); | 1604 | int FrameSequence = JZsdk_Get_FrameSequence(getbuf); |
@@ -1603,7 +1614,7 @@ static T_JZsdkReturnCode RecvDeal_Delete_VoiceRecord(int Port, char *getbuf) | @@ -1603,7 +1614,7 @@ static T_JZsdkReturnCode RecvDeal_Delete_VoiceRecord(int Port, char *getbuf) | ||
1603 | 1614 | ||
1604 | //3、拼接指令 | 1615 | //3、拼接指令 |
1605 | char FilePath[512]; | 1616 | char FilePath[512]; |
1606 | - snprintf(FilePath, 512 ,"/root/sdcard/opus/%s", FileName); | 1617 | + snprintf(FilePath, 512 ,"/root/sdcard/pcm/%s", FileName); |
1607 | 1618 | ||
1608 | //4、删除文件 | 1619 | //4、删除文件 |
1609 | JZsdk_Osal_delete(FilePath); | 1620 | JZsdk_Osal_delete(FilePath); |
@@ -1612,7 +1623,7 @@ static T_JZsdkReturnCode RecvDeal_Delete_VoiceRecord(int Port, char *getbuf) | @@ -1612,7 +1623,7 @@ static T_JZsdkReturnCode RecvDeal_Delete_VoiceRecord(int Port, char *getbuf) | ||
1612 | 1623 | ||
1613 | //4、刷新歌曲列表 | 1624 | //4、刷新歌曲列表 |
1614 | #ifdef MEGAPHONE_CONFIG_STATUS_ON | 1625 | #ifdef MEGAPHONE_CONFIG_STATUS_ON |
1615 | - OpusFile_FlushList(); | 1626 | + PcmFile_FlushList(); |
1616 | #endif | 1627 | #endif |
1617 | 1628 | ||
1618 | //回复操作成功 | 1629 | //回复操作成功 |
@@ -1722,10 +1733,10 @@ static T_JZsdkReturnCode RecvDeal_Rename_VoiceRecord(int Port, char *getbuf) | @@ -1722,10 +1733,10 @@ static T_JZsdkReturnCode RecvDeal_Rename_VoiceRecord(int Port, char *getbuf) | ||
1722 | 1733 | ||
1723 | //3、拼接出地址 | 1734 | //3、拼接出地址 |
1724 | char OldFilePath[JZSDK_FILE_PATH_SIZE_MAX]; | 1735 | char OldFilePath[JZSDK_FILE_PATH_SIZE_MAX]; |
1725 | - snprintf(OldFilePath, JZSDK_FILE_PATH_SIZE_MAX ,"/root/sdcard/opus/%s", OldFileName); | 1736 | + snprintf(OldFilePath, JZSDK_FILE_PATH_SIZE_MAX ,"/root/sdcard/pcm/%s", OldFileName); |
1726 | 1737 | ||
1727 | char NewFilePath[JZSDK_FILE_PATH_SIZE_MAX]; | 1738 | char NewFilePath[JZSDK_FILE_PATH_SIZE_MAX]; |
1728 | - snprintf(NewFilePath, JZSDK_FILE_PATH_SIZE_MAX ,"/root/sdcard/opus/%s", NewFileName); | 1739 | + snprintf(NewFilePath, JZSDK_FILE_PATH_SIZE_MAX ,"/root/sdcard/pcm/%s", NewFileName); |
1729 | 1740 | ||
1730 | JZsdk_Osal_Rename(OldFilePath, NewFilePath); | 1741 | JZsdk_Osal_Rename(OldFilePath, NewFilePath); |
1731 | 1742 | ||
@@ -1733,7 +1744,7 @@ static T_JZsdkReturnCode RecvDeal_Rename_VoiceRecord(int Port, char *getbuf) | @@ -1733,7 +1744,7 @@ static T_JZsdkReturnCode RecvDeal_Rename_VoiceRecord(int Port, char *getbuf) | ||
1733 | 1744 | ||
1734 | //4、刷新歌曲列表 | 1745 | //4、刷新歌曲列表 |
1735 | #ifdef MEGAPHONE_CONFIG_STATUS_ON | 1746 | #ifdef MEGAPHONE_CONFIG_STATUS_ON |
1736 | - OpusFile_FlushList(); | 1747 | + PcmFile_FlushList(); |
1737 | #endif | 1748 | #endif |
1738 | 1749 | ||
1739 | //回复操作成功 | 1750 | //回复操作成功 |
@@ -2371,6 +2382,8 @@ static T_JZsdkReturnCode RecvDeal_OpusTrans_stop_and_check(int Port, char *getbu | @@ -2371,6 +2382,8 @@ static T_JZsdkReturnCode RecvDeal_OpusTrans_stop_and_check(int Port, char *getbu | ||
2371 | **********/ | 2382 | **********/ |
2372 | static T_JZsdkReturnCode RecvDeal_OpusPlay(int Port, char *getbuf) | 2383 | static T_JZsdkReturnCode RecvDeal_OpusPlay(int Port, char *getbuf) |
2373 | { | 2384 | { |
2385 | + T_JZsdkReturnCode ret; | ||
2386 | + | ||
2374 | JZSDK_LOG_INFO("%s,opus播放",JZsdk_DefineCode_GetPortName(Port)); | 2387 | JZSDK_LOG_INFO("%s,opus播放",JZsdk_DefineCode_GetPortName(Port)); |
2375 | 2388 | ||
2376 | //获取帧的序列号 | 2389 | //获取帧的序列号 |
@@ -2385,137 +2398,13 @@ static T_JZsdkReturnCode RecvDeal_OpusPlay(int Port, char *getbuf) | @@ -2385,137 +2398,13 @@ static T_JZsdkReturnCode RecvDeal_OpusPlay(int Port, char *getbuf) | ||
2385 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 2398 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
2386 | } | 2399 | } |
2387 | 2400 | ||
2388 | - //获取命令 | ||
2389 | - int Mode = getbuf[9]; | ||
2390 | - if (Mode == 0) | ||
2391 | - { | ||
2392 | - UIcontrol_Opus_PlayFixedFile(Port); | ||
2393 | - | ||
2394 | - //回复操作成功 | ||
2395 | - HalSend_type1Send_Reply_Success(Port, FrameSequence); | ||
2396 | - } | ||
2397 | - else if (Mode == 1) | ||
2398 | - { | ||
2399 | - | ||
2400 | - } | ||
2401 | - | ||
2402 | - return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
2403 | -} | 2401 | + UIcontrol_Opus_PlayFixedFile(Port); |
2404 | 2402 | ||
2405 | -/********************************** | ||
2406 | - * | ||
2407 | - * opus列表查询 | ||
2408 | - * | ||
2409 | - * | ||
2410 | - * **********************************/ | ||
2411 | -static T_JZsdkReturnCode RecvDeal_Get_OpusList(int Port, char *getbuf) | ||
2412 | -{ | ||
2413 | - T_JZsdkReturnCode ret; | ||
2414 | - | ||
2415 | - JZSDK_LOG_INFO("%s,opus列表查询",JZsdk_DefineCode_GetPortName(Port)); | ||
2416 | - | ||
2417 | - //获取帧的序列号 | ||
2418 | - int FrameSequence = JZsdk_Get_FrameSequence(getbuf); | ||
2419 | - | ||
2420 | -#ifdef MEGAPHONE_CONFIG_STATUS_ON | ||
2421 | - | ||
2422 | - //刷新opus列表 | ||
2423 | - OpusFile_FlushList(); | ||
2424 | - | ||
2425 | - //获取opus总数 | ||
2426 | - int OpusFileCount = OpusFile_GetListNum(); | ||
2427 | - | ||
2428 | - //注册一个opus数组 | ||
2429 | - unsigned char **MusicName = (unsigned char **)malloc(OpusFileCount * sizeof(unsigned char*)); | ||
2430 | - if (MusicName == NULL) | ||
2431 | - { | ||
2432 | - //回复操作失败 | ||
2433 | - HalSend_type1Send_Reply_Failure(Port, FrameSequence); | ||
2434 | - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
2435 | - } | ||
2436 | - | ||
2437 | - //注册一个歌曲名字长度的数组 | ||
2438 | - int *MusicNameLength = (int *)malloc(OpusFileCount * sizeof(int)); | ||
2439 | - if (MusicNameLength == NULL) | ||
2440 | - { | ||
2441 | - free(MusicName); | ||
2442 | - //回复操作失败 | ||
2443 | - HalSend_type1Send_Reply_Failure(Port, FrameSequence); | ||
2444 | - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
2445 | - } | ||
2446 | - | ||
2447 | - //为每一首opus分配内存 | ||
2448 | - for (int i = 0; i < OpusFileCount; i++) | ||
2449 | - { | ||
2450 | - MusicName[i] = (unsigned char*)malloc(128 * sizeof(unsigned char)); | ||
2451 | - if (MusicName[i] == NULL) | ||
2452 | - { | ||
2453 | - // 内存分配失败,需要释放之前分配的内存 | ||
2454 | - for (int j = 0; j < i; j++) | ||
2455 | - { | ||
2456 | - free(MusicName[j]); | ||
2457 | - } | ||
2458 | - free(MusicNameLength); | ||
2459 | - free(MusicName); | ||
2460 | - | ||
2461 | - //回复操作失败 | ||
2462 | - HalSend_type1Send_Reply_Failure(Port, FrameSequence); | ||
2463 | - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
2464 | - } | ||
2465 | - | ||
2466 | - memset(MusicName[i], 0, 128 * sizeof(unsigned char)); | ||
2467 | - | ||
2468 | - //如果成功分配内存,则写入名字 | ||
2469 | - Megaphone_OpusFile_GetAudioNameByIndex(i, MusicName[i], &MusicNameLength[i]); | ||
2470 | - } | ||
2471 | - | ||
2472 | - JZSDK_LOG_DEBUG("opus列表取出完成"); | ||
2473 | - | ||
2474 | - //发送开始帧 | ||
2475 | - ret = HalSend_type1Send_Send_OpusList_Start(Port, FrameSequence, OpusFileCount); | ||
2476 | - | ||
2477 | - for (int i = 0; i < OpusFileCount; i++) | ||
2478 | - { | ||
2479 | - //获取歌曲详细信息 | ||
2480 | - struct AudioMange_audio_struct AudioDetailMessage; | ||
2481 | - memset(&AudioDetailMessage, 0, sizeof(struct AudioMange_audio_struct)); | ||
2482 | - ret = OpusFile_GetAudioInfo(MusicName[i], MusicNameLength[i],&AudioDetailMessage); | ||
2483 | - if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
2484 | - { | ||
2485 | - //回复操作失败 | ||
2486 | - HalSend_type1Send_Reply_Failure(Port, FrameSequence); | ||
2487 | - | ||
2488 | - continue; | ||
2489 | - } | ||
2490 | - | ||
2491 | - //发送opus列表 | ||
2492 | - ret = HalSend_type1Send_Send_OpusList_Trans(Port, FrameSequence, AudioDetailMessage.FileName, AudioDetailMessage.FileNameLen, AudioDetailMessage.FileSize, AudioDetailMessage.Time); | ||
2493 | - if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
2494 | - { | ||
2495 | - //回复操作失败 | ||
2496 | - HalSend_type1Send_Reply_Failure(Port, FrameSequence); | ||
2497 | - | ||
2498 | - continue; | ||
2499 | - } | ||
2500 | - } | ||
2501 | - | ||
2502 | - //释放存储的数据 | ||
2503 | - for (int i = 0; i < OpusFileCount; i++) | ||
2504 | - { | ||
2505 | - free(MusicName[i]); | ||
2506 | - } | ||
2507 | - | ||
2508 | - free(MusicNameLength); | ||
2509 | - free(MusicName); | 2403 | + //回复操作成功 |
2404 | + HalSend_type1Send_Reply_Success(Port, FrameSequence); | ||
2510 | 2405 | ||
2511 | - //发送结束帧 | ||
2512 | - ret = HalSend_type1Send_Send_OpusList_Stop(Port, FrameSequence); | ||
2513 | 2406 | ||
2514 | -#else | ||
2515 | - JZSDK_LOG_ERROR("非喊话器不支持opus列表"); | ||
2516 | - //回复操作失败 | ||
2517 | - HalSend_type1Send_Reply_Failure(Port, FrameSequence); | ||
2518 | -#endif | 2407 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
2519 | } | 2408 | } |
2520 | 2409 | ||
2521 | /********* | 2410 | /********* |
@@ -2639,6 +2528,178 @@ static T_JZsdkReturnCode RecvDeal_Opus_RealTimeVoice_stop(int Port, char *getbuf | @@ -2639,6 +2528,178 @@ static T_JZsdkReturnCode RecvDeal_Opus_RealTimeVoice_stop(int Port, char *getbuf | ||
2639 | 2528 | ||
2640 | /******************************************************************************************************************************* | 2529 | /******************************************************************************************************************************* |
2641 | * | 2530 | * |
2531 | + * pcm部分 | ||
2532 | + * | ||
2533 | + * *******************************************************************************************************************************/ | ||
2534 | + | ||
2535 | +/********************************* | ||
2536 | + * | ||
2537 | + * PCM播放 | ||
2538 | + * | ||
2539 | + * | ||
2540 | + * **********************************/ | ||
2541 | +static T_JZsdkReturnCode RecvDeal_PCM_Play(int Port, char *getbuf) | ||
2542 | +{ | ||
2543 | + T_JZsdkReturnCode ret; | ||
2544 | + | ||
2545 | + JZSDK_LOG_INFO("%s, PCM播放",JZsdk_DefineCode_GetPortName(Port)); | ||
2546 | + | ||
2547 | + //获取帧的序列号 | ||
2548 | + int FrameSequence = JZsdk_Get_FrameSequence(getbuf); | ||
2549 | + | ||
2550 | + //分析pcm文件名 | ||
2551 | + unsigned char PcmName[128]; | ||
2552 | + unsigned int PcmNameLen = JZsdk_Get_FrameLength(getbuf) - 9 - 2; | ||
2553 | + if (PcmNameLen > 128) | ||
2554 | + { | ||
2555 | + //回复操作失败 | ||
2556 | + HalSend_type1Send_Reply_Failure(Port, FrameSequence); | ||
2557 | + | ||
2558 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
2559 | + } | ||
2560 | + | ||
2561 | + memset(PcmName, 0, sizeof(PcmName)); | ||
2562 | + memcpy(PcmName, &getbuf[10], PcmNameLen); | ||
2563 | + | ||
2564 | + ret = UIcontrol_Pcm_PlayListFile(Port, PcmName, PcmNameLen); | ||
2565 | + if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
2566 | + { | ||
2567 | + //回复操作成功 | ||
2568 | + HalSend_type1Send_Reply_Success(Port, FrameSequence); | ||
2569 | + } | ||
2570 | + else | ||
2571 | + { | ||
2572 | + //回复操作失败 | ||
2573 | + HalSend_type1Send_Reply_Failure(Port, FrameSequence); | ||
2574 | + | ||
2575 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
2576 | + } | ||
2577 | + | ||
2578 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
2579 | +} | ||
2580 | + | ||
2581 | + | ||
2582 | + | ||
2583 | + | ||
2584 | +/********************************** | ||
2585 | + * | ||
2586 | + * pcm列表查询 | ||
2587 | + * | ||
2588 | + * | ||
2589 | + * **********************************/ | ||
2590 | +static T_JZsdkReturnCode RecvDeal_Get_PcmList(int Port, char *getbuf) | ||
2591 | +{ | ||
2592 | + T_JZsdkReturnCode ret; | ||
2593 | + | ||
2594 | + JZSDK_LOG_INFO("%s,pcm列表查询",JZsdk_DefineCode_GetPortName(Port)); | ||
2595 | + | ||
2596 | + //获取帧的序列号 | ||
2597 | + int FrameSequence = JZsdk_Get_FrameSequence(getbuf); | ||
2598 | + | ||
2599 | +#ifdef MEGAPHONE_CONFIG_STATUS_ON | ||
2600 | + | ||
2601 | + //刷新pcm列表 | ||
2602 | + PcmFile_FlushList(); | ||
2603 | + | ||
2604 | + //获取opus总数 | ||
2605 | + int PcmFileCount = PcmFile_GetListNum(); | ||
2606 | + | ||
2607 | + //注册一个opus数组 | ||
2608 | + unsigned char **MusicName = (unsigned char **)malloc(PcmFileCount * sizeof(unsigned char*)); | ||
2609 | + if (MusicName == NULL) | ||
2610 | + { | ||
2611 | + //回复操作失败 | ||
2612 | + HalSend_type1Send_Reply_Failure(Port, FrameSequence); | ||
2613 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
2614 | + } | ||
2615 | + | ||
2616 | + //注册一个歌曲名字长度的数组 | ||
2617 | + int *MusicNameLength = (int *)malloc(PcmFileCount * sizeof(int)); | ||
2618 | + if (MusicNameLength == NULL) | ||
2619 | + { | ||
2620 | + free(MusicName); | ||
2621 | + //回复操作失败 | ||
2622 | + HalSend_type1Send_Reply_Failure(Port, FrameSequence); | ||
2623 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
2624 | + } | ||
2625 | + | ||
2626 | + //为每一首opus分配内存 | ||
2627 | + for (int i = 0; i < PcmFileCount; i++) | ||
2628 | + { | ||
2629 | + MusicName[i] = (unsigned char*)malloc(128 * sizeof(unsigned char)); | ||
2630 | + if (MusicName[i] == NULL) | ||
2631 | + { | ||
2632 | + // 内存分配失败,需要释放之前分配的内存 | ||
2633 | + for (int j = 0; j < i; j++) | ||
2634 | + { | ||
2635 | + free(MusicName[j]); | ||
2636 | + } | ||
2637 | + free(MusicNameLength); | ||
2638 | + free(MusicName); | ||
2639 | + | ||
2640 | + //回复操作失败 | ||
2641 | + HalSend_type1Send_Reply_Failure(Port, FrameSequence); | ||
2642 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
2643 | + } | ||
2644 | + | ||
2645 | + memset(MusicName[i], 0, 128 * sizeof(unsigned char)); | ||
2646 | + | ||
2647 | + //如果成功分配内存,则写入名字 | ||
2648 | + Megaphone_PcmFile_GetAudioNameByIndex(i, MusicName[i], &MusicNameLength[i]); | ||
2649 | + } | ||
2650 | + | ||
2651 | + JZSDK_LOG_DEBUG("pcm列表取出完成"); | ||
2652 | + | ||
2653 | + //发送开始帧 | ||
2654 | + ret = HalSend_type1Send_Send_OpusList_Start(Port, FrameSequence, PcmFileCount); | ||
2655 | + | ||
2656 | + for (int i = 0; i < PcmFileCount; i++) | ||
2657 | + { | ||
2658 | + //获取歌曲详细信息 | ||
2659 | + struct AudioMange_audio_struct AudioDetailMessage; | ||
2660 | + memset(&AudioDetailMessage, 0, sizeof(struct AudioMange_audio_struct)); | ||
2661 | + ret = PcmFile_GetAudioInfo(MusicName[i], MusicNameLength[i],&AudioDetailMessage); | ||
2662 | + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
2663 | + { | ||
2664 | + //回复操作失败 | ||
2665 | + HalSend_type1Send_Reply_Failure(Port, FrameSequence); | ||
2666 | + | ||
2667 | + continue; | ||
2668 | + } | ||
2669 | + | ||
2670 | + //发送opus列表 | ||
2671 | + ret = HalSend_type1Send_Send_OpusList_Trans(Port, FrameSequence, AudioDetailMessage.FileName, AudioDetailMessage.FileNameLen, AudioDetailMessage.FileSize, AudioDetailMessage.Time); | ||
2672 | + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
2673 | + { | ||
2674 | + //回复操作失败 | ||
2675 | + HalSend_type1Send_Reply_Failure(Port, FrameSequence); | ||
2676 | + | ||
2677 | + continue; | ||
2678 | + } | ||
2679 | + } | ||
2680 | + | ||
2681 | + //释放存储的数据 | ||
2682 | + for (int i = 0; i < PcmFileCount; i++) | ||
2683 | + { | ||
2684 | + free(MusicName[i]); | ||
2685 | + } | ||
2686 | + | ||
2687 | + free(MusicNameLength); | ||
2688 | + free(MusicName); | ||
2689 | + | ||
2690 | + //发送结束帧 | ||
2691 | + ret = HalSend_type1Send_Send_OpusList_Stop(Port, FrameSequence); | ||
2692 | + | ||
2693 | +#else | ||
2694 | + JZSDK_LOG_ERROR("非喊话器不支持pcm列表"); | ||
2695 | + //回复操作失败 | ||
2696 | + HalSend_type1Send_Reply_Failure(Port, FrameSequence); | ||
2697 | +#endif | ||
2698 | +} | ||
2699 | + | ||
2700 | + | ||
2701 | +/******************************************************************************************************************************* | ||
2702 | + * | ||
2642 | * 云台部分 | 2703 | * 云台部分 |
2643 | * | 2704 | * |
2644 | * *******************************************************************************************************************************/ | 2705 | * *******************************************************************************************************************************/ |
@@ -4511,12 +4572,6 @@ static T_JZsdkReturnCode RecvDeal_InstructInput(int Port, int Receive_mode, unsi | @@ -4511,12 +4572,6 @@ static T_JZsdkReturnCode RecvDeal_InstructInput(int Port, int Receive_mode, unsi | ||
4511 | return 0; | 4572 | return 0; |
4512 | break; | 4573 | break; |
4513 | 4574 | ||
4514 | - //获取opus列表 | ||
4515 | - case JZ_INSCODE_5AFRAME_OPUS_GETOPUSLIST: | ||
4516 | - RecvDeal_Get_OpusList(Port,getbuf); | ||
4517 | - return 0; | ||
4518 | - break; | ||
4519 | - | ||
4520 | //开启opus实时喊话 | 4575 | //开启opus实时喊话 |
4521 | case JZ_INSCODE_5AFRAME_OPUS_REALTIMEVOICE_START: | 4576 | case JZ_INSCODE_5AFRAME_OPUS_REALTIMEVOICE_START: |
4522 | RecvDeal_Opus_RealTimeVoice_start(Port,getbuf); | 4577 | RecvDeal_Opus_RealTimeVoice_start(Port,getbuf); |
@@ -4535,6 +4590,18 @@ static T_JZsdkReturnCode RecvDeal_InstructInput(int Port, int Receive_mode, unsi | @@ -4535,6 +4590,18 @@ static T_JZsdkReturnCode RecvDeal_InstructInput(int Port, int Receive_mode, unsi | ||
4535 | return 0; | 4590 | return 0; |
4536 | break; | 4591 | break; |
4537 | 4592 | ||
4593 | + //PCM播放 | ||
4594 | + case JZ_INSCODE_5AFRAME_PCM_PLAY: | ||
4595 | + RecvDeal_PCM_Play(Port,getbuf); | ||
4596 | + return 0; | ||
4597 | + break; | ||
4598 | + | ||
4599 | + //获取Pcm列表 | ||
4600 | + case JZ_INSCODE_5AFRAME_PCM_GETPCMLIST: | ||
4601 | + RecvDeal_Get_PcmList(Port,getbuf); | ||
4602 | + return 0; | ||
4603 | + break; | ||
4604 | + | ||
4538 | //云台控制 | 4605 | //云台控制 |
4539 | case JZ_INSCODE_5AFRAME_GIMBAL_PITCH_CONTROL: | 4606 | case JZ_INSCODE_5AFRAME_GIMBAL_PITCH_CONTROL: |
4540 | RecvDeal_Gimbal_PitchControl(Port,getbuf); | 4607 | RecvDeal_Gimbal_PitchControl(Port,getbuf); |
@@ -28,8 +28,6 @@ struct pcm_AlsaInfo | @@ -28,8 +28,6 @@ struct pcm_AlsaInfo | ||
28 | int dealFlag; //处理标志位,用于避免卡死 | 28 | int dealFlag; //处理标志位,用于避免卡死 |
29 | }pcm_AlsaInfo; | 29 | }pcm_AlsaInfo; |
30 | 30 | ||
31 | -extern T_JZsdkReturnCode g_AudioDealPauseFlag; | ||
32 | - | ||
33 | /********** | 31 | /********** |
34 | * | 32 | * |
35 | * 参数初始化 | 33 | * 参数初始化 |
@@ -360,7 +358,7 @@ T_JZsdkReturnCode Pcm_AlsaPlay(struct AudioDealInfo *IndexInfo, unsigned char *b | @@ -360,7 +358,7 @@ T_JZsdkReturnCode Pcm_AlsaPlay(struct AudioDealInfo *IndexInfo, unsigned char *b | ||
360 | AlsaWaitPlayEnd(AlsaInfo); | 358 | AlsaWaitPlayEnd(AlsaInfo); |
361 | 359 | ||
362 | //暂停播放 | 360 | //暂停播放 |
363 | - while(g_AudioDealPauseFlag) | 361 | + while(AudioDeal_GetPauseAndContinuePlayStatus() == JZ_FLAGCODE_ON) |
364 | { | 362 | { |
365 | delayMs(1); | 363 | delayMs(1); |
366 | } | 364 | } |
@@ -221,6 +221,18 @@ T_JZsdkReturnCode AudioDeal_PauseAndContinuePlay(int status) | @@ -221,6 +221,18 @@ T_JZsdkReturnCode AudioDeal_PauseAndContinuePlay(int status) | ||
221 | g_AudioDealPauseFlag = status; | 221 | g_AudioDealPauseFlag = status; |
222 | } | 222 | } |
223 | 223 | ||
224 | +/******************* | ||
225 | + * | ||
226 | + * 获取音频暂停状态 | ||
227 | + * jzon 为暂停播放 | ||
228 | + * jzoff 为继续播放 | ||
229 | + * | ||
230 | + * *********************/ | ||
231 | +int AudioDeal_GetPauseAndContinuePlayStatus() | ||
232 | +{ | ||
233 | + return g_AudioDealPauseFlag; | ||
234 | +} | ||
235 | + | ||
224 | /*************************** | 236 | /*************************** |
225 | * | 237 | * |
226 | * 音频文件数据接入接口 | 238 | * 音频文件数据接入接口 |
@@ -96,7 +96,10 @@ T_JZsdkReturnCode AudioDeal_FilePlayInput(unsigned char *FilePath); | @@ -96,7 +96,10 @@ T_JZsdkReturnCode AudioDeal_FilePlayInput(unsigned char *FilePath); | ||
96 | T_JZsdkReturnCode AudioDeal_ResampleRest(unsigned int in_sampleRate, AVChannelLayout in_ch_layout, enum AVSampleFormat in_format); | 96 | T_JZsdkReturnCode AudioDeal_ResampleRest(unsigned int in_sampleRate, AVChannelLayout in_ch_layout, enum AVSampleFormat in_format); |
97 | T_JZsdkReturnCode AudioFile_Stream_DataInput(AVFrame *frame); | 97 | T_JZsdkReturnCode AudioFile_Stream_DataInput(AVFrame *frame); |
98 | T_JZsdkReturnCode AudioDeal_Mp3DataInput(int In_Bitrate, unsigned char *buffer, int bytesRead); | 98 | T_JZsdkReturnCode AudioDeal_Mp3DataInput(int In_Bitrate, unsigned char *buffer, int bytesRead); |
99 | + | ||
99 | T_JZsdkReturnCode AudioDeal_PauseAndContinuePlay(int status); | 100 | T_JZsdkReturnCode AudioDeal_PauseAndContinuePlay(int status); |
101 | +int AudioDeal_GetPauseAndContinuePlayStatus(); | ||
102 | + | ||
100 | T_JZsdkReturnCode Get_AudioDealStatus(); | 103 | T_JZsdkReturnCode Get_AudioDealStatus(); |
101 | T_JZsdkReturnCode AudioDeal_SetFilterMode(int mode); | 104 | T_JZsdkReturnCode AudioDeal_SetFilterMode(int mode); |
102 | T_JZsdkReturnCode AudioDeal_Mp3DataStop(); | 105 | T_JZsdkReturnCode AudioDeal_Mp3DataStop(); |
@@ -24,6 +24,8 @@ | @@ -24,6 +24,8 @@ | ||
24 | #include "Megaphone/Music/AudioFile/Megaphone_AudioFile.h" | 24 | #include "Megaphone/Music/AudioFile/Megaphone_AudioFile.h" |
25 | #include "Megaphone/Music/RealTimeMP2/Megaphone_RealTimeMP2.h" | 25 | #include "Megaphone/Music/RealTimeMP2/Megaphone_RealTimeMP2.h" |
26 | #include "Megaphone/opus/Megaphone_Opus.h" | 26 | #include "Megaphone/opus/Megaphone_Opus.h" |
27 | +#include "Megaphone/PcmAudio/PcmAudioFile.h" | ||
28 | + | ||
27 | 29 | ||
28 | int MegPlayStatusUnChange_flag = JZ_FLAGCODE_OFF; | 30 | int MegPlayStatusUnChange_flag = JZ_FLAGCODE_OFF; |
29 | static MegaphonePlayStatus g_Megaphone_Play_Status = AUDIO_PLAY_STATUS_IDLE; | 31 | static MegaphonePlayStatus g_Megaphone_Play_Status = AUDIO_PLAY_STATUS_IDLE; |
@@ -199,6 +201,14 @@ static T_JZsdkReturnCode Megaphone_Play(struct MegaphoneInfo *IndexInfo, enum Me | @@ -199,6 +201,14 @@ static T_JZsdkReturnCode Megaphone_Play(struct MegaphoneInfo *IndexInfo, enum Me | ||
199 | ret = OpusFile_PlayFixedFile(); | 201 | ret = OpusFile_PlayFixedFile(); |
200 | } | 202 | } |
201 | 203 | ||
204 | + case AUDIO_PLAY_STATUS_PCM_LIST: | ||
205 | + { | ||
206 | + JZSDK_LOG_INFO("音频播放:pcm列表"); | ||
207 | + | ||
208 | + //pcm播放 | ||
209 | + ret = PcmAudioPlay_Play(IndexInfo->str, IndexInfo->str_len); | ||
210 | + } | ||
211 | + | ||
202 | default: | 212 | default: |
203 | break; | 213 | break; |
204 | } | 214 | } |
@@ -606,9 +616,27 @@ T_JZsdkReturnCode Megaphone_Broadcast_OpusDecodeStatus(int status) | @@ -606,9 +616,27 @@ T_JZsdkReturnCode Megaphone_Broadcast_OpusDecodeStatus(int status) | ||
606 | **********/ | 616 | **********/ |
607 | T_JZsdkReturnCode Megaphone_Opus_PlayFixedFile() | 617 | T_JZsdkReturnCode Megaphone_Opus_PlayFixedFile() |
608 | { | 618 | { |
619 | + memset(g_MegaphoneInfo, 0, sizeof(struct MegaphoneInfo)); | ||
620 | + g_MegaphoneInfo->str_len = 0; | ||
621 | + | ||
609 | return Megaphone_Play(g_MegaphoneInfo, AUDIO_PLAY_STATUS_OPUS_RECORD, JZ_FLAGCODE_ON); | 622 | return Megaphone_Play(g_MegaphoneInfo, AUDIO_PLAY_STATUS_OPUS_RECORD, JZ_FLAGCODE_ON); |
610 | } | 623 | } |
611 | 624 | ||
625 | +/********* | ||
626 | + * | ||
627 | + * 1、播放list列表的pcm音频 | ||
628 | + * | ||
629 | + * | ||
630 | +**********/ | ||
631 | +T_JZsdkReturnCode Megaphone_PlayPcmListFile(unsigned char *Filename,int len) | ||
632 | +{ | ||
633 | + memset(g_MegaphoneInfo, 0, sizeof(struct MegaphoneInfo)); | ||
634 | + memcpy(g_MegaphoneInfo->str, Filename, len); | ||
635 | + g_MegaphoneInfo->str_len = len; | ||
636 | + | ||
637 | + return Megaphone_Play(g_MegaphoneInfo, AUDIO_PLAY_STATUS_PCM_LIST, JZ_FLAGCODE_ON); | ||
638 | +} | ||
639 | + | ||
612 | /* | 640 | /* |
613 | * | 641 | * |
614 | * 2、存储opus文件开始 | 642 | * 2、存储opus文件开始 |
@@ -860,8 +888,8 @@ T_JZsdkReturnCode Megaphone_Init() | @@ -860,8 +888,8 @@ T_JZsdkReturnCode Megaphone_Init() | ||
860 | //音频文件管理功能初始化 | 888 | //音频文件管理功能初始化 |
861 | Megaphone_AudioFile_Init(); | 889 | Megaphone_AudioFile_Init(); |
862 | 890 | ||
863 | - //opus列表初始化 | ||
864 | - Megaphone_OpusFile_Init(); | 891 | + //pcm列表初始化 |
892 | + Megaphone_PcmFile_Init(); | ||
865 | 893 | ||
866 | //设置音量 | 894 | //设置音量 |
867 | Megaphone_SetVolume(30, 0); | 895 | Megaphone_SetVolume(30, 0); |
@@ -1031,9 +1059,28 @@ T_JZsdkReturnCode Megaphone_PlayContinue() | @@ -1031,9 +1059,28 @@ T_JZsdkReturnCode Megaphone_PlayContinue() | ||
1031 | int ami =JZ_FLAGCODE_ON; | 1059 | int ami =JZ_FLAGCODE_ON; |
1032 | Megaphone_Amplifier_param(JZ_FLAGCODE_SET, &ami); | 1060 | Megaphone_Amplifier_param(JZ_FLAGCODE_SET, &ami); |
1033 | 1061 | ||
1034 | - AudioDeal_PauseAndContinuePlay(JZ_FLAGCODE_OFF); | ||
1035 | - | ||
1036 | - return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 1062 | + //查看播放状态是否不处于停止 |
1063 | + if (g_Megaphone_Play_Status == AUDIO_PLAY_STATUS_IDLE) | ||
1064 | + { | ||
1065 | + //播放当前音频 | ||
1066 | + unsigned char CurrentName[128]; | ||
1067 | + memset(CurrentName,0,sizeof(CurrentName)); | ||
1068 | + unsigned int CurrentNameLen = 0; | ||
1069 | + unsigned int CurrentNum = 0; | ||
1070 | + AudioMange_Get_FilePlayName(CurrentName, &CurrentNameLen, &CurrentNum); | ||
1071 | + UIcontrol_PlayAudioFile(NO_SPECIFIED ,CurrentName, CurrentNameLen); | ||
1072 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
1073 | + | ||
1074 | + } | ||
1075 | + else if (g_Megaphone_Play_Status == AUDIO_PLAY_STATUS_MUSIC) | ||
1076 | + { | ||
1077 | + AudioDeal_PauseAndContinuePlay(JZ_FLAGCODE_OFF); | ||
1078 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
1079 | + } | ||
1080 | + else | ||
1081 | + { | ||
1082 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
1083 | + } | ||
1037 | } | 1084 | } |
1038 | 1085 | ||
1039 | /*************** | 1086 | /*************** |
@@ -1053,9 +1100,12 @@ T_JZsdkReturnCode Megaphone_PlayPause() | @@ -1053,9 +1100,12 @@ T_JZsdkReturnCode Megaphone_PlayPause() | ||
1053 | //关闭功放 | 1100 | //关闭功放 |
1054 | int ami =JZ_FLAGCODE_OFF; | 1101 | int ami =JZ_FLAGCODE_OFF; |
1055 | Megaphone_Amplifier_param(JZ_FLAGCODE_SET, &ami); | 1102 | Megaphone_Amplifier_param(JZ_FLAGCODE_SET, &ami); |
1056 | - | ||
1057 | - AudioDeal_PauseAndContinuePlay(JZ_FLAGCODE_ON); | ||
1058 | - | 1103 | + |
1104 | + if (g_Megaphone_Play_Status == AUDIO_PLAY_STATUS_MUSIC) | ||
1105 | + { | ||
1106 | + AudioDeal_PauseAndContinuePlay(JZ_FLAGCODE_ON); | ||
1107 | + } | ||
1108 | + | ||
1059 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 1109 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
1060 | } | 1110 | } |
1061 | 1111 | ||
@@ -1096,6 +1146,12 @@ static T_JZsdkReturnCode Megaphone_ConvertPlayStatus(int status) | @@ -1096,6 +1146,12 @@ static T_JZsdkReturnCode Megaphone_ConvertPlayStatus(int status) | ||
1096 | return 0x40; | 1146 | return 0x40; |
1097 | } | 1147 | } |
1098 | 1148 | ||
1149 | + if (status == AUDIO_PLAY_STATUS_PCM_LIST) | ||
1150 | + { | ||
1151 | + return 0x50; | ||
1152 | + } | ||
1153 | + | ||
1154 | + | ||
1099 | if (status == AUDIO_PLAY_STATUS_IDLE) | 1155 | if (status == AUDIO_PLAY_STATUS_IDLE) |
1100 | { | 1156 | { |
1101 | return 0x00; | 1157 | return 0x00; |
@@ -44,7 +44,7 @@ typedef enum MegaphonePlayStatus | @@ -44,7 +44,7 @@ typedef enum MegaphonePlayStatus | ||
44 | AUDIO_PLAY_STATUS_OPUS_RECORD = 0x05, //opus录音 | 44 | AUDIO_PLAY_STATUS_OPUS_RECORD = 0x05, //opus录音 |
45 | AUDIO_PLAY_STATUS_MP3_REAL_TIME = 0x06, //mp3实时语音 | 45 | AUDIO_PLAY_STATUS_MP3_REAL_TIME = 0x06, //mp3实时语音 |
46 | AUDIO_PLAY_STATUS_MP3_RECORD = 0x07, //mp3录音喊话 | 46 | AUDIO_PLAY_STATUS_MP3_RECORD = 0x07, //mp3录音喊话 |
47 | - | 47 | + AUDIO_PLAY_STATUS_PCM_LIST =0x08, //pcm列表播放 |
48 | }MegaphonePlayStatus; | 48 | }MegaphonePlayStatus; |
49 | 49 | ||
50 | typedef enum MegaphoneTTSParam | 50 | typedef enum MegaphoneTTSParam |
@@ -128,6 +128,7 @@ T_JZsdkReturnCode Megaphone_SaveAudioFileTrans(char *SaveData, int size); | @@ -128,6 +128,7 @@ T_JZsdkReturnCode Megaphone_SaveAudioFileTrans(char *SaveData, int size); | ||
128 | T_JZsdkReturnCode Megaphone_Broadcast_OpusDecodeStatus(int status); | 128 | T_JZsdkReturnCode Megaphone_Broadcast_OpusDecodeStatus(int status); |
129 | T_JZsdkReturnCode Megaphone_SaveAudioFileStop(int checkFlag, unsigned char *CheckCode); | 129 | T_JZsdkReturnCode Megaphone_SaveAudioFileStop(int checkFlag, unsigned char *CheckCode); |
130 | T_JZsdkReturnCode Megaphone_Opus_PlayFixedFile(); | 130 | T_JZsdkReturnCode Megaphone_Opus_PlayFixedFile(); |
131 | +T_JZsdkReturnCode Megaphone_PlayPcmListFile(unsigned char *Filename,int len); | ||
131 | 132 | ||
132 | /******** | 133 | /******** |
133 | * | 134 | * |
@@ -8,81 +8,81 @@ | @@ -8,81 +8,81 @@ | ||
8 | #include "JZsdkLib.h" | 8 | #include "JZsdkLib.h" |
9 | #include "Megaphone/AudioMange/AudioMange.h" | 9 | #include "Megaphone/AudioMange/AudioMange.h" |
10 | 10 | ||
11 | -#define OPUS_DIR "/root/sdcard/opus" | 11 | +#define PCM_DIR "/root/sdcard/pcm" |
12 | 12 | ||
13 | -//创建一个opus节点 | ||
14 | -static struct AudioMange_Node *g_OpusList = NULL; | ||
15 | -static struct AudioMange_Node *g_OpusListtail = NULL; // 用于跟踪链表的尾部 | 13 | +//创建一个pcm节点 |
14 | +static struct AudioMange_Node *g_PcmList = NULL; | ||
15 | +static struct AudioMange_Node *g_PcmListtail = NULL; // 用于跟踪链表的尾部 | ||
16 | 16 | ||
17 | -static int g_OpusListNum = 0; //用于记录链表中的节点数量 | ||
18 | -static int g_OpusList_CurrentNum = 0; //用于记录链表中当前节点位置 | 17 | +static int g_PcmListNum = 0; //用于记录链表中的节点数量 |
18 | +static int g_PcmList_CurrentNum = 0; //用于记录链表中当前节点位置 | ||
19 | 19 | ||
20 | /***************** | 20 | /***************** |
21 | * | 21 | * |
22 | - * 获取opus文件列表的歌曲数 | 22 | + * 获取pcm文件列表的歌曲数 |
23 | * | 23 | * |
24 | * ************/ | 24 | * ************/ |
25 | -int OpusFile_GetListNum() | 25 | +int PcmFile_GetListNum() |
26 | { | 26 | { |
27 | - return g_OpusListNum; | 27 | + return g_PcmListNum; |
28 | } | 28 | } |
29 | 29 | ||
30 | /********* | 30 | /********* |
31 | * | 31 | * |
32 | - * opus文件链表注销 | 32 | + * pcm文件链表注销 |
33 | * | 33 | * |
34 | **********/ | 34 | **********/ |
35 | -static T_JZsdkReturnCode OpusFile_FreeAudioList() | 35 | +static T_JZsdkReturnCode PcmFile_FreeAudioList() |
36 | { | 36 | { |
37 | //清空尾部指针 | 37 | //清空尾部指针 |
38 | - g_OpusListtail = NULL; | 38 | + g_PcmListtail = NULL; |
39 | 39 | ||
40 | //清空歌曲数量 | 40 | //清空歌曲数量 |
41 | - g_OpusListNum = 0; //记录链表中一共有几首歌 | ||
42 | - g_OpusList_CurrentNum = 0; //记录播放当前第几首歌 | 41 | + g_PcmListNum = 0; //记录链表中一共有几首歌 |
42 | + g_PcmList_CurrentNum = 0; //记录播放当前第几首歌 | ||
43 | 43 | ||
44 | //释放掉整个链表 | 44 | //释放掉整个链表 |
45 | - Jzsdk_Free_AndioMange_Node(&g_OpusList); | 45 | + Jzsdk_Free_AndioMange_Node(&g_PcmList); |
46 | 46 | ||
47 | - g_OpusList = NULL; | 47 | + g_PcmList = NULL; |
48 | 48 | ||
49 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 49 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
50 | } | 50 | } |
51 | 51 | ||
52 | /********* | 52 | /********* |
53 | * | 53 | * |
54 | - * opus文件链表刷新 | 54 | + * pcm文件链表刷新 |
55 | * | 55 | * |
56 | **********/ | 56 | **********/ |
57 | -T_JZsdkReturnCode OpusFile_FlushList() | 57 | +T_JZsdkReturnCode PcmFile_FlushList() |
58 | { | 58 | { |
59 | //读取audio文件夹,并将歌曲名放入音频列表 | 59 | //读取audio文件夹,并将歌曲名放入音频列表 |
60 | DIR *dir; | 60 | DIR *dir; |
61 | struct dirent *entry; | 61 | struct dirent *entry; |
62 | struct stat fileStat; | 62 | struct stat fileStat; |
63 | 63 | ||
64 | - //创建一个临时opus节点 | ||
65 | - struct AudioMange_audio_struct OpusInfo; | 64 | + //创建一个临时pcm节点 |
65 | + struct AudioMange_audio_struct PcmInfo; | ||
66 | T_JZsdkReturnCode ret; | 66 | T_JZsdkReturnCode ret; |
67 | 67 | ||
68 | - //检查是否存在opus文件夹,没有则创建一个 | ||
69 | - if(JZsdk_check_directory_exists_posix(OPUS_DIR) != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | 68 | + //检查是否存在pcm文件夹,没有则创建一个 |
69 | + if(JZsdk_check_directory_exists_posix(PCM_DIR) != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
70 | { | 70 | { |
71 | - JZSDK_LOG_ERROR("不存在opus文件夹,创建一个"); | ||
72 | - JZsdk_Osal_Mkdir(OPUS_DIR); | 71 | + JZSDK_LOG_ERROR("不存在pcm文件夹,创建一个"); |
72 | + JZsdk_Osal_Mkdir(PCM_DIR); | ||
73 | } | 73 | } |
74 | 74 | ||
75 | //确定音频文件夹存在 | 75 | //确定音频文件夹存在 |
76 | - if ((dir = opendir(OPUS_DIR)) == NULL) | 76 | + if ((dir = opendir(PCM_DIR)) == NULL) |
77 | { | 77 | { |
78 | JZSDK_LOG_ERROR("音频文件夹获取失败"); | 78 | JZSDK_LOG_ERROR("音频文件夹获取失败"); |
79 | return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; | 79 | return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; |
80 | } | 80 | } |
81 | 81 | ||
82 | //查看歌曲存放链表是否有注册过 | 82 | //查看歌曲存放链表是否有注册过 |
83 | - if (g_OpusList != NULL) | 83 | + if (g_PcmList != NULL) |
84 | { | 84 | { |
85 | - OpusFile_FreeAudioList(); | 85 | + PcmFile_FreeAudioList(); |
86 | } | 86 | } |
87 | 87 | ||
88 | while ((entry = readdir(dir)) != NULL) | 88 | while ((entry = readdir(dir)) != NULL) |
@@ -109,44 +109,44 @@ T_JZsdkReturnCode OpusFile_FlushList() | @@ -109,44 +109,44 @@ T_JZsdkReturnCode OpusFile_FlushList() | ||
109 | //printf("获取到%s\n",filename); | 109 | //printf("获取到%s\n",filename); |
110 | 110 | ||
111 | // 检查后缀 | 111 | // 检查后缀 |
112 | - if (JZsdk_strings_suffix_comparison_withLen((const unsigned char *)filename, len, (const unsigned char *)".opus") == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS | ||
113 | - || JZsdk_strings_suffix_comparison_withLen((const unsigned char *)filename, len, (const unsigned char *)".OPUS") == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS | 112 | + if (JZsdk_strings_suffix_comparison_withLen((const unsigned char *)filename, len, (const unsigned char *)".pcm") == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS |
113 | + || JZsdk_strings_suffix_comparison_withLen((const unsigned char *)filename, len, (const unsigned char *)".PCM") == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS | ||
114 | ) | 114 | ) |
115 | { | 115 | { |
116 | // 处理文件 | 116 | // 处理文件 |
117 | - memset(&OpusInfo, 0, sizeof(OpusInfo)); // 清除audioInfo结构 | 117 | + memset(&PcmInfo, 0, sizeof(PcmInfo)); // 清除audioInfo结构 |
118 | 118 | ||
119 | //写入文件名 | 119 | //写入文件名 |
120 | - strncpy(OpusInfo.FileName, entry->d_name, JZSDK_FILE_NAME_SIZE_MAX); | 120 | + strncpy(PcmInfo.FileName, entry->d_name, JZSDK_FILE_NAME_SIZE_MAX); |
121 | 121 | ||
122 | unsigned char fileDir [256]; | 122 | unsigned char fileDir [256]; |
123 | - snprintf(fileDir, sizeof(fileDir), "/root/sdcard/opus/%s", filename); | 123 | + snprintf(fileDir, sizeof(fileDir), "%s/%s",PCM_DIR, filename); |
124 | 124 | ||
125 | //写入文件大小 | 125 | //写入文件大小 |
126 | - JZsdk_Fs_ReadFileSize(fileDir, &(OpusInfo.FileSize)); | 126 | + JZsdk_Fs_ReadFileSize(fileDir, &(PcmInfo.FileSize)); |
127 | 127 | ||
128 | //根据文件大小写入时长信息 | 128 | //根据文件大小写入时长信息 |
129 | - //int temp_time = (OpusInfo.FileSize * 8) / (16000 * 16 * 1); #这条是pcm算时长,超准确 | ||
130 | - int temp_time = (OpusInfo.FileSize * 8) / (16000); | ||
131 | - OpusInfo.Time = temp_time; | 129 | + int temp_time = (PcmInfo.FileSize * 8) / (16000 * 16 * 1); //这条是pcm算时长,超准确 |
130 | + //int temp_time = (PcmInfo.FileSize * 8) / (16000); //这条是opus算时长,超准确 | ||
131 | + PcmInfo.Time = temp_time; | ||
132 | 132 | ||
133 | //写入文件名长度 | 133 | //写入文件名长度 |
134 | - OpusInfo.FileNameLen = len; | 134 | + PcmInfo.FileNameLen = len; |
135 | 135 | ||
136 | // 创建新节点 | 136 | // 创建新节点 |
137 | struct AudioMange_Node *newNode = NULL; | 137 | struct AudioMange_Node *newNode = NULL; |
138 | - ret = Jzsdk_Create_AndioMange_Node(&newNode, OpusInfo); | 138 | + ret = Jzsdk_Create_AndioMange_Node(&newNode, PcmInfo) ; |
139 | if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | 139 | if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) |
140 | { | 140 | { |
141 | - JZSDK_LOG_ERROR("存放音乐 %s 失败", entry->d_name); | 141 | + JZSDK_LOG_ERROR("存放pcm节点 %s 失败", entry->d_name); |
142 | continue; | 142 | continue; |
143 | } | 143 | } |
144 | 144 | ||
145 | // 将新节点添加到链表末尾 | 145 | // 将新节点添加到链表末尾 |
146 | - Jzsdk_AddAudioNodeToCircularList(&g_OpusList, &g_OpusListtail, &newNode); | 146 | + Jzsdk_AddAudioNodeToCircularList(&g_PcmList, &g_PcmListtail, &newNode); |
147 | 147 | ||
148 | // 歌曲计数+1 | 148 | // 歌曲计数+1 |
149 | - g_OpusListNum++; | 149 | + g_PcmListNum++; |
150 | } | 150 | } |
151 | } | 151 | } |
152 | } | 152 | } |
@@ -154,12 +154,12 @@ T_JZsdkReturnCode OpusFile_FlushList() | @@ -154,12 +154,12 @@ T_JZsdkReturnCode OpusFile_FlushList() | ||
154 | closedir(dir); | 154 | closedir(dir); |
155 | 155 | ||
156 | //设置默认播放歌曲 | 156 | //设置默认播放歌曲 |
157 | - g_OpusList_CurrentNum = 0; | 157 | + g_PcmList_CurrentNum = 0; |
158 | 158 | ||
159 | //打印一遍已加载的音乐 | 159 | //打印一遍已加载的音乐 |
160 | - JZsdk_PrintfAuidoNode_AudioList(g_OpusList); | 160 | + JZsdk_PrintfAuidoNode_AudioList(g_PcmList); |
161 | 161 | ||
162 | - JZSDK_LOG_INFO("刷新opus列表已完成"); | 162 | + JZSDK_LOG_INFO("刷新pcm列表已完成"); |
163 | 163 | ||
164 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 164 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
165 | } | 165 | } |
@@ -172,27 +172,27 @@ T_JZsdkReturnCode OpusFile_FlushList() | @@ -172,27 +172,27 @@ T_JZsdkReturnCode OpusFile_FlushList() | ||
172 | * | 172 | * |
173 | * | 173 | * |
174 | * *********************************/ | 174 | * *********************************/ |
175 | -T_JZsdkReturnCode Megaphone_OpusFile_GetAudioNameByIndex(int index, unsigned char *name, int *name_len) | 175 | +T_JZsdkReturnCode Megaphone_PcmFile_GetAudioNameByIndex(int index, unsigned char *name, int *name_len) |
176 | { | 176 | { |
177 | T_JZsdkReturnCode ret ; | 177 | T_JZsdkReturnCode ret ; |
178 | 178 | ||
179 | //判断歌曲列表是否有歌 | 179 | //判断歌曲列表是否有歌 |
180 | - if (g_OpusListNum == 0) | 180 | + if (g_PcmListNum == 0) |
181 | { | 181 | { |
182 | - JZSDK_LOG_INFO("opus列表中没有歌"); | 182 | + JZSDK_LOG_INFO("pcm列表中没有歌"); |
183 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 183 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
184 | } | 184 | } |
185 | 185 | ||
186 | //判断序号是否在数量内 | 186 | //判断序号是否在数量内 |
187 | - if (index > g_OpusListNum) | 187 | + if (index > g_PcmListNum) |
188 | { | 188 | { |
189 | - JZSDK_LOG_INFO("opus列表中没有第%d首歌",index); | 189 | + JZSDK_LOG_INFO("pcm列表中没有第%d首歌",index); |
190 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 190 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
191 | } | 191 | } |
192 | 192 | ||
193 | //根据当前的索引值,获取当前的歌曲节点 | 193 | //根据当前的索引值,获取当前的歌曲节点 |
194 | struct AudioMange_Node *Current = NULL; | 194 | struct AudioMange_Node *Current = NULL; |
195 | - ret = getAudioMange_NodeAtIndex(g_OpusList, &Current, index); | 195 | + ret = getAudioMange_NodeAtIndex(g_PcmList, &Current, index); |
196 | if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | 196 | if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) |
197 | { | 197 | { |
198 | return ret; | 198 | return ret; |
@@ -209,15 +209,39 @@ T_JZsdkReturnCode Megaphone_OpusFile_GetAudioNameByIndex(int index, unsigned cha | @@ -209,15 +209,39 @@ T_JZsdkReturnCode Megaphone_OpusFile_GetAudioNameByIndex(int index, unsigned cha | ||
209 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 209 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
210 | } | 210 | } |
211 | 211 | ||
212 | +/*********** | ||
213 | + * | ||
214 | + * 查询pcm是否存在于列表 | ||
215 | + * | ||
216 | + * **********/ | ||
217 | +T_JZsdkReturnCode Megaphone_PcmFile_IsExistInList(unsigned char *str, unsigned int str_len) | ||
218 | +{ | ||
219 | + T_JZsdkReturnCode ret; | ||
220 | + | ||
221 | + //1、查询该名字是否存在于音乐列表中 | ||
222 | + struct AudioMange_audio_struct songToFind; | ||
223 | + memset(&songToFind, 0, sizeof(struct AudioMange_audio_struct)); | ||
224 | + | ||
225 | + memset(songToFind.FileName, 0 ,sizeof(songToFind.FileName)); | ||
226 | + memcpy(songToFind.FileName, str, str_len); | ||
212 | 227 | ||
228 | + ret = JZsdk_isSongInAudioList(g_PcmList, songToFind); | ||
229 | + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
230 | + { | ||
231 | + JZSDK_LOG_ERROR("播放文件不存在于pcm列表 %s", songToFind.FileName); | ||
232 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
233 | + } | ||
234 | + | ||
235 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
236 | +} | ||
213 | 237 | ||
214 | /***************** | 238 | /***************** |
215 | * | 239 | * |
216 | - * 查询opus信息 | 240 | + * 查询pcm信息 |
217 | * | 241 | * |
218 | * | 242 | * |
219 | * **************/ | 243 | * **************/ |
220 | -T_JZsdkReturnCode OpusFile_GetAudioInfo(unsigned char *str, unsigned int str_len, struct AudioMange_audio_struct *songToFind) | 244 | +T_JZsdkReturnCode PcmFile_GetAudioInfo(unsigned char *str, unsigned int str_len, struct AudioMange_audio_struct *songToFind) |
221 | { | 245 | { |
222 | T_JZsdkReturnCode ret; | 246 | T_JZsdkReturnCode ret; |
223 | 247 | ||
@@ -225,29 +249,29 @@ T_JZsdkReturnCode OpusFile_GetAudioInfo(unsigned char *str, unsigned int str_len | @@ -225,29 +249,29 @@ T_JZsdkReturnCode OpusFile_GetAudioInfo(unsigned char *str, unsigned int str_len | ||
225 | memset(songToFind->FileName, 0 ,sizeof(songToFind->FileName)); | 249 | memset(songToFind->FileName, 0 ,sizeof(songToFind->FileName)); |
226 | memcpy(songToFind->FileName, str, str_len); | 250 | memcpy(songToFind->FileName, str, str_len); |
227 | 251 | ||
228 | - ret = JZsdk_isSongInAudioList(g_OpusList, (*songToFind)); | 252 | + ret = JZsdk_isSongInAudioList(g_PcmList, (*songToFind)); |
229 | if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | 253 | if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) |
230 | { | 254 | { |
231 | - JZSDK_LOG_ERROR("播放文件不存在于opus列表 %s", songToFind->FileName); | 255 | + JZSDK_LOG_ERROR("播放文件不存在于pcm列表 %s", songToFind->FileName); |
232 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 256 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
233 | } | 257 | } |
234 | 258 | ||
235 | //2、获取歌曲信息 | 259 | //2、获取歌曲信息 |
236 | - JZsdk_GetSongInDudioList_AudioInfo(g_OpusList, songToFind); | 260 | + JZsdk_GetSongInDudioList_AudioInfo(g_PcmList, songToFind); |
237 | 261 | ||
238 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 262 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
239 | } | 263 | } |
240 | 264 | ||
241 | /********* | 265 | /********* |
242 | * | 266 | * |
243 | - * opus文件初始化 | 267 | + * pcm文件初始化 |
244 | * | 268 | * |
245 | **********/ | 269 | **********/ |
246 | -T_JZsdkReturnCode Megaphone_OpusFile_Init() | 270 | +T_JZsdkReturnCode Megaphone_PcmFile_Init() |
247 | { | 271 | { |
248 | - //刷新opus列表(用于加载新的opus文件) | ||
249 | - OpusFile_FlushList(); | 272 | + //刷新pcm列表(用于加载新的pcm文件) |
273 | + PcmFile_FlushList(); | ||
250 | 274 | ||
251 | - JZSDK_LOG_DEBUG("opusFile Init Complete"); | 275 | + JZSDK_LOG_DEBUG("pcmFile Init Complete"); |
252 | } | 276 | } |
253 | 277 |
Module/Megaphone/PcmAudio/PcmAudioFile.h
0 → 100644
1 | +/** | ||
2 | + ******************************************************************** | ||
3 | + * @file OpusFile.h | ||
4 | + * OpusFile.c OpusFileSave.c 的头文件 | ||
5 | + * | ||
6 | + ********************************************************************* | ||
7 | + */ | ||
8 | + | ||
9 | +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/ | ||
10 | +#ifndef OPUS_FILE_H | ||
11 | +#define OPUS_FILE_H | ||
12 | + | ||
13 | +/* Includes ------------------------------------------------------------------*/ | ||
14 | +#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" | ||
15 | +#include "Megaphone/AudioMange/AudioMange_Param.h" | ||
16 | + | ||
17 | +#ifdef __cplusplus | ||
18 | +extern "C" { | ||
19 | +#endif | ||
20 | + | ||
21 | +/* Exported constants --------------------------------------------------------*/ | ||
22 | +/* 常亮定义*/ | ||
23 | + | ||
24 | +/* Exported types ------------------------------------------------------------*/ | ||
25 | + | ||
26 | +/* Exported functions --------------------------------------------------------*/ | ||
27 | +int PcmFile_GetListNum(); | ||
28 | + | ||
29 | +T_JZsdkReturnCode PcmFile_FlushList(); | ||
30 | +T_JZsdkReturnCode Megaphone_PcmFile_GetAudioNameByIndex(int index, unsigned char *name, int *name_len); | ||
31 | +T_JZsdkReturnCode Megaphone_PcmFile_IsExistInList(unsigned char *str, unsigned int str_len); | ||
32 | +T_JZsdkReturnCode PcmFile_GetAudioInfo(unsigned char *str, unsigned int str_len, struct AudioMange_audio_struct *songToFind); | ||
33 | +T_JZsdkReturnCode Megaphone_PcmFile_Init(); | ||
34 | + | ||
35 | +T_JZsdkReturnCode PcmAudioPlay_Play(unsigned char *str, unsigned int str_len); | ||
36 | + | ||
37 | + | ||
38 | +#ifdef __cplusplus | ||
39 | +} | ||
40 | +#endif | ||
41 | + | ||
42 | +#endif |
Module/Megaphone/PcmAudio/PcmAudioPlay.c
0 → 100644
1 | +#include <stdio.h> | ||
2 | +#include <stdlib.h> | ||
3 | +#include <string.h> | ||
4 | +#include <pthread.h> | ||
5 | +#include <dirent.h> | ||
6 | +#include <sys/stat.h> | ||
7 | + | ||
8 | +#include "JZsdkLib.h" | ||
9 | +#include "Megaphone/PcmAudio/PcmAudioFile.h" | ||
10 | +#include "Megaphone/Megaphone.h" | ||
11 | + | ||
12 | +#define PCM_DIR "/root/sdcard/pcm" | ||
13 | +static int g_opus_sampleRate = 16000; //解码采样率 | ||
14 | + | ||
15 | +typedef struct t_PcmParam{ | ||
16 | + unsigned char *FileName; | ||
17 | + unsigned int FileSize; | ||
18 | +}t_PcmParam; | ||
19 | + | ||
20 | +static T_JZTaskHandle g_pcmplay_task = NULL; | ||
21 | + | ||
22 | +static T_JZsdkReturnCode PcmPlay_Interface(t_PcmParam *PcmParam) | ||
23 | +{ | ||
24 | + unsigned int nbBytes; | ||
25 | + uint8_t cbits[3 * 1276]; | ||
26 | + int timeNum = 0; | ||
27 | + int loop = JZ_FLAGCODE_OFF; | ||
28 | + int loop_interval; | ||
29 | + double total_duration = 0; | ||
30 | + int last_printed_second = -1; // 上次打印的秒数,初始化为-1表示还没有打印过 | ||
31 | + | ||
32 | + FILE *Pcm_fp = fopen("%s/%s", "rb", PCM_DIR, PcmParam->FileName); | ||
33 | + if (Pcm_fp == NULL) | ||
34 | + { | ||
35 | + JZSDK_LOG_ERROR("PcmPlay_Interface: fopen failed, file name = %s", PcmParam->FileName); | ||
36 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
37 | + } | ||
38 | + | ||
39 | + while (Megaphone_MegDataGenFlag(JZ_FLAGCODE_GET, 0) == JZ_FLAGCODE_ON) | ||
40 | + { | ||
41 | + nbBytes = fread(cbits, 1, 3 * 1276, Pcm_fp); | ||
42 | + if(nbBytes > 0) | ||
43 | + { | ||
44 | + AudioDeal_PcmDataInput(g_opus_sampleRate, (unsigned char *)cbits, nbBytes); | ||
45 | + } | ||
46 | + | ||
47 | + int totalSamples = nbBytes / (2); | ||
48 | + | ||
49 | + // 计算当前帧的持续时间(秒) | ||
50 | + double frame_duration = (double)totalSamples / g_opus_sampleRate; | ||
51 | + total_duration += frame_duration; | ||
52 | + | ||
53 | + int current_second = (int)floor(total_duration); // 获取当前总时间的整数秒部分 | ||
54 | + if (current_second > last_printed_second) | ||
55 | + { | ||
56 | + printf("nb:%d rate:%d duration:%f total_duration:%f\n", totalSamples, g_opus_sampleRate, frame_duration, current_second); | ||
57 | + | ||
58 | + //回传播放时间 | ||
59 | + Megaphone_PlayBackTime(current_second); | ||
60 | + | ||
61 | + last_printed_second = current_second; // 更新上次打印的秒数 | ||
62 | + } | ||
63 | + | ||
64 | + if (feof(Pcm_fp)) | ||
65 | + { | ||
66 | + total_duration = 0; | ||
67 | + last_printed_second = -1; | ||
68 | + | ||
69 | + //如果循环播放没打开 | ||
70 | + Megaphone_param(JZ_FLAGCODE_GET, MEGAPHONE_LOOP, &loop); | ||
71 | + Megaphone_param(JZ_FLAGCODE_GET, MEGAPHONE_LOOP_INTERVAL, &loop_interval); | ||
72 | + | ||
73 | + if (loop == JZ_FLAGCODE_OFF) | ||
74 | + { | ||
75 | + timeNum = 0; | ||
76 | + | ||
77 | + // //播放结束延迟 | ||
78 | + // while ((timeNum <=3000) && (Megaphone_MegDataGenFlag(JZ_FLAGCODE_GET, 0) == JZ_FLAGCODE_ON)) | ||
79 | + // { | ||
80 | + // delayMs(10); | ||
81 | + // timeNum +=10; | ||
82 | + // } | ||
83 | + | ||
84 | + break; | ||
85 | + } | ||
86 | + //如果循环播放打开 | ||
87 | + else if (loop == JZ_FLAGCODE_ON) | ||
88 | + { | ||
89 | + timeNum = 0; | ||
90 | + JZSDK_LOG_INFO("循环播放pcm"); | ||
91 | + | ||
92 | + // //播放结束延迟 | ||
93 | + // while ((loop == 1) && (Megaphone_MegDataGenFlag(JZ_FLAGCODE_GET, 0) == JZ_FLAGCODE_ON)) | ||
94 | + // { | ||
95 | + // delayMs(10); | ||
96 | + // timeNum +=10; | ||
97 | + // } | ||
98 | + | ||
99 | + //重置文件光标 继续播放 | ||
100 | + fseek(Pcm_fp, 0, SEEK_SET); | ||
101 | + | ||
102 | + //循环播放延时 | ||
103 | + while (loop_interval > 0 && (loop == JZ_FLAGCODE_ON) && (Megaphone_MegDataGenFlag(JZ_FLAGCODE_GET, 0) == JZ_FLAGCODE_ON)) | ||
104 | + { | ||
105 | + delayMs(50); | ||
106 | + loop_interval -= 50; | ||
107 | + } | ||
108 | + | ||
109 | + continue; | ||
110 | + } | ||
111 | + } | ||
112 | + } | ||
113 | + | ||
114 | + fclose(Pcm_fp); | ||
115 | + | ||
116 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
117 | +} | ||
118 | + | ||
119 | +/* | ||
120 | +* | ||
121 | +* 播放固定位置pcm线程 | ||
122 | +* | ||
123 | +*/ | ||
124 | +static void *Pcm_Play_task(void *arg) | ||
125 | +{ | ||
126 | + Megaphone_MegDataGenFlag(JZ_FLAGCODE_SET, JZ_FLAGCODE_ON); | ||
127 | + Megaphone_MegDataGenFinshFlag(JZ_FLAGCODE_SET, JZ_FLAGCODE_ON); | ||
128 | + | ||
129 | + //广播开始 | ||
130 | + Megaphone_status_Broadcast(AUDIO_PLAY_STATUS_PCM_LIST); | ||
131 | + | ||
132 | + int amplifier = JZ_FLAGCODE_ON; | ||
133 | + Megaphone_Amplifier_param(JZ_FLAGCODE_SET, &lifier); | ||
134 | + | ||
135 | + t_PcmParam *PcmParam = (t_PcmParam *)arg; | ||
136 | + PcmPlay_Interface(PcmParam); | ||
137 | + | ||
138 | + amplifier = JZ_FLAGCODE_OFF; | ||
139 | + Megaphone_Amplifier_param(JZ_FLAGCODE_SET, &lifier); | ||
140 | + | ||
141 | + Megaphone_MegDataGenFlag(JZ_FLAGCODE_SET, JZ_FLAGCODE_OFF); | ||
142 | + Megaphone_MegDataGenFinshFlag(JZ_FLAGCODE_SET, JZ_FLAGCODE_OFF); | ||
143 | + | ||
144 | + //广播关闭 | ||
145 | + Megaphone_status_Broadcast(JZ_FLAGCODE_OFF); | ||
146 | +} | ||
147 | + | ||
148 | + | ||
149 | +T_JZsdkReturnCode PcmAudioPlay_Play(unsigned char *str, unsigned int str_len) | ||
150 | +{ | ||
151 | + T_JZsdkOsalHandler *OsalHandler = JZsdk_Platform_GetOsalHandler(); | ||
152 | + | ||
153 | + T_JZsdkReturnCode ret; | ||
154 | + | ||
155 | + ret = Megaphone_PcmFile_IsExistInList(str, str_len); | ||
156 | + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
157 | + { | ||
158 | + JZSDK_LOG_ERROR("PcmAudioPlay_Play: Megaphone_PcmFile_IsExistInList failed, ret = %d", ret); | ||
159 | + return ret; | ||
160 | + } | ||
161 | + | ||
162 | + t_PcmParam *PcmParam = (t_PcmParam *)malloc(sizeof(t_PcmParam)); | ||
163 | + PcmParam->FileName = str; | ||
164 | + PcmParam->FileSize = str_len; | ||
165 | + | ||
166 | + //播放 | ||
167 | + OsalHandler->TaskCreate("PiayPcmFile", Pcm_Play_task, 8192, PcmParam, &g_pcmplay_task); | ||
168 | + | ||
169 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
170 | +} |
@@ -24,17 +24,10 @@ extern "C" { | @@ -24,17 +24,10 @@ extern "C" { | ||
24 | /* Exported types ------------------------------------------------------------*/ | 24 | /* Exported types ------------------------------------------------------------*/ |
25 | 25 | ||
26 | /* Exported functions --------------------------------------------------------*/ | 26 | /* Exported functions --------------------------------------------------------*/ |
27 | -int OpusFile_GetListNum(); | ||
28 | -T_JZsdkReturnCode Megaphone_OpusFile_GetAudioNameByIndex(int index, unsigned char *name, int *name_len); | ||
29 | -T_JZsdkReturnCode OpusFile_GetAudioInfo(unsigned char *str, unsigned int str_len, struct AudioMange_audio_struct *songToFind); | ||
30 | - | ||
31 | - | ||
32 | - | ||
33 | -T_JZsdkReturnCode Megaphone_OpusFile_Init(); | ||
34 | -T_JZsdkReturnCode OpusFile_FlushList(); | ||
35 | -T_JZsdkReturnCode OpusFile_DecodeOpus(unsigned char *opusFile); | ||
36 | -T_JZsdkReturnCode OpusFile_PlayFixedFile(); | ||
37 | int OpusFile_GetSaveFlag(void); | 27 | int OpusFile_GetSaveFlag(void); |
28 | +T_JZsdkReturnCode OpusFile_PlayFixedFile(); | ||
29 | +T_JZsdkReturnCode OpusFile_DecodeOpus(unsigned char *opusFile); | ||
30 | +T_JZsdkReturnCode OpusFile_DecodeOpusAndSave(int SaveMode, unsigned char *InFile,unsigned char *OutFile); | ||
38 | 31 | ||
39 | T_JZsdkReturnCode OpusFile_SetDecodeBitrate(int bitrate); | 32 | T_JZsdkReturnCode OpusFile_SetDecodeBitrate(int bitrate); |
40 | T_JZsdkReturnCode OpusFile_SetDecodeChannels(int channels); | 33 | T_JZsdkReturnCode OpusFile_SetDecodeChannels(int channels); |
@@ -6,6 +6,7 @@ | @@ -6,6 +6,7 @@ | ||
6 | #include "BaseConfig.h" | 6 | #include "BaseConfig.h" |
7 | 7 | ||
8 | #include "AudioDeal/AudioDeal.h" | 8 | #include "AudioDeal/AudioDeal.h" |
9 | +#include "Megaphone/PcmAudio/PcmAudioFile.h" | ||
9 | 10 | ||
10 | #include "opus.h" | 11 | #include "opus.h" |
11 | 12 | ||
@@ -13,6 +14,7 @@ | @@ -13,6 +14,7 @@ | ||
13 | #define OPUS_CHANNELS (1) | 14 | #define OPUS_CHANNELS (1) |
14 | #define OPUS_MAX_PACKET_SIZE (3 * 1276) | 15 | #define OPUS_MAX_PACKET_SIZE (3 * 1276) |
15 | 16 | ||
17 | +#define PCM_SAVE_FILE_NAME "/root/save.pcm" //用于保存的pcm | ||
16 | #define PCM_PLAY_FILE_NAME "/root/test_audio.pcm" //用于播放的pcm | 18 | #define PCM_PLAY_FILE_NAME "/root/test_audio.pcm" //用于播放的pcm |
17 | 19 | ||
18 | static int g_opus_decodeBitrate = 16000; //解码码率 | 20 | static int g_opus_decodeBitrate = 16000; //解码码率 |
@@ -24,6 +26,14 @@ static int g_Opus_decode_Flag = JZ_FLAGCODE_OFF; //opus的解码标志位 | @@ -24,6 +26,14 @@ static int g_Opus_decode_Flag = JZ_FLAGCODE_OFF; //opus的解码标志位 | ||
24 | static T_JZTaskHandle g_DecodeOpus_task = NULL; | 26 | static T_JZTaskHandle g_DecodeOpus_task = NULL; |
25 | static T_JZTaskHandle g_OpusPlay_task = NULL; | 27 | static T_JZTaskHandle g_OpusPlay_task = NULL; |
26 | 28 | ||
29 | +typedef struct OpusDecodeFile | ||
30 | +{ | ||
31 | + unsigned char inputFilePath[JZSDK_FILE_PATH_SIZE_MAX]; | ||
32 | + unsigned char outputFilePath[JZSDK_FILE_PATH_SIZE_MAX]; | ||
33 | + int saveMode; | ||
34 | +}OpusDecodeFile; | ||
35 | + | ||
36 | + | ||
27 | T_JZsdkReturnCode OpusFile_SetDecodeBitrate(int bitrate) | 37 | T_JZsdkReturnCode OpusFile_SetDecodeBitrate(int bitrate) |
28 | { | 38 | { |
29 | g_opus_decodeBitrate = bitrate; | 39 | g_opus_decodeBitrate = bitrate; |
@@ -208,27 +218,6 @@ T_JZsdkReturnCode OpusFile_PlayFixedFile() | @@ -208,27 +218,6 @@ T_JZsdkReturnCode OpusFile_PlayFixedFile() | ||
208 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 218 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
209 | } | 219 | } |
210 | 220 | ||
211 | - | ||
212 | -/******************************* | ||
213 | -* | ||
214 | -* 播放opus列表的音乐 | ||
215 | -* 旧接口,无需定位传入的位置 | ||
216 | -* | ||
217 | -************************************/ | ||
218 | -T_JZsdkReturnCode OpusFile_PlayListFile(unsigned char *OpusFile) | ||
219 | -{ | ||
220 | - T_JZsdkOsalHandler *OsalHandler = JZsdk_Platform_GetOsalHandler(); | ||
221 | - | ||
222 | - //检测歌曲是否在列表中 | ||
223 | - | ||
224 | - | ||
225 | - //OsalHandler->TaskCreate("PiayFilexdFile", PlayFixedFile_task, 8192, NULL, &g_DecodeOpus_task); | ||
226 | - | ||
227 | - return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
228 | -} | ||
229 | - | ||
230 | - | ||
231 | - | ||
232 | /*************************************************************************************************************/ | 221 | /*************************************************************************************************************/ |
233 | 222 | ||
234 | /* | 223 | /* |
@@ -237,7 +226,7 @@ T_JZsdkReturnCode OpusFile_PlayListFile(unsigned char *OpusFile) | @@ -237,7 +226,7 @@ T_JZsdkReturnCode OpusFile_PlayListFile(unsigned char *OpusFile) | ||
237 | 226 | ||
238 | 227 | ||
239 | */ | 228 | */ |
240 | -static T_JZsdkReturnCode OpusDecodeFun(unsigned char *OpusFile) | 229 | +static T_JZsdkReturnCode OpusDecodeFun(unsigned char *OpusFile, unsigned char *SaveFile) |
241 | { | 230 | { |
242 | FILE *fin = NULL; | 231 | FILE *fin = NULL; |
243 | FILE *fout = NULL; | 232 | FILE *fout = NULL; |
@@ -273,7 +262,7 @@ static T_JZsdkReturnCode OpusDecodeFun(unsigned char *OpusFile) | @@ -273,7 +262,7 @@ static T_JZsdkReturnCode OpusDecodeFun(unsigned char *OpusFile) | ||
273 | } | 262 | } |
274 | 263 | ||
275 | //创建一个opus输出文件 | 264 | //创建一个opus输出文件 |
276 | - fout = fopen(PCM_PLAY_FILE_NAME, "w"); | 265 | + fout = fopen(SaveFile, "w"); |
277 | if (fout == NULL) { | 266 | if (fout == NULL) { |
278 | JZSDK_LOG_ERROR("创建opus输出文件失败"); | 267 | JZSDK_LOG_ERROR("创建opus输出文件失败"); |
279 | goto DecodeFinsh; | 268 | goto DecodeFinsh; |
@@ -372,7 +361,7 @@ static void *DecodeOpus_task(void *arg) | @@ -372,7 +361,7 @@ static void *DecodeOpus_task(void *arg) | ||
372 | { | 361 | { |
373 | unsigned char *opusFile = (unsigned char *)arg; | 362 | unsigned char *opusFile = (unsigned char *)arg; |
374 | 363 | ||
375 | - T_JZsdkReturnCode ret = OpusDecodeFun(opusFile); | 364 | + T_JZsdkReturnCode ret = OpusDecodeFun(opusFile, PCM_PLAY_FILE_NAME); |
376 | if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | 365 | if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) |
377 | { | 366 | { |
378 | //广播解码失败 | 367 | //广播解码失败 |
@@ -431,4 +420,77 @@ T_JZsdkReturnCode OpusFile_DecodeOpus(unsigned char *opusFile) | @@ -431,4 +420,77 @@ T_JZsdkReturnCode OpusFile_DecodeOpus(unsigned char *opusFile) | ||
431 | OsalHandler->TaskCreate("DecodeOpus", DecodeOpus_task, 8192, (void *)DecodeFile, &g_DecodeOpus_task); | 420 | OsalHandler->TaskCreate("DecodeOpus", DecodeOpus_task, 8192, (void *)DecodeFile, &g_DecodeOpus_task); |
432 | 421 | ||
433 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 422 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
423 | +} | ||
424 | + | ||
425 | + | ||
426 | + | ||
427 | +/******************* | ||
428 | +* | ||
429 | +* opus解码线程 | ||
430 | +* | ||
431 | +*******************/ | ||
432 | +static void *DecodeOpus_task1(void *arg) | ||
433 | +{ | ||
434 | + | ||
435 | + OpusDecodeFile *opusDecodeInfo = (OpusDecodeFile *)arg; | ||
436 | + | ||
437 | + | ||
438 | + T_JZsdkReturnCode ret = OpusDecodeFun(opusDecodeInfo->inputFilePath, PCM_SAVE_FILE_NAME); | ||
439 | + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
440 | + { | ||
441 | + //广播解码失败 | ||
442 | + Megaphone_Broadcast_OpusDecodeStatus(1); | ||
443 | + } | ||
444 | + else | ||
445 | + { | ||
446 | + Megaphone_Broadcast_OpusDecodeStatus(0); | ||
447 | + } | ||
448 | + | ||
449 | + //如果存在存储情况 | ||
450 | + if (opusDecodeInfo->saveMode == 0x01) | ||
451 | + { | ||
452 | + //将解码得到的pcm文件存到指定路径 | ||
453 | + JZsdk_Osal_Rename(PCM_SAVE_FILE_NAME, opusDecodeInfo->outputFilePath); | ||
454 | + | ||
455 | + //刷新pcm文件列表 | ||
456 | + PcmFile_FlushList(); | ||
457 | + } | ||
458 | + | ||
459 | + free(opusDecodeInfo); | ||
460 | +} | ||
461 | + | ||
462 | + | ||
463 | +T_JZsdkReturnCode OpusFile_DecodeOpusAndSave(int SaveMode, unsigned char *InFile,unsigned char *OutFile) | ||
464 | +{ | ||
465 | + T_JZsdkOsalHandler *OsalHandler = JZsdk_Platform_GetOsalHandler(); | ||
466 | + | ||
467 | + T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
468 | + | ||
469 | + int i = 0; | ||
470 | + while (i<=4 && g_Opus_decode_Flag == JZ_FLAGCODE_ON) | ||
471 | + { | ||
472 | + i++; | ||
473 | + delayMs(50); | ||
474 | + } | ||
475 | + if(i == 4) | ||
476 | + { | ||
477 | + JZSDK_LOG_ERROR("超时,上一次opus仍在解码,无法开始新的解码"); | ||
478 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
479 | + } | ||
480 | + | ||
481 | + OpusDecodeFile *OpusDecodeFileInfo = (OpusDecodeFile *)OsalHandler->Malloc(sizeof(OpusDecodeFile)); | ||
482 | + if(OpusDecodeFileInfo == NULL) | ||
483 | + { | ||
484 | + JZSDK_LOG_ERROR("OpusDecodeFileInfo malloc failed"); | ||
485 | + return JZ_ERROR_SYSTEM_MODULE_CODE_MEMORY_ALLOC_FAILED; | ||
486 | + } | ||
487 | + | ||
488 | + memset(OpusDecodeFileInfo, sizeof(OpusDecodeFile), 0); | ||
489 | + OpusDecodeFileInfo->saveMode = SaveMode; | ||
490 | + memcpy(OpusDecodeFileInfo->inputFilePath, InFile, strlen(InFile)); | ||
491 | + memcpy(OpusDecodeFileInfo->outputFilePath, OutFile, strlen(OutFile)); | ||
492 | + | ||
493 | + OsalHandler->TaskCreate("DecodeOpus", DecodeOpus_task1, 8192, (void *)OpusDecodeFileInfo, &g_DecodeOpus_task); | ||
494 | + | ||
495 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
434 | } | 496 | } |
@@ -9,7 +9,6 @@ static int g_OpusFile_SaveFlag = JZ_FLAGCODE_OFF; //opus存储标志位 | @@ -9,7 +9,6 @@ static int g_OpusFile_SaveFlag = JZ_FLAGCODE_OFF; //opus存储标志位 | ||
9 | static int g_OpusSaveMode = JZ_FLAGCODE_OFF; //opus存储模式 off:不存储 on:存储 | 9 | static int g_OpusSaveMode = JZ_FLAGCODE_OFF; //opus存储模式 off:不存储 on:存储 |
10 | 10 | ||
11 | 11 | ||
12 | -#define OPUS_FILE_DIR "/root/sdcard/opus" | ||
13 | #define OPUS_TEMP_SAVE_DIR "/root/test_audio.opus" | 12 | #define OPUS_TEMP_SAVE_DIR "/root/test_audio.opus" |
14 | static unsigned char opus_SaveFile[128]; | 13 | static unsigned char opus_SaveFile[128]; |
15 | 14 | ||
@@ -82,8 +81,7 @@ T_JZsdkReturnCode OpusFile_SaveOpusFileStart(unsigned char *FileName, int decode | @@ -82,8 +81,7 @@ T_JZsdkReturnCode OpusFile_SaveOpusFileStart(unsigned char *FileName, int decode | ||
82 | else | 81 | else |
83 | { | 82 | { |
84 | g_OpusSaveMode = JZ_FLAGCODE_ON; | 83 | g_OpusSaveMode = JZ_FLAGCODE_ON; |
85 | - sprintf(opus_SaveFile, "%s/%s",OPUS_FILE_DIR, FileName); | ||
86 | - JZSDK_LOG_INFO("上传的opus文件存储路径为:%s decode_rate:%d SampleRate:%d Channels:%d", opus_SaveFile, decode_rate, SampleRate, Channels); | 84 | + JZSDK_LOG_INFO("上传的opus文件名为:%s decode_rate:%d SampleRate:%d Channels:%d", opus_SaveFile, decode_rate, SampleRate, Channels); |
87 | } | 85 | } |
88 | 86 | ||
89 | if (g_OpusFile_SaveFp != NULL) | 87 | if (g_OpusFile_SaveFp != NULL) |
@@ -207,6 +205,7 @@ T_JZsdkReturnCode OpusFile_SaveOpusFileEnd(int CheckFlag, unsigned char *CheckCo | @@ -207,6 +205,7 @@ T_JZsdkReturnCode OpusFile_SaveOpusFileEnd(int CheckFlag, unsigned char *CheckCo | ||
207 | default: | 205 | default: |
208 | { | 206 | { |
209 | JZSDK_LOG_ERROR("opus保存校验码类型错误"); | 207 | JZSDK_LOG_ERROR("opus保存校验码类型错误"); |
208 | + g_OpusFile_SaveFlag = JZ_FLAGCODE_OFF; | ||
210 | ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 209 | ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
211 | } | 210 | } |
212 | break; | 211 | break; |
@@ -234,37 +233,42 @@ T_JZsdkReturnCode OpusFile_SaveOpusFileEnd(int CheckFlag, unsigned char *CheckCo | @@ -234,37 +233,42 @@ T_JZsdkReturnCode OpusFile_SaveOpusFileEnd(int CheckFlag, unsigned char *CheckCo | ||
234 | * *********************************************************/ | 233 | * *********************************************************/ |
235 | if (g_OpusSaveMode != JZ_FLAGCODE_OFF) | 234 | if (g_OpusSaveMode != JZ_FLAGCODE_OFF) |
236 | { | 235 | { |
237 | - //将临时的opus文件移动到指定的目录 | ||
238 | - ret = JZsdk_Osal_Rename(OPUS_TEMP_SAVE_DIR, opus_SaveFile); | ||
239 | - if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
240 | - { | ||
241 | - JZSDK_LOG_ERROR("opus保存文件移动失败"); | ||
242 | - JZsdk_Osal_delete(OPUS_TEMP_SAVE_DIR); | ||
243 | - g_OpusFile_SaveFlag = JZ_FLAGCODE_OFF; | ||
244 | - | ||
245 | - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
246 | - } | ||
247 | - | ||
248 | - //移动成功 | ||
249 | - JZsdk_Sync(); //同步文件系统 | ||
250 | - JZSDK_LOG_INFO("opus保存成功,刷新列表"); | ||
251 | - OpusFile_FlushList(); //刷新opus文件列表 | 236 | + //将opus解码,并存储到指定目录 |
237 | + ret = OpusFile_DecodeOpusAndSave(g_OpusSaveMode ,g_OpusSaveMode, opus_SaveFile); | ||
252 | } | 238 | } |
239 | + | ||
240 | + // if (g_OpusSaveMode != JZ_FLAGCODE_OFF) | ||
241 | + // { | ||
242 | + // //将临时的opus文件移动到指定的目录 | ||
243 | + // ret = JZsdk_Osal_Rename(OPUS_TEMP_SAVE_DIR, opus_SaveFile); | ||
244 | + // if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
245 | + // { | ||
246 | + // JZSDK_LOG_ERROR("opus保存文件移动失败"); | ||
247 | + // JZsdk_Osal_delete(OPUS_TEMP_SAVE_DIR); | ||
248 | + // g_OpusFile_SaveFlag = JZ_FLAGCODE_OFF; | ||
249 | + | ||
250 | + // return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
251 | + // } | ||
252 | + | ||
253 | + // //移动成功 | ||
254 | + // JZsdk_Sync(); //同步文件系统 | ||
255 | + // JZSDK_LOG_INFO("opus保存成功,刷新列表"); | ||
256 | + // OpusFile_FlushList(); //刷新opus文件列表 | ||
257 | + // } | ||
253 | /******************************************************************** | 258 | /******************************************************************** |
254 | * | 259 | * |
255 | - * | ||
256 | * 如果不进行额存储,则进行一次opus解码 | 260 | * 如果不进行额存储,则进行一次opus解码 |
257 | * | 261 | * |
258 | * | 262 | * |
259 | /********************************************************************/ | 263 | /********************************************************************/ |
260 | else | 264 | else |
261 | { | 265 | { |
262 | - OpusFile_DecodeOpus(OPUS_TEMP_SAVE_DIR); | 266 | + ret = OpusFile_DecodeOpus(OPUS_TEMP_SAVE_DIR); |
263 | } | 267 | } |
264 | 268 | ||
265 | JZSDK_LOG_INFO("opus_save_end"); | 269 | JZSDK_LOG_INFO("opus_save_end"); |
266 | 270 | ||
267 | g_OpusFile_SaveFlag = JZ_FLAGCODE_OFF; | 271 | g_OpusFile_SaveFlag = JZ_FLAGCODE_OFF; |
268 | 272 | ||
269 | - return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 273 | + return ret; |
270 | } | 274 | } |
@@ -659,6 +659,53 @@ T_JZsdkReturnCode UIcontrol_Opus_PlayFixedFile(int DeviceName) | @@ -659,6 +659,53 @@ T_JZsdkReturnCode UIcontrol_Opus_PlayFixedFile(int DeviceName) | ||
659 | #endif | 659 | #endif |
660 | } | 660 | } |
661 | 661 | ||
662 | + | ||
663 | +//播放固定位置的录音opus录音喊话 | ||
664 | +T_JZsdkReturnCode UIcontrol_Pcm_PlayListFile(int DeviceName, unsigned char *Filename, unsigned int NameLen) | ||
665 | +{ | ||
666 | + JZSDK_LOG_INFO("调用了list播放"); | ||
667 | + | ||
668 | +#ifdef MEGAPHONE_CONFIG_STATUS_ON | ||
669 | + //调用喊话器的接口 | ||
670 | + T_JZsdkReturnCode ret = Megaphone_PlayPcmListFile(Filename, NameLen); | ||
671 | + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
672 | + { | ||
673 | + printf("%s:%s\n",UI_CONTROL_ERROR,JZsdk_GetReturnCodeMessage(ret)); | ||
674 | + return ret; | ||
675 | + } | ||
676 | + | ||
677 | + delayMs(10); | ||
678 | + | ||
679 | + //获取播放状态 | ||
680 | + int PlayStatus; | ||
681 | + Megaphone_param(JZ_FLAGCODE_GET, MEGAPHONE_PLAY_STATUS, &PlayStatus); | ||
682 | + | ||
683 | + //通知其他设备的ui界面变化 | ||
684 | + //如果4G模块有启动 | ||
685 | + if ((JZsdk_HalPort_UseFlag(UART_4G) == JZ_FLAGCODE_ON) && (DeviceName != UART_4G) ) | ||
686 | + { | ||
687 | + HalSend_type1Send_Send_PlayStatus(UART_4G, PlayStatus); | ||
688 | + } | ||
689 | + //如果设备1有启动 | ||
690 | + if ( (JZsdk_HalPort_UseFlag(UART_DEV_1) == JZ_FLAGCODE_ON) && (DeviceName != UART_DEV_1) ) | ||
691 | + { | ||
692 | + HalSend_type1Send_Send_PlayStatus(UART_DEV_1, PlayStatus); | ||
693 | + } | ||
694 | + //如果设备2有启动 | ||
695 | + if ( (JZsdk_HalPort_UseFlag(UART_DEV_2) == JZ_FLAGCODE_ON) && (DeviceName != UART_DEV_2) ) | ||
696 | + { | ||
697 | + HalSend_type1Send_Send_PlayStatus(UART_DEV_2, PlayStatus); | ||
698 | + } | ||
699 | + //如果psdk接口已经使用 | ||
700 | + if ( (JZsdk_HalPort_UseFlag(DEVICE_PSDK) == JZ_FLAGCODE_ON) && DeviceName != DEVICE_PSDK ) | ||
701 | + { | ||
702 | + JZsdk_Psdk_UI_io_Reply_PlayStatus(PlayStatus); | ||
703 | + } | ||
704 | + | ||
705 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
706 | +#endif | ||
707 | +} | ||
708 | + | ||
662 | /**************************************************************************************************************************************** | 709 | /**************************************************************************************************************************************** |
663 | * | 710 | * |
664 | * TTS相关 | 711 | * TTS相关 |
@@ -50,6 +50,7 @@ T_JZsdkReturnCode UIcontrol_OpusRealTimeVoice_Close(int DeviceName); | @@ -50,6 +50,7 @@ T_JZsdkReturnCode UIcontrol_OpusRealTimeVoice_Close(int DeviceName); | ||
50 | 50 | ||
51 | //opus类 | 51 | //opus类 |
52 | T_JZsdkReturnCode UIcontrol_Opus_PlayFixedFile(int DeviceName); | 52 | T_JZsdkReturnCode UIcontrol_Opus_PlayFixedFile(int DeviceName); |
53 | +T_JZsdkReturnCode UIcontrol_Pcm_PlayListFile(int DeviceName, unsigned char *Filename, unsigned int NameLen); | ||
53 | T_JZsdkReturnCode UIcontrol_Broadcast_OpusDecodeStatus(int status); | 54 | T_JZsdkReturnCode UIcontrol_Broadcast_OpusDecodeStatus(int status); |
54 | 55 | ||
55 | //TTS类 | 56 | //TTS类 |
@@ -63,7 +63,6 @@ | @@ -63,7 +63,6 @@ | ||
63 | int Opus_PlayMode=0;//0录音喊话 1实时喊话 | 63 | int Opus_PlayMode=0;//0录音喊话 1实时喊话 |
64 | 64 | ||
65 | int num_flag=0;//版本号信息 | 65 | int num_flag=0;//版本号信息 |
66 | -int Firstsong_flag = 0;//记录第一次播放 0为未曾播放过 | ||
67 | extern int height_Volume_lock; | 66 | extern int height_Volume_lock; |
68 | 67 | ||
69 | extern int SpeakerWidgetUseLock; | 68 | extern int SpeakerWidgetUseLock; |
@@ -468,52 +467,30 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | @@ -468,52 +467,30 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | ||
468 | { | 467 | { |
469 | //JZsdk_Psdk_UI_io_LastSong(1); | 468 | //JZsdk_Psdk_UI_io_LastSong(1); |
470 | JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_LASTSONG, 0); | 469 | JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_LASTSONG, 0); |
471 | - | ||
472 | - //记录为播放中 | ||
473 | - Firstsong_flag = 1; | ||
474 | } | 470 | } |
475 | break; | 471 | break; |
476 | case 1://下一曲 | 472 | case 1://下一曲 |
473 | + { | ||
477 | if(value==1) | 474 | if(value==1) |
478 | { | 475 | { |
479 | 476 | ||
480 | //JZsdk_Psdk_UI_io_NextSong(1); | 477 | //JZsdk_Psdk_UI_io_NextSong(1); |
481 | JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_NEXTSONG, 0); | 478 | JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_NEXTSONG, 0); |
482 | - | ||
483 | - //记录为播放中 | ||
484 | - Firstsong_flag = 1; | ||
485 | } | 479 | } |
486 | break; | 480 | break; |
487 | - case 2: // 播放\暂停 value为1 是三角控件 暂停 所以要去取反 | 481 | + } |
482 | + case 2: // 播放\暂停 value为1 是三角控件 暂停 所以要去取反 | ||
483 | + { | ||
488 | value = !value; | 484 | value = !value; |
489 | //如果为暂停 | 485 | //如果为暂停 |
490 | if (value == 0) | 486 | if (value == 0) |
491 | { | 487 | { |
492 | JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_PLAYANDSTOP, value); | 488 | JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_PLAYANDSTOP, value); |
493 | - | ||
494 | - USER_LOG_INFO("暂停播放"); | ||
495 | - } | ||
496 | - else if (value == 1) | ||
497 | - { | ||
498 | - if (Firstsong_flag == 1) //如果已经处于音频库播放中 | ||
499 | - { | ||
500 | - JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_PLAYANDSTOP, value); | ||
501 | - | ||
502 | - USER_LOG_INFO("继续播放"); | ||
503 | - } | ||
504 | - //否则为 第一次播放音频 | ||
505 | - else | ||
506 | - { | ||
507 | - //播放当前音频 | ||
508 | - JZsdk_Psdk_UI_io_PlaySong(1); | ||
509 | - | ||
510 | - //记录为播放中 | ||
511 | - Firstsong_flag = 1; | ||
512 | - USER_LOG_INFO("播放当前音频"); | ||
513 | - } | ||
514 | } | 489 | } |
515 | 490 | ||
516 | - break; | 491 | + break; |
492 | + } | ||
493 | + | ||
517 | case 3://内显示音量 scale | 494 | case 3://内显示音量 scale |
518 | { | 495 | { |
519 | JZsdk_Psdk_UI_io_LumenAndVolume_PowerLimitation(1, value); | 496 | JZsdk_Psdk_UI_io_LumenAndVolume_PowerLimitation(1, value); |
-
请 注册 或 登录 后发表评论