mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 17:10:04 +00:00 
			
		
		
		
	Add play audio functionality to media manager
This commit is contained in:
		
							parent
							
								
									318f35aebd
								
							
						
					
					
						commit
						3ad3c98daf
					
				
					 2 changed files with 64 additions and 2 deletions
				
			
		|  | @ -1,6 +1,11 @@ | ||||||
| #include <scwx/qt/manager/media_manager.hpp> | #include <scwx/qt/manager/media_manager.hpp> | ||||||
| #include <scwx/util/logger.hpp> | #include <scwx/util/logger.hpp> | ||||||
| 
 | 
 | ||||||
|  | #include <QAudioDevice> | ||||||
|  | #include <QAudioOutput> | ||||||
|  | #include <QMediaPlayer> | ||||||
|  | #include <QUrl> | ||||||
|  | 
 | ||||||
| namespace scwx | namespace scwx | ||||||
| { | { | ||||||
| namespace qt | namespace qt | ||||||
|  | @ -14,14 +19,67 @@ static const auto        logger_    = scwx::util::Logger::Create(logPrefix_); | ||||||
| class MediaManager::Impl | class MediaManager::Impl | ||||||
| { | { | ||||||
| public: | public: | ||||||
|    explicit Impl() {} |    explicit Impl(MediaManager* self) : | ||||||
|  |        self_ {self}, | ||||||
|  |        mediaPlayer_ {new QMediaPlayer(self)}, | ||||||
|  |        audioOutput_ {new QAudioOutput(self)} | ||||||
|  |    { | ||||||
|  |       audioOutput_->setVolume(1.0f); | ||||||
|  |       mediaPlayer_->setAudioOutput(audioOutput_); | ||||||
|  | 
 | ||||||
|  |       logger_->debug("Audio device: {}", | ||||||
|  |                      audioOutput_->device().description().toStdString()); | ||||||
|  | 
 | ||||||
|  |       ConnectSignals(); | ||||||
|  |    } | ||||||
| 
 | 
 | ||||||
|    ~Impl() {} |    ~Impl() {} | ||||||
|  | 
 | ||||||
|  |    void ConnectSignals(); | ||||||
|  | 
 | ||||||
|  |    MediaManager* self_; | ||||||
|  | 
 | ||||||
|  |    QMediaPlayer* mediaPlayer_; | ||||||
|  |    QAudioOutput* audioOutput_; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| MediaManager::MediaManager() : p(std::make_unique<Impl>()) {} | MediaManager::MediaManager() : p(std::make_unique<Impl>(this)) {} | ||||||
| MediaManager::~MediaManager() = default; | MediaManager::~MediaManager() = default; | ||||||
| 
 | 
 | ||||||
|  | void MediaManager::Impl::ConnectSignals() | ||||||
|  | { | ||||||
|  |    QObject::connect(audioOutput_, | ||||||
|  |                     &QAudioOutput::deviceChanged, | ||||||
|  |                     self_, | ||||||
|  |                     [this]() | ||||||
|  |                     { | ||||||
|  |                        logger_->debug( | ||||||
|  |                           "Audio device changed: {}", | ||||||
|  |                           audioOutput_->device().description().toStdString()); | ||||||
|  |                     }); | ||||||
|  | 
 | ||||||
|  |    QObject::connect(mediaPlayer_, | ||||||
|  |                     &QMediaPlayer::errorOccurred, | ||||||
|  |                     self_, | ||||||
|  |                     [](QMediaPlayer::Error error, const QString& errorString) | ||||||
|  |                     { | ||||||
|  |                        logger_->error("Error {}: {}", | ||||||
|  |                                       static_cast<int>(error), | ||||||
|  |                                       errorString.toStdString()); | ||||||
|  |                     }); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void MediaManager::Play(types::AudioFile media) | ||||||
|  | { | ||||||
|  |    const std::string path = types::GetMediaPath(media); | ||||||
|  | 
 | ||||||
|  |    logger_->debug("Playing audio: {}", path); | ||||||
|  | 
 | ||||||
|  |    p->mediaPlayer_->setSource(QUrl(QString::fromStdString(path))); | ||||||
|  | 
 | ||||||
|  |    QMetaObject::invokeMethod(p->mediaPlayer_, &QMediaPlayer::play); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| std::shared_ptr<MediaManager> MediaManager::Instance() | std::shared_ptr<MediaManager> MediaManager::Instance() | ||||||
| { | { | ||||||
|    static std::weak_ptr<MediaManager> mediaManagerReference_ {}; |    static std::weak_ptr<MediaManager> mediaManagerReference_ {}; | ||||||
|  |  | ||||||
|  | @ -1,5 +1,7 @@ | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
|  | #include <scwx/qt/types/media_types.hpp> | ||||||
|  | 
 | ||||||
| #include <memory> | #include <memory> | ||||||
| 
 | 
 | ||||||
| #include <QObject> | #include <QObject> | ||||||
|  | @ -20,6 +22,8 @@ public: | ||||||
|    explicit MediaManager(); |    explicit MediaManager(); | ||||||
|    ~MediaManager(); |    ~MediaManager(); | ||||||
| 
 | 
 | ||||||
|  |    void Play(types::AudioFile media); | ||||||
|  | 
 | ||||||
|    static std::shared_ptr<MediaManager> Instance(); |    static std::shared_ptr<MediaManager> Instance(); | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Dan Paulat
						Dan Paulat