У меня есть два пользовательских элемента QML для аудио, один для воспроизведения музыки (и расширяет элемент QML Audio) и один для воспроизведения звуковых эффектов (который расширяет элемент QML SoundEffect).
Я могу воспроизводить фоновую музыку без проблем, но когда я пытаюсь воспроизвести звуковой эффект, интерфейс останавливается на пару секунд (музыка продолжает играть), а затем, когда он размораживается, я получаю звук ошибки Windows .
Вот что у меня есть (музыка имеет похожую архитектуру):
MySoundEffect.qml
Loader {
id: container
source: "MobilitySoundEffect.qml"
property bool valid: item !== null
property real audioVolume: 1.0
property int loops: 1
function initialise() {
if(valid) {
item.volume = container.audioVolume
item.loops = container.loops
}
}
function play(filename) { if(valid) item.play(filename); }
function stop() { if(valid) item.stop(); }
onLoaded: container.initialise()
onAudioVolumeChanged: if(valid) item.volume = audioVolume;
}
MobilitySoundEffect.qml
Item {
id: container
property url source: ""
property real volume: 1.0
property int loops: 1
function play(filename) {
if (settings.isFxOn()) {
source = filename;
}
}
function stop() { soundEffect.stop(); }
SoundEffect {
id: soundEffect
source: container.source
volume: container.volume
loops: container.loops
onStatusChanged: if (Audio.Loaded == status) play();
}
}
А вот как я их регистрирую (обрезано для краткости):
main.qml
Rectangle {
id: main
MyAudio {
id: music
}
MySoundEffect {
id: soundEffects
}
PageStack {
id: pageStack
Component.onCompleted: {
pageStack.push(Qt.resolvedUrl("pages/IntroPage.qml"));
}
}
}
Наконец, вот как я их называю для воспроизведения музыки или звукового эффекта:
soundEffects.play("file://assets/audio/click.ogg");
music.play("file://assets/audio/menu.mp3");
Опять же, музыка играет нормально, а звуковые эффекты - нет. И, насколько я проверял, это не имеет ничего общего с типом файла. Я не мог получить wav, mp3 или off для воспроизведения.
Моя установка - Windows 7, QtSDK 7.4.7, Symbian 1.1.
Под Microsoft Visual Studio Compiler 9.0 я получаю замораживание и звук ошибки, но под MinGW 4.4 нет звука замораживания или ошибки, но звуковой эффект все еще отсутствует.
Обновление
Я переместил все свои ресурсы (qml, audio, txt и т. Д.) В файл QResource, и теперь не воспроизводятся ни звуковые эффекты, ни музыка. Всякий раз, когда я пытаюсь воспроизвести музыку, я получаю следующее:
qrc файл: /audio/menu.ogg
Размер 353349
Последовательный 0
Мне действительно нужно это исправить, поэтому я начал щедрость. Пожалуйста, помогите.
Заранее спасибо.
Решение (больше похоже на обход)
Действительно, QSound не может воспроизводить звуки из ресурса, и я не могу заставить работать элемент SoundEffect. Итак, моя работа заключается в следующем:
Я использую элемент QML Audio для воспроизведения фоновой музыки (которая поддерживает Fade In / Fade Out) и я создал класс SoundEffects в C ++, используя Phonon для воспроизведения звуковых эффектов.
Кажется, все работает нормально, поэтому я больше не буду к нему прикасаться.