@@ -542,6 +542,92 @@ class CallbackBufferedStream : public BufferedStream {
542
542
}
543
543
};
544
544
545
+ /* *
546
+ * @brief Construct a new Converted Stream object. Both the data of the read and write
547
+ * operations will be converted with the help of the indicated converter.
548
+ *
549
+ * @tparam T
550
+ * @param out
551
+ * @param converter
552
+ */
553
+ template <typename T, class ConverterT >
554
+ class ConvertedStream : public AudioStreamX {
555
+
556
+ public:
557
+ ConvertedStream (Stream &stream, ConverterT &converter) : AudioStreamX() {
558
+ p_converter = &converter;
559
+ p_stream = &stream;
560
+ }
561
+
562
+ virtual int availableForWrite () { return p_stream->availableForWrite (); }
563
+
564
+ virtual size_t write (const uint8_t *buffer, size_t size) {
565
+ p_converter->convert ((uint8_t *)buffer, size);
566
+ return p_stream->write (buffer, size);
567
+ }
568
+
569
+ size_t readBytes (uint8_t *data, size_t length) override {
570
+ size_t result; p_stream->readBytes (data, length);
571
+ p_converter->convert (data, result);
572
+ return result;
573
+ }
574
+
575
+ // / Returns the available bytes in the buffer: to be avoided
576
+ virtual int available () override {
577
+ return p_stream->available ();
578
+ }
579
+
580
+ protected:
581
+ Stream *p_stream;
582
+ ConverterT *p_converter;
583
+
584
+ };
585
+
586
+ /* *
587
+ * Stream to which we can apply Filters for each channel
588
+ *
589
+ */
590
+ template <typename T, class TF >
591
+ class FilteredStream : public AudioStreamX {
592
+ public:
593
+ FilteredStream (Stream &stream, int channels=2 ) : AudioStreamX() {
594
+ this ->channels = channels;
595
+ p_stream = &stream;
596
+ p_converter = new ConverterNChannels<T,TF>(channels);
597
+ }
598
+
599
+ virtual size_t write (const uint8_t *buffer, size_t size) override {
600
+ p_converter->convert ((uint8_t *)buffer, size);
601
+ return p_stream->write (buffer, size);
602
+ }
603
+
604
+ size_t readBytes (uint8_t *data, size_t length) override {
605
+ size_t result; p_stream->readBytes (data, length);
606
+ p_converter->convert (data, result);
607
+ return result;
608
+ }
609
+
610
+ virtual int available () override {
611
+ return p_stream->available ();
612
+ }
613
+
614
+ virtual int availableForWrite () override {
615
+ return p_stream->availableForWrite ();
616
+ }
617
+
618
+ // / defines the filter for an individual channel - the first channel is 0
619
+ void setFilter (int channel, Filter<TF> *filter) {
620
+ p_converter->setFilter (channel, filter);
621
+ }
622
+
623
+ protected:
624
+ int channels;
625
+ Stream *p_stream;
626
+ ConverterNChannels<T,TF> *p_converter;
627
+
628
+ };
629
+
630
+
545
631
#ifndef IS_DESKTOP
546
632
/* *
547
633
* @brief TimerCallbackAudioStream Configuration
@@ -772,91 +858,6 @@ void TimerCallbackAudioStream::timerCallback(void *obj) {
772
858
}
773
859
}
774
860
775
- /* *
776
- * @brief Construct a new Converted Stream object. Both the data of the read and write
777
- * operations will be converted with the help of the indicated converter.
778
- *
779
- * @tparam T
780
- * @param out
781
- * @param converter
782
- */
783
- template <typename T, class ConverterT >
784
- class ConvertedStream : public AudioStreamX {
785
-
786
- public:
787
- ConvertedStream (Stream &stream, ConverterT &converter) : AudioStreamX() {
788
- p_converter = &converter;
789
- p_stream = &stream;
790
- }
791
-
792
- virtual int availableForWrite () { return p_stream->availableForWrite (); }
793
-
794
- virtual size_t write (const uint8_t *buffer, size_t size) {
795
- p_converter->convert ((uint8_t *)buffer, size);
796
- return p_stream->write (buffer, size);
797
- }
798
-
799
- size_t readBytes (uint8_t *data, size_t length) override {
800
- size_t result; p_stream->readBytes (data, length);
801
- p_converter->convert (data, result);
802
- return result;
803
- }
804
-
805
- // / Returns the available bytes in the buffer: to be avoided
806
- virtual int available () override {
807
- return p_stream->available ();
808
- }
809
-
810
- protected:
811
- Stream *p_stream;
812
- ConverterT *p_converter;
813
-
814
- };
815
-
816
- /* *
817
- * Stream to which we can apply Filters for each channel
818
- *
819
- */
820
- template <typename T, class TF >
821
- class FilteredStream : public AudioStreamX {
822
- public:
823
- FilteredStream (Stream &stream, int channels=2 ) : AudioStreamX() {
824
- this ->channels = channels;
825
- p_stream = &stream;
826
- p_converter = new ConverterNChannels<T,TF>(channels);
827
- }
828
-
829
- virtual size_t write (const uint8_t *buffer, size_t size) {
830
- p_converter->convert ((uint8_t *)buffer, size);
831
- return p_stream->write (buffer, size);
832
- }
833
-
834
- size_t readBytes (uint8_t *data, size_t length) override {
835
- size_t result; p_stream->readBytes (data, length);
836
- p_converter->convert (data, result);
837
- return result;
838
- }
839
-
840
- virtual int available () override {
841
- return p_stream->available ();
842
- }
843
-
844
- virtual int availableForWrite () { return p_stream->availableForWrite (); }
845
-
846
- // / defines the filter for an individual channel - the first channel is 0
847
- void setFilter (int channel, Filter<TF> *filter) {
848
- p_converter->setFilter (channel, filter);
849
- }
850
-
851
- protected:
852
- int channels;
853
- Stream *p_stream;
854
- ConverterNChannels<T,TF> *p_converter;
855
-
856
- };
857
-
858
-
859
-
860
861
#endif
861
862
862
863
} // namespace audio_tools
0 commit comments