20#include "kaudioplaystream.h"
21#include "kaudioplaystream_p.h"
23#include <kartsserver.h>
24#include <kaudiomanagerplay.h>
27#include <soundserver.h>
40KAudioPlayStreamPrivate::KAudioPlayStreamPrivate(
KArtsServer* server,
const TQString title, TQObject* p,
const char* n )
44 , _effectrack( Arts::StereoEffectStack::null() )
45 , _polling( true ), _attached( false ), _effects( true )
51KAudioPlayStreamPrivate::~KAudioPlayStreamPrivate()
55 if ( _effects ) _effectrack.stop();
59void KAudioPlayStreamPrivate::initaRts() {
62 _effectrack = Arts::DynamicCast( _server->server().createObject(
"Arts::StereoEffectStack" ) );
63 if ( _effectrack.isNull() )
69 _bs2a = Arts::DynamicCast( _server->server().createObject(
"Arts::ByteStreamToAudio" ) );
71 kdFatal( 400 ) <<
"Couldn't create ByteStreamToAudio" <<
endl;
75 Arts::connect( _effectrack, _play->amanPlay() );
76 Arts::connect( _bs2a, _effectrack );
78 Arts::connect( _bs2a, _play->amanPlay() );
82 if ( _effects ) _effectrack.start();
87 , d( new KAudioPlayStreamPrivate( server, title, this ) )
102 return d->_effectrack;
107 kdDebug( 400 ) << k_funcinfo <<
"samplingRate: " << samplingRate <<
" bits: " << bits <<
" channels: " << channels <<
endl;
110 d->_bs2a.samplingRate( samplingRate );
111 d->_bs2a.channels( channels );
112 d->_bs2a.bits( bits );
114 d->_sender =
new KByteSoundProducer(
this, d->_server->server().minStreamBufferTime(), samplingRate, bits, channels,
"PS" );
115 d->_artssender = Arts::ByteSoundProducerV2::_from_base( d->_sender );
116 Arts::connect( d->_artssender,
"outdata", d->_bs2a,
"indata" );
119 d->_artssender.start();
122 Arts::Dispatcher::the()->ioManager()->processOneEvent(
false );
133 d->_attached =
false;
136 d->_artssender.stop();
142 Arts::disconnect( d->_artssender, d->_bs2a );
143 d->_artssender = Arts::ByteSoundProducerV2::null();
159 TQByteArray bytearray( packet->size );
160 bytearray.setRawData( (
char* )packet->contents, packet->size );
163 bytearray.resetRawData( (
char* )packet->contents, packet->size );
174KByteSoundProducer::KByteSoundProducer(
KAudioPlayStream* impl,
float minBufferTime,
int rate,
int bits,
int channels,
const char * title )
175 : _samplingRate( rate )
176 , _channels( channels )
183 float streamBufferTime;
186 streamBufferTime = ( float )( _packets * packetCapacity * 1000 )
187 / ( float )( _samplingRate * _channels * 2 );
188 }
while ( streamBufferTime < minBufferTime );
192KByteSoundProducer::~KByteSoundProducer()
196void KByteSoundProducer::streamStart() { outdata.setPull( _packets, packetCapacity ); }
197void KByteSoundProducer::streamEnd() { outdata.endPull(); }
199void KByteSoundProducer::request_outdata( Arts::DataPacket<Arts::mcopbyte> *packet )
201 if ( _impl->running() ) {
202 _impl->fillData( packet );
206#include "kaudioplaystream.moc"
207#include "kaudioplaystream_p.moc"
KArtsServer is a wrapper to conveniently get a reference to a SoundServer, and restart artsd when nec...
KDE Wrapper for Arts::Synth_AMAN_PLAY.
A wrapper around ByteSoundProducer/ByteStreamToAudio/Synth_AMAN_PLAY.
bool polling() const
Returns the polling state.
void setPolling(bool)
Controls wether this Stream should poll the data from you via the signal requestData() or you use wri...
Arts::StereoEffectStack effectStack() const
KAudioPlayStream(KArtsServer *server, const TQString title, TQObject *parent=0, const char *name=0)
Creates a KAudioPlayStream on server with a title.
void write(TQByteArray &data)
Write data into the inputbuffer.
~KAudioPlayStream()
Destructs the KAudioPlayStream.
void fillData(Arts::DataPacket< Arts::mcopbyte > *packet)
void requestData(TQByteArray &)
This signal is emitted when audio should be played.
void stop()
Stops the stream.
void start(int samplingRate, int bits, int channels)
Start the stream.
kdbgstream kdFatal(int area=0)
kdbgstream kdWarning(int area=0)
kndbgstream & endl(kndbgstream &s)
kdbgstream kdDebug(int area=0)