diff --git a/star_lock/lib/talk/call/callTalk.dart b/star_lock/lib/talk/call/callTalk.dart index 93455b70..403376c6 100644 --- a/star_lock/lib/talk/call/callTalk.dart +++ b/star_lock/lib/talk/call/callTalk.dart @@ -143,8 +143,8 @@ class CallTalk { if (audioData.isNotEmpty) { // 在这里处理你的音频数据 print('转换pcmBytes数据长度为:${audioData.length}'); - _playRawData(audioData); - // _playAudioStream(audioData); + // _playRawData(audioData); + playAudioStream(audioData); } else { print('Failed to read audio data.'); } @@ -162,32 +162,30 @@ class CallTalk { ); } - Future _playAudioStream(List audioData) async { + Future playAudioStream(List audioData) async { + await _audioPlayer + .setSubscriptionDuration(const Duration(milliseconds: 10)); + + // 启动播放器 await _audioPlayer.startPlayer( codec: Codec.pcm16, sampleRate: 8000, numChannels: 1, ); - int totalLength = audioData.length; - int offset = 0; - - while (offset < totalLength) { - int chunkSize = _bufferSize; - if (offset + chunkSize > totalLength) { - chunkSize = totalLength - offset; + // 将音频数据逐步添加到缓冲区 + for (int i = 0; i < audioData.length; i += 320) { + int chunkSize = 320; + if (i + chunkSize > audioData.length) { + chunkSize = audioData.length - i; } - List chunk = audioData.sublist(offset, offset + chunkSize); - await _audioPlayer.feedFromStream(Uint8List.fromList(chunk)); - - offset += chunkSize; + List chunk = audioData.sublist(i, i + chunkSize); + await _audioPlayer + .feedFromStream(G711().convertToInt8ListLittleEndian(chunk)); } - await _audioPlayer.stopPlayer(); - } - - Future stopAudioPlayer() async { + // 停止播放器 await _audioPlayer.stopPlayer(); } }