123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- #include <QApplication>
- #include "Logs/loginit.h"
- #include "bundled/core.h"
- #include "spdlog/spdlog.h"
- #include "AudioRecord.h"
- #include <fstream>
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- init_log();
- SPDLOG_INFO("********** RecordAudio **********");
- std::list<AudioDevice_t> audioDevices;
- getAudioDevices(audioDevices);
- SPDLOG_INFO("可用的声卡设备:");
- for (const auto &device : audioDevices) {
- SPDLOG_INFO("声卡编号: {}, ID: {}, 名称: {}, 驱动: {}, 长名称: {}, 混音器名称: {}, 组件信息: {}",
- device.CardNumber, device.CardID, device.CardName, device.CardDriver,
- device.CardLongName, device.CardMixername, device.CardComponents);
- for (const auto &pcmDevice : device.PCMDevices) {
- SPDLOG_INFO(" PCM设备编号: {}, 子设备编号: {}, 声卡ID: {}, 名称: {}, 子设备名称: {}",
- pcmDevice.PCMDevice, pcmDevice.SubDevice, pcmDevice.PCMID,
- pcmDevice.PCMName, pcmDevice.PCMSubName);
- }
- }
- SPDLOG_INFO("********** 获取声卡设备列表完成 **********");
- std::list<AudioDeviceDesc_t> audioDeviceDescs;
- getPCMAudioDevice(audioDeviceDescs);
- SPDLOG_INFO("可用的声卡字符设备:");
- for (const auto &deviceDesc : audioDeviceDescs) {
- SPDLOG_INFO("设备名称: {}, 描述: {}, IOID: {}, 声卡: {}, 设备编号: {}",
- deviceDesc.DeviceName, deviceDesc.DeviceDesc,
- deviceDesc.IOID, deviceDesc.Card, deviceDesc.DevNum);
- }
- SPDLOG_INFO("********** 获取声卡字符设备列表完成 **********");
- AudioRecord audioRecord;
- std::string deviceName = fmt::format("hw:{},{}", audioDevices.front().CardNumber, audioDevices.front().PCMDevices.front().PCMDevice);
- audioRecord.setRecordParams(44100, 16, 2); // 设置采样率为44100Hz,16位深度,2通道
- if (!audioRecord.openRecordChannel(deviceName)) {
- SPDLOG_ERROR("无法打开音频通道: {}", deviceName);
- return -1;
- }
- std::ofstream outFile("recorded_audio.raw", std::ios::binary | std::ios::out | std::ios::trunc);
- if (!outFile.is_open()) {
- SPDLOG_ERROR("无法打开输出文件: recorded_audio.raw");
- return -1;
- }
- for(int i = 0; i < 10; ++i) { // 录制10秒
- char buffer[44100 * 2 * 2]; // 1秒的缓冲区大小,44100帧 * 2通道 * 2字节
- int bytesRead = audioRecord.recordAudio(buffer, sizeof(buffer), 44100);
- if (bytesRead < 0) {
- SPDLOG_ERROR("录音失败");
- outFile.close();
- return -1;
- }
- outFile.write(buffer, bytesRead);
- SPDLOG_INFO("已录制 {} 秒音频", i + 1);
- }
- outFile.close();
- SPDLOG_INFO("录音完成,音频数据已保存到 recorded_audio.raw");
- return a.exec();
- }
-
|