From 6d388e4db4aa3bd26c6b5c27a38f4b7b8d70081a Mon Sep 17 00:00:00 2001 From: loliball <26589867+loliball@users.noreply.github.com> Date: Sat, 31 Aug 2024 03:38:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Server.kt | 44 ++++++++++++++++---------------------------- 1 file changed, 16 insertions(+), 28 deletions(-) diff --git a/src/Server.kt b/src/Server.kt index aa1d5db..be8e44d 100644 --- a/src/Server.kt +++ b/src/Server.kt @@ -1,10 +1,7 @@ -import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import java.io.IOException -import java.io.InputStream -import java.io.OutputStream import java.net.ServerSocket import java.net.Socket import java.util.* @@ -13,8 +10,6 @@ import java.util.concurrent.CopyOnWriteArrayList var clientAudios: MutableList = CopyOnWriteArrayList() var BUFFER_SIZE: Int = 2048 * CHANNELS -var buffer: ByteArray = ByteArray(BUFFER_SIZE * 2) - fun main() = runBlocking { //混音 launch(Dispatchers.Default) { @@ -31,11 +26,11 @@ fun main() = runBlocking { for (client in clientAudios) { launch(Dispatchers.Default) { for (audio in clientAudios) { - if (audio != client) - audio.mix(client.mixSample) + if (audio != client) { + audio.mix(client.sample) + } } - AudioConvert.convertFloatToShortByte(client.mixSample, buffer) - client.send(buffer) + client.send() } } } @@ -50,35 +45,28 @@ fun main() = runBlocking { } class ClientAudio(var socket: Socket) { - var `in`: InputStream? = null - var out: OutputStream? = null - var buffer: ByteArray = ByteArray(BUFFER_SIZE * 2) - var sample: FloatArray = FloatArray(BUFFER_SIZE) - var mixSample: FloatArray = FloatArray(BUFFER_SIZE) - - init { - try { - `in` = socket.getInputStream() - out = socket.getOutputStream() - } catch (e: IOException) { - throw RuntimeException(e) - } - } + val `in` = socket.getInputStream() + val out = socket.getOutputStream() + val buffer: ByteArray = ByteArray(BUFFER_SIZE * 2) + val sample: FloatArray = FloatArray(BUFFER_SIZE) + val mixSample: FloatArray = FloatArray(BUFFER_SIZE) + var mixBuffer: ByteArray = ByteArray(BUFFER_SIZE * 2) val isConnected: Boolean get() = socket.isConnected - fun send(buffer: ByteArray) { + fun send() { try { - out!!.write(buffer) - out!!.flush() + AudioConvert.convertFloatToShortByte(mixSample, mixBuffer) + out.write(mixBuffer) + out.flush() } catch (e: IOException) { } } fun read() { try { - `in`!!.read(buffer) + `in`.read(buffer) AudioConvert.convertShortByteToFloat(buffer, sample) Arrays.fill(mixSample, 0f) } catch (e: IOException) { @@ -88,7 +76,7 @@ class ClientAudio(var socket: Socket) { fun mix(sample: FloatArray) { for (i in sample.indices) { - sample[i] += this.sample[i] + mixSample[i] += sample[i] } } }