1 Вопрос: Как исправить «E libOpenSLES: слишком много объектов» в SoundEffect qml

вопрос создан в Thu, May 2, 2019 12:00 AM

Я кодирую небольшое приложение для Android Soundboard и использую компонент SoundEffect внутри ListDelegate. Но после нажатия определенного количества кнопок (вызывается sound.play ()) он перестает воспроизводить звуки, и я получаю это ошибка в выводе приложения:

  

E libOpenSLES: слишком много объектов W libOpenSLES: выход

     

Engine :: CreateAudioPlayer (SL_RESULT_MEMORY_FAILURE)

     

W sound: невозможно создать AudioPlayer

Внутри ListDelegate:

Rectangle{

   ...

  Button{
    id: delegateButton
    anchors.fill: parent
    Material.elevation: 0
    onPressed: sound.play();
  }

  SoundEffect{
    id: sound
    source: soundsource
  }
}
    
0
  1. SoundEffect внутри делегата ??? Для чего ??
    2019-05-02 18: 08: 56Z
  2. Я использую soundEffect внутри делегата, чтобы я мог указать разные аудиоисточники для каждой кнопки, используя listmodel
    2019-05-03 16: 05: 58Z
  3. Эмм ... Ты играешь все эти звуки одновременно? Если нет - создайте один экземпляр и установите источник из делегата. SoundEffect должен быть своего рода синглтоном.
    2019-05-03 16: 13: 40Z
1 ответ                              1                         

Мне удалось это исправить, переместив компонент звукового эффекта из делегата и динамически изменив источник звука при нажатии кнопки следующим образом:

Внутри делегата:

Rectangle{
 signal tapped();
   ...

  Button{
    id: delegateButton
    anchors.fill: parent
    Material.elevation: 0
    onPressed: tapped()
  }
}

Внутри моей главной страницы:

SoundEffect{
  id: sound
}

 ...

ListView{
  delegate:{
    ...

    onTapped: {sound.source = audiosource; sound.play()}
  }
}
    
0
2019-05-04 11: 18: 39Z
  1. Да, это то, что я имел в виду. Кроме того, я бы переместил play() на onStatusChanged(), поскольку настройка source не гарантирует, что элемент будет немедленно готов к игре.
    2019-05-04 11: 34: 13Z
источник размещен Вот