This commit is contained in:
loliball 2024-08-31 04:01:11 +08:00
parent 6d388e4db4
commit c777831fde
2 changed files with 23 additions and 17 deletions

View File

@ -4,22 +4,27 @@ import kotlinx.coroutines.runBlocking
import java.io.IOException
import java.io.InputStream
import java.io.OutputStream
import java.net.InetSocketAddress
import java.net.Socket
import java.util.Arrays
import javax.sound.sampled.AudioFormat
import javax.sound.sampled.AudioSystem
import kotlin.system.measureTimeMillis
var `in`: InputStream? = null
var out: OutputStream? = null
var SAMPLE_RATE: Int = 48000
var CHANNELS: Int = 1
var BUFFER_SIZE: Int = 2048 * CHANNELS
var sample = FloatArray(BUFFER_SIZE)
var bufferOut = ByteArray(sample.size * 2)
var bufferIn = ByteArray(sample.size * 2)
var SAMPLE_RATE: Int = 48000
var CHANNELS: Int = 1
var format: AudioFormat = AudioConvert.getAudioFormat(SAMPLE_RATE, CHANNELS)
var socket: Socket? = null
var targetDataLine = AudioSystem.getTargetDataLine(format)
var sourceDataLine = AudioSystem.getSourceDataLine(format)
var `in`: InputStream? = null
var out: OutputStream? = null
object Client {
@JvmStatic
fun main(args: Array<String>) {
@ -28,7 +33,11 @@ object Client {
}
fun mainClient() = runBlocking {
socket = Socket("127.0.0.1", 7860)
val t = measureTimeMillis {
// socket = Socket("zedo.top", 7860)
socket = Socket("127.0.0.1", 7860)
}
println("connect done! $t")
`in` = socket!!.getInputStream()
out = socket!!.getOutputStream()
@ -38,7 +47,7 @@ fun mainClient() = runBlocking {
sourceDataLine.open(format, bufferIn.size)
sourceDataLine.start()
launch(Dispatchers.Default) {
launch(Dispatchers.IO) {
while (true) {
//Arrays.fill(bufferOut, (byte) 0);
targetDataLine.read(bufferOut, 0, bufferOut.size)
@ -52,7 +61,7 @@ fun mainClient() = runBlocking {
}
}
launch {
launch(Dispatchers.IO) {
while (true) {
try {
`in`!!.read(bufferIn, 0, bufferIn.size)

View File

@ -8,27 +8,25 @@ import java.util.*
import java.util.concurrent.CopyOnWriteArrayList
var clientAudios: MutableList<ClientAudio> = CopyOnWriteArrayList()
var BUFFER_SIZE: Int = 2048 * CHANNELS
fun main() = runBlocking {
//混音
launch(Dispatchers.Default) {
launch(Dispatchers.IO) {
while (true) {
for (client in clientAudios) {
if (!client.isConnected) {
clientAudios.remove(client)
println("现在是: " + clientAudios)
println("现在是: $clientAudios")
continue
}
client.read()
}
for (client in clientAudios) {
launch(Dispatchers.Default) {
launch(Dispatchers.IO) {
for (audio in clientAudios) {
if (audio != client) {
if (audio != client)
audio.mix(client.sample)
}
}
client.send()
}
@ -51,9 +49,7 @@ class ClientAudio(var socket: Socket) {
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
var isConnected = true
fun send() {
try {
@ -61,6 +57,7 @@ class ClientAudio(var socket: Socket) {
out.write(mixBuffer)
out.flush()
} catch (e: IOException) {
isConnected = false
}
}
@ -70,7 +67,7 @@ class ClientAudio(var socket: Socket) {
AudioConvert.convertShortByteToFloat(buffer, sample)
Arrays.fill(mixSample, 0f)
} catch (e: IOException) {
//throw new RuntimeException(e);
isConnected = false
}
}