diff options
author | Lars Knoll <lars.knoll@qt.io> | 2022-05-13 10:33:07 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2022-05-23 09:36:00 +0200 |
commit | 616e78c68b524cf5487947762bfe24784b40b66c (patch) | |
tree | 3a5c36e8073ce611a4ebab7d69064449b9772434 /examples | |
parent | 8df415d5bcf23462bedb4cb7601b909851ee15dd (diff) | |
download | qtmultimedia-616e78c68b524cf5487947762bfe24784b40b66c.tar.gz |
spatial audio: Use centimeters by default
Qt Quick 3D uses a centimeters by default for positions and
distances. Align our API with that choice.
Add a distanceScale property to enable the user to choose a
different scale.
Store all our data internally in meters, to be aligned with the
data expected by resonance audio and to make sure we don't
mess up the existing configuration when the distance scale changes.
Change-Id: Id06cb49bd152bfa7920c096c662ff103041261e0
Reviewed-by: Rafael Roquetto <rafael.roquetto@qt.io>
Diffstat (limited to 'examples')
-rw-r--r-- | examples/multimedia/spatialaudio/main.cpp | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/examples/multimedia/spatialaudio/main.cpp b/examples/multimedia/spatialaudio/main.cpp index e7ba56962..4fcd5fe8f 100644 --- a/examples/multimedia/spatialaudio/main.cpp +++ b/examples/multimedia/spatialaudio/main.cpp @@ -74,8 +74,8 @@ public: grid->addWidget(new QLabel(tr("Elevation (-90 - 90 degree)")), 2, 0); grid->addWidget(elevation, 2, 1); distance = new QSlider(Qt::Horizontal); - distance->setRange(0, 100); - distance->setValue(10); + distance->setRange(0, 1000); + distance->setValue(100); grid->addWidget(new QLabel(tr("Distance (0 - 10 meter):")), 3, 0); grid->addWidget(distance, 3, 1); occlusion = new QSlider(Qt::Horizontal); @@ -84,8 +84,8 @@ public: grid->addWidget(occlusion, 4, 1); roomDimension = new QSlider(Qt::Horizontal); - roomDimension->setRange(0, 100); - roomDimension->setValue(5); + roomDimension->setRange(0, 10000); + roomDimension->setValue(500); grid->addWidget(new QLabel(tr("Room dimension (0 - 100 meter):")), 5, 0); grid->addWidget(roomDimension, 5, 1); @@ -107,9 +107,9 @@ public: connect(fileEdit, &QLineEdit::textChanged, this, &AudioWidget::fileChanged); connect(fileDialogButton, &QPushButton::clicked, this, &AudioWidget::openFileDialog); - connect(azimuth, &QSlider::valueChanged, this, &AudioWidget::newPosition); - connect(elevation, &QSlider::valueChanged, this, &AudioWidget::newPosition); - connect(distance, &QSlider::valueChanged, this, &AudioWidget::newPosition); + connect(azimuth, &QSlider::valueChanged, this, &AudioWidget::updatePosition); + connect(elevation, &QSlider::valueChanged, this, &AudioWidget::updatePosition); + connect(distance, &QSlider::valueChanged, this, &AudioWidget::updatePosition); connect(occlusion, &QSlider::valueChanged, this, &AudioWidget::newOcclusion); connect(roomDimension, &QSlider::valueChanged, this, &AudioWidget::updateRoom); @@ -135,16 +135,15 @@ public: engine.start(); sound = new QSpatialAudioSoundSource(&engine); - - distance->setValue(1); + updatePosition(); } void setFile(const QString &file) { fileEdit->setText(file); } private slots: - void newPosition() + void updatePosition() { float az = azimuth->value()/180.*M_PI; float el = elevation->value()/180.*M_PI; - float d = distance->value()/10.; + float d = distance->value(); float x = d*sin(az)*cos(el); float y = d*cos(az)*cos(el); @@ -172,7 +171,7 @@ private slots: void updateRoom() { float d = roomDimension->value(); - room->setDimensions(QVector3D(d, d, 4)); + room->setDimensions(QVector3D(d, d, 400)); room->setReflectionGain(float(reflectionGain->value())/100); room->setReverbGain(float(reverbGain->value())/100); } |