@@ -123,10 +123,8 @@ void AudioStreamPlaybackWAV::do_resample(const Depth *p_src, AudioFrame *p_dst,
123
123
int16_t nibble, diff, step;
124
124
125
125
p_ima_adpcm[i].last_nibble ++;
126
- const uint8_t *src_ptr = (const uint8_t *)base->data ;
127
- src_ptr += AudioStreamWAV::DATA_PAD;
128
126
129
- uint8_t nbb = src_ptr [(p_ima_adpcm[i].last_nibble >> 1 ) * (is_stereo ? 2 : 1 ) + i];
127
+ uint8_t nbb = p_src [(p_ima_adpcm[i].last_nibble >> 1 ) * (is_stereo ? 2 : 1 ) + i];
130
128
nibble = (p_ima_adpcm[i].last_nibble & 1 ) ? (nbb >> 4 ) : (nbb & 0xF );
131
129
step = _ima_adpcm_step_table[p_ima_adpcm[i].step_index ];
132
130
@@ -184,9 +182,8 @@ void AudioStreamPlaybackWAV::do_resample(const Depth *p_src, AudioFrame *p_dst,
184
182
185
183
if (p_qoa->data_ofs != new_data_ofs) {
186
184
p_qoa->data_ofs = new_data_ofs;
187
- const uint8_t *src_ptr = (const uint8_t *)base->data ;
188
- src_ptr += p_qoa->data_ofs + AudioStreamWAV::DATA_PAD;
189
- qoa_decode_frame (src_ptr, p_qoa->frame_len , &p_qoa->desc , p_qoa->dec , &p_qoa->dec_len );
185
+ const uint8_t *ofs_src = (uint8_t *)p_src + p_qoa->data_ofs ;
186
+ qoa_decode_frame (ofs_src, p_qoa->frame_len , &p_qoa->desc , p_qoa->dec .ptr (), &p_qoa->dec_len );
190
187
}
191
188
192
189
uint32_t dec_idx = (interp_pos % QOA_FRAME_LEN) * p_qoa->desc .channels ;
@@ -267,7 +264,7 @@ void AudioStreamPlaybackWAV::do_resample(const Depth *p_src, AudioFrame *p_dst,
267
264
}
268
265
269
266
int AudioStreamPlaybackWAV::mix (AudioFrame *p_buffer, float p_rate_scale, int p_frames) {
270
- if (! base->data || !active) {
267
+ if (base->data . is_empty () || !active) {
271
268
for (int i = 0 ; i < p_frames; i++) {
272
269
p_buffer[i] = AudioFrame (0 , 0 );
273
270
}
@@ -324,8 +321,7 @@ int AudioStreamPlaybackWAV::mix(AudioFrame *p_buffer, float p_rate_scale, int p_
324
321
325
322
/* audio data */
326
323
327
- uint8_t *dataptr = (uint8_t *)base->data ;
328
- const void *data = dataptr + AudioStreamWAV::DATA_PAD;
324
+ const uint8_t *data = base->data .ptr () + AudioStreamWAV::DATA_PAD;
329
325
AudioFrame *dst_buff = p_buffer;
330
326
331
327
if (format == AudioStreamWAV::FORMAT_IMA_ADPCM) {
@@ -483,11 +479,7 @@ void AudioStreamPlaybackWAV::set_sample_playback(const Ref<AudioSamplePlayback>
483
479
484
480
AudioStreamPlaybackWAV::AudioStreamPlaybackWAV () {}
485
481
486
- AudioStreamPlaybackWAV::~AudioStreamPlaybackWAV () {
487
- if (qoa.dec ) {
488
- memfree (qoa.dec );
489
- }
490
- }
482
+ AudioStreamPlaybackWAV::~AudioStreamPlaybackWAV () {}
491
483
492
484
// ///////////////////
493
485
@@ -554,7 +546,7 @@ double AudioStreamWAV::get_length() const {
554
546
break ;
555
547
case AudioStreamWAV::FORMAT_QOA:
556
548
qoa_desc desc = {};
557
- qoa_decode_header (( uint8_t *)data + DATA_PAD, data_bytes, &desc);
549
+ qoa_decode_header (data. ptr () + DATA_PAD, data_bytes, &desc);
558
550
len = desc.samples * desc.channels ;
559
551
break ;
560
552
}
@@ -572,36 +564,26 @@ bool AudioStreamWAV::is_monophonic() const {
572
564
573
565
void AudioStreamWAV::set_data (const Vector<uint8_t > &p_data) {
574
566
AudioServer::get_singleton ()->lock ();
575
- if (data) {
576
- memfree (data);
577
- data = nullptr ;
578
- data_bytes = 0 ;
579
- }
580
567
581
- int datalen = p_data.size ();
582
- if (datalen) {
583
- const uint8_t *r = p_data.ptr ();
584
- int alloc_len = datalen + DATA_PAD * 2 ;
585
- data = memalloc (alloc_len); // alloc with some padding for interpolation
586
- memset (data, 0 , alloc_len);
587
- uint8_t *dataptr = (uint8_t *)data;
588
- memcpy (dataptr + DATA_PAD, r, datalen);
589
- data_bytes = datalen;
590
- }
568
+ int src_data_len = p_data.size ();
569
+
570
+ data.clear ();
571
+
572
+ int alloc_len = src_data_len + DATA_PAD * 2 ;
573
+ data.resize (alloc_len);
574
+ memset (data.ptr (), 0 , alloc_len);
575
+ memcpy (data.ptr () + DATA_PAD, p_data.ptr (), src_data_len);
576
+ data_bytes = src_data_len;
591
577
592
578
AudioServer::get_singleton ()->unlock ();
593
579
}
594
580
595
581
Vector<uint8_t > AudioStreamWAV::get_data () const {
596
582
Vector<uint8_t > pv;
597
583
598
- if (data) {
584
+ if (! data. is_empty () ) {
599
585
pv.resize (data_bytes);
600
- {
601
- uint8_t *w = pv.ptrw ();
602
- uint8_t *dataptr = (uint8_t *)data;
603
- memcpy (w, dataptr + DATA_PAD, data_bytes);
604
- }
586
+ memcpy (pv.ptrw (), data.ptr () + DATA_PAD, data_bytes);
605
587
}
606
588
607
589
return pv;
@@ -693,12 +675,12 @@ Ref<AudioStreamPlayback> AudioStreamWAV::instantiate_playback() {
693
675
sample->base = Ref<AudioStreamWAV>(this );
694
676
695
677
if (format == AudioStreamWAV::FORMAT_QOA) {
696
- uint32_t ffp = qoa_decode_header (( uint8_t *)data + DATA_PAD, data_bytes, &sample->qoa .desc );
678
+ uint32_t ffp = qoa_decode_header (data. ptr () + DATA_PAD, data_bytes, &sample->qoa .desc );
697
679
ERR_FAIL_COND_V (ffp != 8 , Ref<AudioStreamPlaybackWAV>());
698
680
sample->qoa .frame_len = qoa_max_frame_size (&sample->qoa .desc );
699
681
int samples_len = (sample->qoa .desc .samples > QOA_FRAME_LEN ? QOA_FRAME_LEN : sample->qoa .desc .samples );
700
- int alloc_len = sample->qoa .desc .channels * samples_len * sizeof ( int16_t ) ;
701
- sample->qoa .dec = ( int16_t *) memalloc (alloc_len );
682
+ int dec_len = sample->qoa .desc .channels * samples_len;
683
+ sample->qoa .dec . resize (dec_len );
702
684
}
703
685
704
686
return sample;
@@ -780,10 +762,4 @@ void AudioStreamWAV::_bind_methods() {
780
762
781
763
AudioStreamWAV::AudioStreamWAV () {}
782
764
783
- AudioStreamWAV::~AudioStreamWAV () {
784
- if (data) {
785
- memfree (data);
786
- data = nullptr ;
787
- data_bytes = 0 ;
788
- }
789
- }
765
+ AudioStreamWAV::~AudioStreamWAV () {}
0 commit comments