#include #include "alsa_dev.h" #include "log/logger.h" #include "common.h" using namespace toolkit; #define AUDIO_CHANNELS 2 #define AUDIO_RATE 44100 #define AUDIO_SAMPLES (10 * AUDIO_RATE / 1000) int main(int argc, char *argv[]) { if (argc < 2) { fprintf(stderr, "usage: %s card_num \n", argv[0]); } int ret; //初始化日志系统 Logger::Instance().add(std::make_shared ()); Logger::Instance().add(std::make_shared()); Logger::Instance().setWriter(std::make_shared()); int card = atoi(argv[1]); alsa::Config alsaConfig; sprintf(alsaConfig.device, "hw:%d,0", card); InfoL << "open dev: " << alsaConfig.device; alsaConfig.period_time = AUDIO_SAMPLES * 1000000 / AUDIO_RATE; alsaConfig.buffer_time = 5 * alsaConfig.period_time; alsaConfig.format = SND_PCM_FORMAT_S16_LE; alsaConfig.rate = AUDIO_RATE; alsaConfig.channels = AUDIO_CHANNELS; alsa::AlsaDev usbCaptureDev; if (usbCaptureDev.applyConfig(alsaConfig) < 0) { PrintE("alsa config failed.\n"); return -1; } PrintI("alsa before init: %s\n", usbCaptureDev.configToString()); if (usbCaptureDev.init(SND_PCM_STREAM_CAPTURE) < 0) { PrintE("alsa init failed.\n"); return -1; } PrintI("alsa init: %s\n", usbCaptureDev.configToString()); uint8_t *capData = nullptr; int buffer_size = usbCaptureDev.getFrames() * usbCaptureDev.getFrameSize(); capData = (uint8_t *)malloc(buffer_size); assert(capData); FILE *cap_fp = fopen("/root/record.pcm", "wb"); while (true) { size_t read_size = usbCaptureDev.read(capData, buffer_size); PrintI("alsa read %d\n", read_size); if (read_size <= 0) { msleep(1); continue; } fwrite(capData, 1, buffer_size, cap_fp); InfoL << "write data:" << read_size; } return 0; }