Unsolved Unable to play a wav file with Audio component
-
Hi,
Do you see any error message on the console ?
-
SGaist,
Before recompîling Qt5.51 without pulseaudio, I had the following message in the console:
PulseAudioService: pa_context_connect() failed
Unfortunately, recompiling without pulseaudio doesnot display the message anymore...but it doesn't fix anything. I can't hear anything :(
K.
-
Do you have Pulseaudio running on your device ?
-
No.
I've removed "pulseaudio" from the Yocto generated Distro.But the command line:
aplay /opt/track.wav
still works though...
-
Because it's using ALSA directly.
Did you try to build the ALSA backend for Qt Multimedia ?
-
Yes, I think so.
I can find libqtaudio_alsa.so in /usr/lib/qt/plugins.
-
Start your application with
QT_DEBUG_PLUGINS=1
to see if there's a problem when loading the plugin. -
At first glance, the plugins get loaded.
Got keys from plugin meta data ("alsa") QFactoryLoader::QFactoryLoader() looking at "/usr/lib/qt5/plugins/audio/libqtaudio_alsa.so.new" Found metadata in lib /usr/lib/qt5/plugins/audio/libqtaudio_alsa.so.new, metadata= { "IID": "org.qt-project.qt.audiosystemfactory/5.0", "MetaData": { "Keys": [ "alsa" ] }, "className": "QAlsaPlugin", "debug": false, "version": 328961 } Got keys from plugin meta data ("alsa") QFactoryLoader::QFactoryLoader() checking directory path "/opt/pga/audio" ... loaded library "/usr/lib/qt5/plugins/audio/libqtaudio_alsa.so"
:(
-
Looks good on that point.
Did you check which output QtMultimedia sees as available ?
-
What do you mean exactly ?
Yesterday, in the main.cpp, I dumped the
QAudioDeviceInfo::availableDevices(QAudio::AudioOutput)
Is that what you meant ? And yes, it dumps the same devices as with
aplay -L
-
That's that yes and the result also looks good.
Did you check whether the element raises an error ?
-
No error raised.
However, in the
onClick()
handler whereidPlay->play()
is launched (see code snippet above..),
I traced the values of some properties of thaAudio
component.qml: status = 2 qml: playvolume = 1 qml: muted = false qml: error code = 0 , string= qml: src = file:///opt/pga/track00.wav qml: availability = 0 qml: duration = -1 qml: hasAudio = false
Weird. duration = -1, hasAudio = false and however, no error code / string...
-
The path to the file looks different from your QML sample code.
-
Yes, because I changed the path between my tests, but the paths are valids.
I really don't understand why Qt does not raise any error.
Everything looks correct.
status = 2, that is: "the Media has been loaded
".So it looks like a final phase is not complete. Isn't it ?
-
Can you test the functionality with C++ ?
-
I've put this sample code in the C++ side:
init() { ... connect(&m_player, SIGNAL(error(QMediaPlayer::Error)), this, SLOT(on_mediaPlayer_error(QMediaPlayer::Error)));^ connect(&m_player, SIGNAL(stateChanged(QMediaPlayer::State)), this, SLOT(on_mediaPlayer_stateChanged(QMediaPlayer::State)));^ connect(&m_player, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)), this, SLOT(on_mediaPlayer_mediaStatusChanged(QMediaPlayer::MediaStatus))); qDebug() << "Attempt to read mediacontent"; QMediaContent content(QUrl::fromLocalFile("/opt/pga/track00.wav")); qDebug() << "MediaContent: isNull = " << content.isNull(); m_player.setMedia(content); m_player.play(); }
Each of the slots above print the value of their respective parameter in stdout.
Output from my host linux:
Attempt to read mediacontent MediaContent: isNull = false <MainWindow::on_mediaPlayer_mediaStatusChanged> status = QMediaPlayer::LoadingMedia <MainWindow::on_mediaPlayer_stateChanged> state = QMediaPlayer::PlayingState <MainWindow::on_mediaPlayer_mediaStatusChanged> status = QMediaPlayer::BufferedMedia
Output from my colibri-t20:
Attempt to read mediacontent MediaContent: isNull = false <MainWindow::on_mediaPlayer_mediaStatusChanged> status = QMediaPlayer::LoadingMedia
It's stuck on LoadingMedia.
No more.:(
-
Ok...
You should rebuilt the plugin uncommenting the DEBUG_AUDIO define to see if it gives you more information about what is happening.
-
Hi,
Unfortunately it doesn't trace more information at all...
Found metadata in lib /usr/lib/qt5/plugins/audio/libqtaudio_alsa.so, metadata= { "IID": "org.qt-project.qt.audiosystemfactory/5.0", "MetaData": { "Keys": [ "alsa" ] }, "className": "QAlsaPlugin", "debug": false, "version": 328961 } Got keys from plugin meta data ("alsa") QFactoryLoader::QFactoryLoader() checking directory path "/opt/pga/audio" ... loaded library "/usr/lib/qt5/plugins/audio/libqtaudio_alsa.so" DeviceInfo name = "sysdefault:CARD=colibrit20wm971" , codecs = "audio/pcm" DeviceInfo name = "default:CARD=colibrit20wm971" , codecs = "audio/pcm" DeviceInfo name = "default" , codecs = "audio/pcm" Default OutputDevice: "sysdefault:CARD=colibrit20wm971" Attempt to read mediacontent MediaContent: isNull = false <MainWindow::on_mediaPlayer_mediaStatusChanged> status = QMediaPlayer::LoadingMedia , bufferStatus = 0 <MainWindow::initialize()> : bufferStatus = 0 screen dpi = 96.1517 screen geo = QRect(0,0 480x800) QFactoryLoader::QFactoryLoader() checking directory path "/usr/lib/qt5/plugins/accessiblebridge" ... QFactoryLoader::QFactoryLoader() checking directory path "/opt/pga/accessiblebridge" ... QSGContext::initialize: stencil buffer support missing, expect rendering errors Updating catalog. <MediaCatalog::roleNames() > called. qml: size of catalog: 3 qml: playlaunched...status = 1 qml: playvolume = 1 qml: muted = false qml: error code = 0 , string= qml: src = qml: availability = 0 qml: duration = -1 qml: hasAudio = false
-
Does the device info look correct for your system ?
Can you compare with that aplay uses ? -
Yes, it is always the same.
I have also edited the qalsaaudiooutput.cpp and added some fprintf() statements and nothing is displayed in the console.
I put a message inopen()
and in theconstructor
However, it prints
loaded library "/usr/lib/qt5/plugins/audio/libqtaudio_alsa.so"
I don't know what I can do to figure out what's happening.