@@ -22,8 +22,9 @@ var opusframesize : int = 960
22
22
var opuscomplexity : int = 5
23
23
var opusoptimizeforvoice : bool = true
24
24
25
- var prefixbytes = PackedByteArray ([0 , 0 , 0 , 0 , 1 ])
25
+ var prefixbytes = PackedByteArray ([23 ])
26
26
var mqttpacketencodebase64 : bool = false
27
+ var noopuscompression = false
27
28
28
29
var recordedsamples = [ ]
29
30
var recordedopuspackets = [ ]
@@ -87,12 +88,13 @@ func _ready():
87
88
if ClassDB .can_instantiate ("AudioEffectOpusChunked" ):
88
89
audioopuschunkedeffect = ClassDB .instantiate ("AudioEffectOpusChunked" )
89
90
90
- for effect_idx in range (AudioServer .get_bus_effect_count (speechbusidx )):
91
- var laudioeffectonspeechbus : AudioEffect = AudioServer .get_bus_effect (speechbusidx , effect_idx )
92
- if laudioeffectonspeechbus .is_class ("AudioEffectPitchShift" ):
93
- audioeffectpitchshift = laudioeffectonspeechbus
94
- audioeffectpitchshiftidx = effect_idx
95
- break
91
+ if speechbusidx != - 1 :
92
+ for effect_idx in range (AudioServer .get_bus_effect_count (speechbusidx )):
93
+ var laudioeffectonspeechbus : AudioEffect = AudioServer .get_bus_effect (speechbusidx , effect_idx )
94
+ if laudioeffectonspeechbus .is_class ("AudioEffectPitchShift" ):
95
+ audioeffectpitchshift = laudioeffectonspeechbus
96
+ audioeffectpitchshiftidx = effect_idx
97
+ break
96
98
97
99
updatesamplerates ()
98
100
for i in range (1 , len (visemes )):
@@ -104,7 +106,7 @@ func _ready():
104
106
105
107
SelfMember .audiobufferregulationtime = 3600.0
106
108
107
- func resamplerecordedsamples (orgsamples , newsamplesize ):
109
+ func rechunkrecordedchunks (orgsamples , newsamplesize ):
108
110
assert (newsamplesize > 0 )
109
111
var res = [ ]
110
112
var currentsample = PackedVector2Array ()
@@ -133,12 +135,13 @@ func updatesamplerates():
133
135
134
136
print ("aaa audiosamplesize " , audiosamplesize , " audiosamplerate " , audiosamplerate )
135
137
136
- var noopuscompression = false
138
+ noopuscompression = false
137
139
if opussamplerate == audioresamplerate :
138
140
$ VBoxFrameLength/HBoxOpusExtra/Compressed .disabled = false
139
141
if not $ VBoxFrameLength/HBoxOpusExtra/Compressed .button_pressed :
140
142
noopuscompression = true
141
143
else :
144
+ $ VBoxFrameLength/HBoxOpusExtra/Compressed .button_pressed = false
142
145
$ VBoxFrameLength/HBoxOpusExtra/Compressed .disabled = true
143
146
noopuscompression = true
144
147
opusbitrate = int ($ VBoxFrameLength/HBoxOpusBitRate/BitRate .value )
@@ -163,9 +166,10 @@ func updatesamplerates():
163
166
recordedheader = { "opusframesize" :audioresamplesize ,
164
167
"opussamplerate" :audioresamplerate ,
165
168
"prefixbyteslength" :len (prefixbytes ),
169
+ "noopuscompression" :noopuscompression ,
166
170
"mqttpacketencoding" :"base64" if mqttpacketencodebase64 else "binary" }
167
171
if len (recordedsamples ) != 0 and len (recordedsamples [0 ]) != audiosamplesize :
168
- recordedsamples = resamplerecordedsamples (recordedsamples , audiosamplesize )
172
+ recordedsamples = rechunkrecordedchunks (recordedsamples , audiosamplesize )
169
173
recordedopuspacketsMemSize = 0
170
174
recordedopuspackets = null
171
175
recordedresampledpackets = null
@@ -176,7 +180,7 @@ func updatesamplerates():
176
180
recordedopuspackets .append (opuspacket )
177
181
recordedopuspacketsMemSize += opuspacket .size ()
178
182
$ VBoxPlayback/HBoxPlaycount/GridContainer/FrameCount .text = str (len (recordedopuspackets ))
179
- else :
183
+ elif audioopuschunkedeffect != null :
180
184
recordedresampledpackets = [ ]
181
185
var denoise = not $ HBoxBigButtons/VBoxPTT/Denoise .disabled and $ HBoxBigButtons/VBoxPTT/Denoise .button_pressed
182
186
for s in recordedsamples :
@@ -187,6 +191,9 @@ func updatesamplerates():
187
191
$ VBoxPlayback/HBoxPlaycount/GridContainer/FrameCount .text = "1"
188
192
if len (recordedresampledpackets ):
189
193
recordedopuspacketsMemSize = len (recordedresampledpackets )* len (recordedresampledpackets [0 ])* 4
194
+ else :
195
+ recordedresampledpackets = null
196
+
190
197
191
198
$ VBoxPlayback/HBoxPlaycount/GridContainer/Totalbytes .text = str (recordedopuspacketsMemSize )
192
199
var tm = len (recordedsamples )* frametimems * 0.001
@@ -229,8 +236,16 @@ var talkingstarttime = 0
229
236
func starttalking ():
230
237
currentlytalking = true
231
238
recordedsamples = [ ]
232
- recordedopuspackets = [ ]
233
- recordedresampledpackets = null
239
+ if not noopuscompression :
240
+ recordedopuspackets = [ ]
241
+ recordedresampledpackets = null
242
+ else :
243
+ recordedopuspackets = null
244
+ if audioopuschunkedeffect != null :
245
+ recordedresampledpackets = [ ]
246
+ else :
247
+ recordedresampledpackets = null
248
+
234
249
$ VBoxPlayback/HBoxPlaycount/GridContainer/FrameCount .text = str (0 )
235
250
$ VBoxPlayback/HBoxPlaycount/GridContainer/TimeSecs .text = str (0 )
236
251
recordedopuspacketsMemSize = 0
@@ -248,8 +263,8 @@ func starttalking():
248
263
leadtimems -= frametimems
249
264
Dundroppedchunks += 1
250
265
print ("Undropped " , Dundroppedchunks , " chunks" )
251
- if opusframesize != 0 :
252
- audioopuschunkedeffect .flush_opus_encoder ( false )
266
+ if opusframesize != 0 and $ VBoxFrameLength/HBoxOpusExtra/Compressed . button_pressed :
267
+ audioopuschunkedeffect .resetencoder ( )
253
268
254
269
func _on_mic_working_toggled (toggled_on ):
255
270
print ("_on_mic_working_toggled " , $ AudioStreamMicrophone .playing , " to " , toggled_on )
@@ -321,7 +336,9 @@ func _process(_delta):
321
336
if currentlytalking :
322
337
if len (recordedsamples ) < maxrecordedsamples :
323
338
recordedsamples .append (audiosamples )
324
- if opusframesize != 0 :
339
+ if noopuscompression :
340
+ recordedresampledpackets .append (audioopuschunkedeffect .read_chunk (true ))
341
+ elif opusframesize != 0 :
325
342
var opuspacket = audioopuschunkedeffect .read_opus_packet (prefixbytes )
326
343
$ MQTTnetwork .transportaudiopacket (opuspacket , mqttpacketencodebase64 )
327
344
if len (recordedopuspackets ) < maxrecordedsamples :
@@ -392,6 +409,11 @@ func _on_play_pressed():
392
409
elif recordedresampledpackets != null :
393
410
SelfMember .processheaderpacket (h )
394
411
SelfMember .resampledpacketsbuffer = recordedresampledpackets .duplicate ()
412
+ var resampledaudiochunk_blank = PackedVector2Array ()
413
+ resampledaudiochunk_blank .resize (h ["opusframesize" ])
414
+ for i in range (5 ):
415
+ SelfMember .audiostreamopuschunked .resample_chunk (resampledaudiochunk_blank )
416
+
395
417
elif recordedsamples and SelfMember .audiostreamgeneratorplayback != null :
396
418
SelfMember .audiosamplesize = audiosamplesize
397
419
SelfMember .audiopacketsbuffer = recordedsamples .duplicate ()
0 commit comments