OESF Portables Forum
Everything Else => Zaurus - Everything Development => Distros, Development, and Model Specific Forums => Archived Forums => Qt/Qtopia => Topic started by: speculatrix on February 20, 2007, 06:45:41 pm
-
I have successfully played sound like this...
#include
QSound soundSample(Resource::findSound("wave"));
soundSample.play();
However, I am trying to set the volume control.. I have tried everything I can find from googling, but no joy!
If anyone has any ideas, I'd be terrible grateful!
Here's what I have so far:[/code]
Config cfgSound("Sound");
cfgSound.setGroup("System");
int oldVolume = cfgSound.readNumEntry("Volume", 0);
cfgSound.writeEntry("Volume", 66);
int newVolume = cfgSound.readNumEntry("Volume", 0);
QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << FALSE;
[/code]
the code runs but the volume doesn't change..
reading it and calling readNumEntry then writeEntry then readNumEntry reveals the new value is accepted, but the volume level doesn't change!
-
I have successfully played sound like this...#include
QSound soundSample(Resource::findSound("wave"));
soundSample.play();
However, I am trying to set the volume control.. I have tried everything I can find from googling, but no joy!
If anyone has any ideas, I'd be terrible grateful!
Here's what I have so far:[/code]
Config cfgSound("Sound");
cfgSound.setGroup("System");
int oldVolume = cfgSound.readNumEntry("Volume", 0);
cfgSound.writeEntry("Volume", 66);
int newVolume = cfgSound.readNumEntry("Volume", 0);
QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << FALSE;
[/code]
the code runs but the volume doesn't change..
reading it and calling readNumEntry then writeEntry then readNumEntry reveals the new value is accepted, but the volume level doesn't change!
[div align=\"right\"][a href=\"index.php?act=findpost&pid=154831\"][{POST_SNAPBACK}][/a][/div]
you can use tkvol to change the volume from the command line. the code for tkvol is included in the zplayer source....
-
thanks for that... looks like he does an IOCTL on the mixer device and then tells qtopia of the change! so, I am guessing the proper way doesn't work... using google I only found a few places where the official way was discussed, and one comment said that TrollTech changed the interface from the proprietary/closed versions and the public GPL one.
I shall copy this technique, although as a programmer I'd prefer to learn the proper method so as to achieve device independence!
~/build/zplayer-0.1.1/tkmix> more qtopia_volume.cpp
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "qtopia_volume.h"
bool QtopiaVolume::setLevel(int level)
{
int iDevice, isetlv = (level + (level << 8));
// Set value
if ((iDevice = open("/dev/mixer", O_RDONLY)) == -1) {
qDebug("Syntax error in open device\n");
return false;
}
if (ioctl(iDevice, MIXER_WRITE(0), &isetlv) == -1) {
qDebug("Syntax error in set volume\n");
return false;
}
// Update applet
QCopEnvelope("QPE/System", "volumeChange(bool)") << FALSE;
close(iDevice);
return true;
}
int QtopiaVolume::getCurrentLevel()
{
Config cfg("qpe");
cfg.setGroup("Volume");
return cfg.readNumEntry("VolumePercent", 0);
}