提交 f4cd48d8 编写于 作者: O openeuler-ci-bot 提交者: Gitee

!100 audio: using PulseAudio to record

Merge pull request !100 from rongwang/master
......@@ -309,93 +309,8 @@ snd_pcm_uframes_t AlsaHelper::get_period_frames_bytes() const
std::string AlsaHelper::get_usb_audio_device_name() const
{
std::string deviceName = "default";
snd_ctl_t *handle = nullptr;
int err = -1;
snd_ctl_card_info_t *info = nullptr;
snd_ctl_card_info_alloca(&info);
int card = -1;
if (snd_card_next(&card) < 0 || card < 0) {
return deviceName;
}
int nameMaxLen = 32;
while (card >= 0) {
char name[nameMaxLen];
snprintf(name, nameMaxLen, "hw:%d", card);
if ((err = snd_ctl_open(&handle, name, 0)) < 0) {
if (snd_card_next(&card) < 0) {
break;
}
}
if ((err = snd_ctl_card_info(handle, info)) < 0) {
snd_ctl_close(handle);
if (snd_card_next(&card) < 0) {
break;
}
}
int dev = -1;
while (true) {
snd_ctl_pcm_next_device(handle, &dev);
if (dev < 0) {
break;
}
if ((snd_ctl_card_info_get_id(info) != nullptr) && (snd_ctl_card_info_get_name(info)!= nullptr)) {
std::string card_info_id(snd_ctl_card_info_get_id(info));
std::string card_info_name(snd_ctl_card_info_get_name(info));
if ((card_info_id == "Audio") && (card_info_name == "USB Audio")) {
deviceName = "hw:" + std::to_string(card) + "," + std::to_string(dev);
if (validateAudioDevice(deviceName)) {
snd_ctl_close(handle);
return deviceName;
}
}
}
}
snd_ctl_close(handle);
if (snd_card_next(&card) < 0) {
break;
}
}
return deviceName;
return "pulse";//using PulseAudio
}
bool AlsaHelper::validateAudioDevice(std::string name) const
{
snd_pcm_t *handle = nullptr;
snd_pcm_hw_params_t *params = nullptr;
unsigned int rate = 0;
float lowLimit = 0.95;
float upLimit = 1.05;
hwparams specHwparams = {
.format = SND_PCM_FORMAT_S16_LE,
.channels = CHANELTYPE_MONO,
.rate = DEFAULT_SAMPLE_RATE,
};
if (snd_pcm_open(&handle, name.c_str(), SND_PCM_STREAM_CAPTURE, 0) < 0) {
return false;
}
snd_pcm_hw_params_alloca(&params);
if (snd_pcm_hw_params_any(handle, params) < 0) {
snd_pcm_close(handle);
return false;
}
if (snd_pcm_hw_params_set_format(handle, params, specHwparams.format) < 0) {
snd_pcm_close(handle);
return false;
}
if (snd_pcm_hw_params_set_channels(handle, params, specHwparams.channels) < 0) {
snd_pcm_close(handle);
return false;
}
rate = specHwparams.rate;
snd_pcm_hw_params_set_rate_near(handle, params, &specHwparams.rate, 0);
if (static_cast<float>(rate * upLimit) < specHwparams.rate
|| static_cast<float>(rate * lowLimit) > specHwparams.rate) {
snd_pcm_close(handle);
return false;
}
snd_pcm_close(handle);
return true;
}
}
}
......@@ -115,7 +115,6 @@ private:
int xrun(void);
int suspend(void);
void compute_max_peak(char *data, size_t count) const;
bool validateAudioDevice(std::string name) const;
};
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册