ورود

View Full Version : سوال: thread در Qml



ravaei
چهارشنبه 07 مرداد 1394, 19:07 عصر
درود ... آیا به صورت مستقیم Qml قابلیت thread رو داره ؟ مشکل بنده واسه همزمان سازی صدا هاست . نیاز دازم که یه numberAnımatıon همزمان با یه صدا پخش بشه کد رو میزارم اگه راه بهتری باشه راهنمایی کنید ... ممنون



import QtQuick 2.0
import QtMultimedia 5.0



Rectangle {


property var song_Number: ""

color:"white"
opacity: 0.5
radius: height/20

SoundEffect{
id:_Sound
source: "qrc:///songs/voices/songs/lid/"+song_Number+".wav"
}

MouseArea{
anchors.fill: parent


onPressed: {


_Sound.play()
_Sound.volume = 1

}
onReleased: {


_Fade.start()

}
}

// =============== Animations ===============


/*Sound:*/ NumberAnimation {id:_Fade; target: _Sound; property: "volume"; duration: 500; from: 1; to:0; }

}

حامد مصافی
پنج شنبه 08 مرداد 1394, 09:51 صبح
qml به صورت مستقیم امکان استفاده از thread رو داره، با استفاده از WorkerScript اما در این مثال گمان نمیکنم نیازی به استفاده از Thread باشه. من کمی کد تو رو دستکاری کردم، خودم تست نکردم اما گمان می‌کنم به درستی کار کنه


import QtQuick 2.0
import QtMultimedia 5.0

Rectangle {
property string song_Number: ""

color:"white"
opacity: 0.5
radius: height/20

SoundEffect{
id:_Sound
source: "qrc:///songs/voices/songs/lid/"+song_Number+".wav"
}

MouseArea{
anchors.fill: parent

onClicked: {
_Sound.volume = 1
playSound.start()
}
}

// =============== Animations ===============


ParallelAnimation{
id: playSound
ScriptAction { script: {
_Sound.play()
_Sound.volume = 1
}
}

NumberAnimation {
id:_Fade;
target: _Sound;
property: "volume";
duration: 500;
from: 1; to:0;
}
}

}

ravaei
پنج شنبه 08 مرداد 1394, 16:29 عصر
qml به صورت مستقیم امکان استفاده از thread رو داره، با استفاده از WorkerScript اما در این مثال گمان نمیکنم نیازی به استفاده از Thread باشه. من کمی کد تو رو دستکاری کردم، خودم تست نکردم اما گمان می‌کنم به درستی کار کنه


import QtQuick 2.0
import QtMultimedia 5.0

Rectangle {
property string song_Number: ""

color:"white"
opacity: 0.5
radius: height/20

SoundEffect{
id:_Sound
source: "qrc:///songs/voices/songs/lid/"+song_Number+".wav"
}

MouseArea{
anchors.fill: parent

onClicked: {
_Sound.volume = 1
playSound.start()
}
}

// =============== Animations ===============


ParallelAnimation{
id: playSound
ScriptAction { script: {
_Sound.play()
_Sound.volume = 1
}
}

NumberAnimation {
id:_Fade;
target: _Sound;
property: "volume";
duration: 500;
from: 1; to:0;
}
}

}




ممنون ... ولی parallelAnımatıon واسه حالتی که دو تا اتفاق همزمان شروع بشه مناسبه ولی ولی من نیاز دارم تو mouse Press یه صدا ایجاد بشه وقتی که release میشه همون صدا آروم آروم کم بشه و وقتی بازم press شد صدایی که داره کم میشه (fade) از بین نره البته من یه شاتباهی که کرده بودم استفاده از یه soundscript بود ولی وقتی دو تا هم کردم تاثیری نداشت کد جدید به این شکل تغییر کرد:


import QtQuick 2.0
import QtMultimedia 5.0










Rectangle {




property var song_Number: ""
property var sound_number: 1 // با 1 و 2 شدن این متغییر دیگه نمونه های SoundEffect هام با هم تداخل ندارن
property var _color: "white"




color: _color
//opacity: 0.5
radius: 6
border.width: 1
border.color: "silver"




SoundEffect{
id:_Sound1
source: "qrc:///songs/voices/songs/lid/"+song_Number+".wav"
}




SoundEffect{
id:_Sound2
source: "qrc:///songs/voices/songs/lid/"+song_Number+".wav"
}




MouseArea{
anchors.fill: parent


onPressed: {


switch(sound_number){


case 1 : { _Sound1.volume=1; _Sound1.play(); sound_number =2} break;
case 2 : { _Sound1.volume=2; _Sound2.play(); sound_number =1} break;
}
}


onReleased: {


if (sound_number==1) { sound_number =2; _Fade2.start(); }
else if (sound_number==2) { sound_number =1; _Fade1.start(); }
}
}




// =============== Animations ===============


/*Sound:*/ NumberAnimation {id:_Fade1; target: _Sound1; property: "volume"; duration: 300; from: 1; to:0; }
/*Sound:*/ NumberAnimation {id:_Fade2; target: _Sound2; property: "volume"; duration: 300; from: 1; to:0; }


}




در واقع اگه یه پیانو رو در نظر بگیری تند تند که یه کلاویه رو بزنی صدای قبلی قطع نمیشه همیشه یه اکو داره که من احساس میکنم از fade شدنه تک تک صدا هاست