Skip to content

Commit 9257ba1

Browse files
committed
* Fix segment error when start pcm with channel=2 for the first time.
1 parent 6f3b46d commit 9257ba1

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

components/voice/port/maixcam/maix_audio_mmf.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,13 +228,36 @@ namespace maix::audio
228228
param->path = path;
229229
param->block = block;
230230
uint32_t pcm_flag = PCM_IN | (!param->block ? PCM_NONBLOCK : 0);
231+
#ifdef PLATFORM_MAIXCAM
232+
// Fix segment error when start pcm with channel=2 for the first time.
233+
if (channel != 1) {
234+
config.channels = 1;
235+
config.rate = 16000;
236+
param->pcm = pcm_open(param->card, param->device, pcm_flag, &config);
237+
if (param->pcm == NULL) {
238+
err::check_null_raise(param->pcm, "failed to allocate memory for PCM");
239+
} else if (!pcm_is_ready(param->pcm)){
240+
pcm_close(param->pcm);
241+
err::check_raise(err::ERR_RUNTIME, "failed to open PCM");
242+
}
243+
pcm_prepare(param->pcm);
244+
pcm_start(param->pcm);
245+
pcm_close(param->pcm);
246+
config.channels = (uint32_t)channel;
247+
config.rate = (uint32_t)sample_rate;
248+
}
249+
#endif
231250
param->pcm = pcm_open(param->card, param->device, pcm_flag, &config);
232251
if (param->pcm == NULL) {
233252
err::check_null_raise(param->pcm, "failed to allocate memory for PCM");
234253
} else if (!pcm_is_ready(param->pcm)){
235254
pcm_close(param->pcm);
236255
err::check_raise(err::ERR_RUNTIME, "failed to open PCM");
237256
}
257+
if (param->block) {
258+
pcm_prepare(param->pcm);
259+
}
260+
238261
_param = param;
239262
}
240263

examples/audio_demo/main/src/main.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -532,7 +532,7 @@ int _main(int argc, char* argv[])
532532
err::check_bool_raise(r.format() == format);
533533
err::check_bool_raise(r.channel() == channel);
534534

535-
log::info("Record over!\r\n");
535+
log::info("Record start\r\n");
536536
auto bytes_per_frame = r.frame_size();
537537
while (!app::need_exit()) {
538538
auto t = time::ticks_ms();

0 commit comments

Comments
 (0)