整改2
This commit is contained in:
parent
6d388e4db4
commit
c777831fde
@ -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)
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user