Audio Player Module

Introduction

The AudioPlayer_C module provides a streamlined interface for playing audio using the QMediaPlayer framework on MConn or desktop. It provides core multimedia functionalities such as play, pause, stop, seek, and volume control functionalities.

This module is ideal for applications that need media playback integration and want to control or monitor the player from QML in real-time.

Primary Functions of AudioPlayer_C

initMediaPlayer (public function) Initializes the QMediaPlayer object, connects its internal signals to update playback status, and sets initial volume.

void AudioPlayer_C::initMediaPlayer();

destroyMediaPlayer (public function) Destroys the QMediaPlayer object to release the audio hardware (used especially when switching control to other modules like a radio player).

void AudioPlayer_C::destroyMediaPlayer();

play (public function) Plays a local audio file. Default path is /rw_data/test.wav.

void AudioPlayer_C::play(QString path = "/rw_data/test.wav");

pause (public function) Pauses playback.

void AudioPlayer_C::pause();

stop (public function) Stops playback and resets internal state.

void AudioPlayer_C::stop();

repeat (public function) Enables or disables repeat mode. Internally, a timer checks for end of playback to restart the track.

void AudioPlayer_C::repeat(bool repeat);

setVolume / getVolume (public function) Sets or gets the volume. Volume value is expected as a percentage (0–100), internally scaled to ALSA's 0.0–1.0 range.

void AudioPlayer_C::setVolume(double volume);
double AudioPlayer_C::getVolume();

formatMillisec (public function) Converts milliseconds into a formatted time string hh:mm:ss.

QString AudioPlayer_C::formatMillisec(int milliseconds);

prepareHardware / resetHardware (public function) Controls GPIO pin 149 to switch audio routing hardware for playback.

void AudioPlayer_C::prepareHardware(bool rds_out = false);
void AudioPlayer_C::resetHardware();

QML-Accessible Properties

These properties are exposed via Q_PROPERTY and are directly bindable in QML:

Property Type Description
position int Current playback position in milliseconds
duration int Total duration of audio track
volume double Current volume level (0–100%)
isPlaying bool True if audio is currently playing

Usage

Initialize and Expose to QML

m_audioPlayer = std::make_shared<AudioPlayer_C>(this);
m_engine->rootContext()->setContextProperty("AudioPlayer_Q", m_audioPlayer.get());

Playback from QML

Button {
    text: AudioPlayer_Q.isPlaying ? "Pause" : "Play"
    onClicked: {
        if (AudioPlayer_Q.isPlaying)
            AudioPlayer_Q.pause()
        else
            AudioPlayer_Q.play("/rw_data/test.wav")
    }
}
Button {
    text: "Stop"
    onClicked: AudioPlayer_Q.stop()
}

Volume Control in QML

Slider {
    from: 0
    to: 100
    value: AudioPlayer_Q.volume
    onMoved: AudioPlayer_Q.setVolume(value)
}

Seek Functionality in QML

Slider {
    from: 0
    to: AudioPlayer_Q.duration
    value: AudioPlayer_Q.position
    onMoved: AudioPlayer_Q.position = value
}

Enable Repeat Playback

CheckBox {
    text: "Repeat"
    onCheckedChanged: AudioPlayer_Q.repeat(checked)
}