Как да коригирам E libOpenSLES: Твърде много обекти в SoundEffect qml

Кодирам малко приложение за звукова платка за android и използвам компонента SoundEffect в ListDelegate. Но след натискане на определен брой бутони (извиква се sound.play()) той спира да възпроизвежда звуци и получавам тази грешка в изхода на приложението:

E libOpenSLES: Твърде много обекти W libOpenSLES: Напускане

Engine::CreateAudioPlayer (SL_RESULT_MEMORY_FAILURE)

W звук: Не може да се създаде AudioPlayer

Вътре в ListDelegate:

Rectangle{

   ...

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

  SoundEffect{
    id: sound
    source: soundsource
  }
}

person Marc Ghanime    schedule 02.05.2019    source източник
comment
SoundEffect вътрешен делегат??? За какво??   -  person folibis    schedule 02.05.2019
comment
Използвам soundEffect вътре в делегата, така че мога да посоча различен аудиоизточник за всеки бутон, използвайки listmodel   -  person Marc Ghanime    schedule 03.05.2019
comment
Хммм ... Пускате ли всички тези звуци едновременно? Ако не - създайте един екземпляр и така задайте източник от делегата. SoundEffect трябва да е някак сингълтън.   -  person folibis    schedule 03.05.2019


Отговори (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()}
  }
}
person Marc Ghanime    schedule 04.05.2019
comment
Да, това имах предвид. Освен това бих преместил play() на onStatusChanged(), тъй като настройката source не гарантира, че елементът ще бъде незабавно готов за игра. - person folibis; 04.05.2019