testplayer.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <qfile.h>
00021
00022
00023 #include <kapplication.h>
00024 #include <ktempfile.h>
00025 #include <kstandarddirs.h>
00026 #include <kparts/componentfactory.h>
00027 #include <ktrader.h>
00028 #include <kdebug.h>
00029
00030
00031 #include "player.h"
00032 #include "stretcher.h"
00033 #include "pluginconf.h"
00034
00035
00036 #include "testplayer.h"
00037
00041 TestPlayer::TestPlayer(QObject *parent, const char *name,
00042 const int playerOption, const float audioStretchFactor, const QString &sinkName) :
00043 QObject(parent, name)
00044 {
00045 m_playerOption = playerOption;
00046 m_audioStretchFactor = audioStretchFactor;
00047 m_stretcher = 0;
00048 m_player = 0;
00049 m_sinkName = sinkName;
00050 }
00051
00055 TestPlayer::~TestPlayer()
00056 {
00057 delete m_stretcher;
00058 delete m_player;
00059 }
00060
00066 void TestPlayer::setPlayerOption(const int playerOption) { m_playerOption = playerOption; }
00067
00074 void TestPlayer::setAudioStretchFactor(const float audioStretchFactor)
00075 { m_audioStretchFactor = audioStretchFactor; }
00076
00077 void TestPlayer::setSinkName(const QString &sinkName) { m_sinkName = sinkName; }
00078
00084 void TestPlayer::play(const QString &waveFile)
00085 {
00086
00087
00088 QString playFile = waveFile;
00089 QString tmpFile;
00090 if (m_audioStretchFactor != 1.0)
00091 {
00092 tmpFile = makeSuggestedFilename();
00093
00094
00095 m_stretcher = new Stretcher();
00096 if (m_stretcher->stretch(playFile, tmpFile, m_audioStretchFactor))
00097 {
00098 while (m_stretcher->getState() != Stretcher::ssFinished) qApp->processEvents();
00099 playFile = m_stretcher->getOutFilename();
00100 }
00101 delete m_stretcher;
00102 m_stretcher = 0;
00103 }
00104
00105
00106
00107 m_player = createPlayerObject(m_playerOption);
00108
00109 if (!m_player) return;
00110
00111 m_player->startPlay(playFile);
00112
00113
00114
00115
00116
00117
00118 while (m_player->playing()) qApp->processEvents();
00119
00120 m_player->stop();
00121 delete m_player;
00122 m_player = 0;
00123 if (!tmpFile.isEmpty()) QFile::remove(tmpFile);
00124 }
00125
00129 Player* TestPlayer::createPlayerObject(int playerOption)
00130 {
00131 Player* player = 0;
00132 QString plugInName;
00133 switch(playerOption)
00134 {
00135 case 1 :
00136 {
00137 plugInName = "KTTSD GStreamer Plugin";
00138 break;
00139 }
00140 default:
00141 {
00142 plugInName = "KTTSD Arts Plugin";
00143 break;
00144 }
00145 }
00146 KTrader::OfferList offers = KTrader::self()->query(
00147 "KTTSD/AudioPlugin", QString("Name == '%1'").arg(plugInName));
00148
00149 if(offers.count() == 1)
00150 {
00151 kdDebug() << "TestPlayer::createPlayerObject: Loading " << offers[0]->library() << endl;
00152 KLibFactory *factory = KLibLoader::self()->factory(offers[0]->library());
00153 if (factory)
00154 player =
00155 KParts::ComponentFactory::createInstanceFromLibrary<Player>(
00156 offers[0]->library(), this, offers[0]->library());
00157 else
00158 kdDebug() << "TestPlayer::createPlayerObject: Could not create factory." << endl;
00159 }
00160 if (player == 0)
00161 kdDebug() << "TestPlayer::createPlayerObject: Could not load " + plugInName +
00162 ". Is KDEDIRS set correctly?" << endl;
00163 else
00164
00165 if (playerOption == 1)
00166 {
00167 if (!player->requireVersion(0, 8, 7))
00168 {
00169 delete player;
00170 player = 0;
00171 }
00172 else
00173 player->setSinkName(m_sinkName);
00174 }
00175 return player;
00176 }
00177
00183 QString TestPlayer::makeSuggestedFilename()
00184 {
00185 KTempFile tempFile (locateLocal("tmp", "kttsmgr-"), ".wav");
00186 QString waveFile = tempFile.file()->name();
00187 tempFile.close();
00188 QFile::remove(waveFile);
00189 kdDebug() << "TestPlayer::makeSuggestedFilename: Suggesting filename: " << waveFile << endl;
00190 return PlugInConf::realFilePath(waveFile);
00191 }
00192
This file is part of the documentation for kttsd Library Version 3.3.90.