首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Sony Spresense上重复播放音频

在Sony Spresense上重复播放音频
EN

Stack Overflow用户
提问于 2019-01-22 17:33:22
回答 1查看 104关注 0票数 2

我正在尝试在Sony Spresense上重复播放音频文件。我已经测试了Sony提供的示例草图,它们可以很好地播放音频文件。但是如果我想要重放这个文件,我会得到错误。不幸的是,所有的草图只播放他们的文件一次...

为了简单起见,我缩小了源代码。

代码语言:javascript
复制
#include <Audio.h>
#include <SDHCI.h>

static void audioErrorCallback(const ErrorAttentionParam *atprm);
bool initializeSound();

SDClass theSD;
AudioClass *theAudio;
File soundFile;
bool soundFinished;

void setup() {
  Serial.begin(115200);
  while (!Serial);
  initializeSound();
  soundFinished = true;
}

void loop() {
  if (!soundFinished) {
    int err = theAudio->writeFrames(AudioClass::Player0, soundFile);
    if (err == AUDIOLIB_ECODE_FILEEND) {
      soundFinished = true;
      stopPlay();
    }
  } else {
    Serial.println("Sleep");
    delay(3000);
    soundFinished = false;
    startPlay();
  }
  usleep(40000);
}

static void audioErrorCallback(const ErrorAttentionParam *atprm) {
  if (atprm->error_code >= AS_ATTENTION_CODE_WARNING)
  {
    Serial.println("Error!");
  }
}

bool initializeSound() {
  theAudio = AudioClass::getInstance();
  theAudio->begin(audioErrorCallback);
  theAudio->setRenderingClockMode(AS_CLKMODE_NORMAL);
  theAudio->setPlayerMode(AS_SETPLAYER_OUTPUTDEVICE_SPHP, AS_SP_DRV_MODE_LINEOUT);
  theAudio->initPlayer(AudioClass::Player0, AS_CODECTYPE_MP3, "/mnt/sd0/BIN", AS_SAMPLINGRATE_AUTO, AS_CHANNEL_STEREO);
  soundFile = theSD.open("audioFile.mp3");
  theAudio->setVolume(-160);
  return true;
}

void startPlay() {
  theAudio->writeFrames(AudioClass::Player0, soundFile);
  theAudio->startPlayer(AudioClass::Player0);
}

void stopPlay() {
  theAudio->stopPlayer(AudioClass::Player0);
  // soundFile.close();

}

音频文件第一次播放时没有问题。之后,我总是收到以下错误:

代码语言:javascript
复制
Attention: module[5] attention id[2]/code[6] (objects/media_player/player_input_device_handler.cpp L220)
Error!
ERROR: Command (0x22) fails. Result code(0xf1) Module id(0x5) Error code(0x2f) Error subcode(0x0)
ERROR: Command (0x23) fails. Result code(0xf1) Module id(0x5) Error code(0x1)

遗漏了什么?有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2020-05-23 13:16:39

我也遇到过类似的问题,我可以通过关闭最后的File并在循环()的开头创建一个新的File来修复它,而不是在setup()函数中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54305160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档