@@ -39,21 +39,21 @@ static void level_detector_event_handler(Event evt) {
3939class  MyStreamRecording  : public  DataSink 
4040{
4141    public: 
42-     DataSource & upStream;
42+     SplitterChannel * upStream;
4343
4444    public: 
4545    uint8_t  *dest;
4646    size_t  *dest_pos_ptr;
4747    size_t  dest_max;
4848    bool  request_stop;
4949
50-     MyStreamRecording (DataSource & source);
50+     MyStreamRecording (SplitterChannel * source);
5151    virtual  ~MyStreamRecording ();
5252
5353    virtual  int  pullRequest ();
5454};
5555
56- MyStreamRecording::MyStreamRecording ( DataSource & source  ) : upStream(  source  )
56+ MyStreamRecording::MyStreamRecording (SplitterChannel * source) : upStream(source)
5757{
5858}
5959
@@ -63,18 +63,20 @@ MyStreamRecording::~MyStreamRecording()
6363
6464int  MyStreamRecording::pullRequest ()
6565{
66-     ManagedBuffer data = this ->upStream .pull ();
66+     uint8_t  *pull_buf = this ->dest  + *this ->dest_pos_ptr ;
67+     size_t  n = this ->dest_max  - *this ->dest_pos_ptr ;
68+ 
69+     if  (n > 0 ) {
70+         n = this ->upStream ->pullInto (pull_buf, n) - pull_buf;
71+     }
6772
68-     size_t  n = MIN ((size_t )data.length (), this ->dest_max  - *this ->dest_pos_ptr );
6973    if  (n == 0  || this ->request_stop ) {
70-         this ->upStream . disconnect ();
74+         this ->upStream -> disconnect ();
7175        this ->request_stop  = false ;
7276    } else  {
73-         //  Copy and convert signed 8-bit to unsigned 8-bit data.
74-         const  uint8_t  *src = data.getBytes ();
75-         uint8_t  *dest = this ->dest  + *this ->dest_pos_ptr ;
77+         //  Convert signed 8-bit to unsigned 8-bit data.
7678        for  (size_t  i = 0 ; i < n; ++i) {
77-             *dest++ = *src++ +  128 ;
79+             pull_buf[i] +=  128 ;
7880        }
7981        *this ->dest_pos_ptr  += n;
8082    }
@@ -120,7 +122,7 @@ void microbit_hal_microphone_start_recording(uint8_t *buf, size_t max_len, size_
120122    splitterChannel->requestSampleRate (rate);
121123
122124    if  (recording == NULL ) {
123-         recording = new  MyStreamRecording (* splitterChannel);
125+         recording = new  MyStreamRecording (splitterChannel);
124126    } else  {
125127        if  (microbit_hal_microphone_is_recording ()) {
126128            microbit_hal_microphone_stop_recording ();
0 commit comments