翻譯|使用教程|編輯:鮑佳佳|2021-02-03 11:48:02.730|閱讀 546 次
概述:Audio Visualizer演示了如何實(shí)現(xiàn)將Qt 3D渲染與Qt Quick 2D元素結(jié)合使用的應(yīng)用程序。該示例使用媒體播放器播放音樂,并將音樂的大小可視化為動畫條。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Qt自帶集成開發(fā)環(huán)境(IDE),名為Qt Creator。它可以在Linux、OS X和Windows上運(yùn)行,并提供智能代碼完成、語法高亮、集成幫助系統(tǒng)、調(diào)試器和剖析器集成,還集成了所有主要的版本控制系統(tǒng)(如git、Bazaar)。除了Qt Creator外,Windows上的開發(fā)人員還可以使用Qt的Visual Studio插件。也可以使用其他的IDE(如KDE上的KDevelop)。但當(dāng)然絕不是必須使用任何IDE。
演示結(jié)合了Qt 3D渲染和Qt Quick 2元素。
Audio Visualizer演示了如何實(shí)現(xiàn)將Qt 3D渲染與Qt Quick 2D元素結(jié)合使用的應(yīng)用程序。該示例使用媒體播放器播放音樂,并將音樂的大小可視化為動畫條。
運(yùn)行示例
要從Qt Creator運(yùn)行示例,請打開“Welcome”模式,然后從“demo”中選擇demo。
Qt Quick 2D實(shí)施該audio-visualizer-qml/main.qml示例中的Qt快速實(shí)現(xiàn)MediaPlayer用于播放音頻內(nèi)容。
MediaPlayer { id: mediaPlayer autoPlay: true volume: 0.5 source: "qrc:/music/tiltshifted_lost_neon_sun.mp3"
播放器由playButton和c {stopButton}控制。基于點(diǎn)擊的按鈕state的mainview變化。
使用該Scene3D類型渲染3D內(nèi)容。音頻可視化器的狀態(tài)保留在中mainview。它會傳遞給visualizerbar動畫所需的。
Scene3D { anchors.fill: parent Visualizer { id: visualizer animationState: mainview.state numberOfBars: 120 barRotationTimeMs: 8160 // 68 ms per bar } }
Qt 3D實(shí)施
該示例的3D元素在中創(chuàng)建audio-visualizer-qml/Visualizer.qml。
Camera { id: camera projectionType: CameraLens.PerspectiveProjection fieldOfView: 45 aspectRatio: 1820 / 1080 nearPlane: 0.1 farPlane: 1000.0 position: Qt.vector3d(0.014, 0.956, 2.178) upVector: Qt.vector3d(0.0, 1.0, 0.0) viewCenter: Qt.vector3d(0.0, 0.7, 0.0) }
ANodeInstantiator用于創(chuàng)建使音樂大小可視化的小節(jié)。
// Bars CuboidMesh { id: barMesh xExtent: 0.1 yExtent: 0.1 zExtent: 0.1 } NodeInstantiator { id: collection property int maxCount: parent.numberOfBars model: maxCount delegate: BarEntity { id: cubicEntity entityMesh: barMesh rotationTimeMs: sceneRoot.barRotationTimeMs entityIndex: index entityCount: sceneRoot.numberOfBars entityAnimationsState: animationState magnitude: 0 } }
該visualizer還包含一個Entity顯示進(jìn)度。該元素具有曲線形狀的網(wǎng)格,并根據(jù)播放曲目的持續(xù)時間在一個級別上旋轉(zhuǎn)以顯示進(jìn)度。
// Progress Mesh { id: progressMesh source: "qrc:/meshes/progressbar.obj" } Transform { id: progressTransform property real defaultStartAngle: -90 property real progressAngle: defaultStartAngle rotationY: progressAngle } Entity { property Material progressMaterial: PhongMaterial { ambient: "#80C342" diffuse: "black" } components: [progressMesh, progressMaterial, progressTransform] }
在audio-visualizer-qml/BarEntity.qml其中有用于旋轉(zhuǎn)條形和更改條形顏色的動畫。這些條在遵循環(huán)形的水平上旋轉(zhuǎn)。同時,條的顏色被設(shè)置為動畫。
QQ2.NumberAnimation { id: angleAnimation target: angleTransform property: "barAngle" duration: rotationTimeMs loops: QQ2.Animation.Infinite running: true from: startAngle to: 360 + startAngle } QQ2.SequentialAnimation on barColor { id: barColorAnimations running: false QQ2.ColorAnimation { from: lowColor to: highColor duration: animationDuration } QQ2.PauseAnimation { duration: animationDuration } QQ2.ColorAnimation { from: highColor to: lowColor duration: animationDuration } }
每個小節(jié)的大小都從一個單獨(dú)的.raw文件中讀取,該文件基于正在播放的曲目。當(dāng)小節(jié)圍繞環(huán)旋轉(zhuǎn)時,高度將縮放以突出顯示當(dāng)前播放的位置。旋轉(zhuǎn)一整圈后,將獲取一個新值。
Qt相關(guān)組件:
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: