| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- /* pcm_record.c */
- #include "rtconfig.h"
- #if defined(BSP_USING_I2S)||defined(BSP_USING_SDIF)
- #include <rtthread.h>
- #include <rtdevice.h>
- #include <dfs_posix.h>
- #define RECORD_TIME_MS 5000
- #define RT_I2S_SAMPLERATE 8000
- #define RECORD_CHANNEL 2
- #define RECORD_CHUNK_SZ ((RT_I2S_SAMPLERATE * RECORD_CHANNEL * 2) * 20 / 1000)
- #define SOUND_DEVICE_NAME "I2S0" /* Audio 设备名称 */
- static rt_device_t mic_dev; /* Audio 设备句柄 */
- int pcm_record()
- {
- int fd = -1;
- uint8_t *buffer = NULL;
- int length, total_length = 0;
- fd = open("file.pcm", O_WRONLY | O_CREAT);
- if (fd < 0)
- {
- rt_kprintf("open file for recording failed!\n");
- return -1;
- }
- rt_kprintf("1\n");
- buffer = rt_malloc(RECORD_CHUNK_SZ);
- if (buffer == RT_NULL)
- goto __exit;
- rt_kprintf("2\n");
- mic_dev = rt_device_find(SOUND_DEVICE_NAME);
- if (mic_dev == RT_NULL)
- goto __exit;
- rt_kprintf("3\n");
- rt_device_open(mic_dev, RT_DEVICE_OFLAG_RDONLY);
- rt_kprintf("4\n");
- while (1)
- {
- rt_kprintf("6\n");
- length = rt_device_read(mic_dev, 0, buffer, RECORD_CHUNK_SZ);
- rt_kprintf("7\n");
- if (length)
- {
- write(fd, buffer, length);
- total_length += length;
- }
- if ((total_length / RECORD_CHUNK_SZ) > (RECORD_TIME_MS / 20))
- break;
- }
- close(fd);
- rt_device_close(mic_dev);
- __exit:
- if (fd >= 0)
- close(fd);
- if (buffer)
- rt_free(buffer);
- return 0;
- }
- MSH_CMD_EXPORT(pcm_record, record voice to a pcm file); // 修改命令描述
- #endif
|