Skip to content

Commit bcea771

Browse files
committed
stash
1 parent 1366867 commit bcea771

6 files changed

Lines changed: 47 additions & 9 deletions

File tree

README.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,47 @@
22

33
![logo](src/main/resources/channel.png)
44

5+
## 简介 | Introduction
6+
7+
沉浸语音是一个开源的游戏内对讲模组。
8+
9+
*Channel* is an open-source in-game voice chat mod.
10+
11+
### 和Simple Voice Chat有什么不同?| How does it differ from Simple Voice Chat?
12+
13+
| 沉浸语音</br>Channel | SVC |
14+
| ------------------------------------------------------------ |-------------------------------------|
15+
| ✅自由许可证</br>Free License | ❌保留所有权利</br>All Rights Reserved |
16+
| ✅固定降噪算法+基于Nvidia Broadcast的AI降噪</br>Fixed Noise Suppression + NVIDIA Broadcast AI Denoiser | ❌RNNoise降噪</br>RNNoise Suppression |
17+
| ✅基于路径追踪的混响模拟</br>Path-Traced Reverb Simulation | ❌简单位置音频</br>Simple Positional Audio |
18+
| ✅开箱即用,不需要额外端口,无需配置</br>Out-of-the-box, no extra ports or configuration required | ❌需要额外端口</br>Requires extra ports |
19+
| ❌仅NeoForge</br>NeoForge Only | ✅Fabric/Quilt/Forge/Bukkit |
20+
| | ✅API插件</br>API Plugins |
21+
22+
### 饼 | TODO
23+
24+
- 路径追踪音频:
25+
- [ ] 针对栅栏/玻璃板等半透过方块的处理
26+
- [ ] 针对流体方块的处理
27+
- [ ] 模拟绝对响度
28+
- 转发:
29+
- [ ] 独立的转发程序
30+
- 游戏内:
31+
- [ ] 话筒和音响方块
32+
- [ ] 对讲机物品
33+
34+
35+
- Path-Traced Audio:
36+
- [ ] Handling of semi-transparent blocks (e.g., fences, glass panes)
37+
- [ ] Handling of fluid blocks
38+
- [ ] Absolute loudness simulation
39+
- Forwarding:
40+
- [ ] Standalone forwarding application
41+
- In-game:
42+
- [ ] Microphone and Speaker blocks
43+
- [ ] Walkie-talkie items
44+
45+
546
## 给Linux/MacOS用户 | For Linux/MacOS Users
647

748
要在Linux/MacOS x86_64或arm64上使用此模组,请自行构建:

src/main/java/cn/ussshenzhou/channel/Channel.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,5 @@ public Channel(IEventBus modEventBus, ModContainer modContainer) {
2424
}
2525
ConfigHelper.loadConfig(new ChannelServerConfig());
2626
}
27+
//TODO 参考发光/泛光,声音越大,回声越强
2728
}

src/main/java/cn/ussshenzhou/channel/audio/client/receive/PlayerAudio.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,7 @@
22

33
import cn.ussshenzhou.channel.audio.client.rt.RayTraceManager;
44
import cn.ussshenzhou.channel.config.ChannelClientConfig;
5-
import cn.ussshenzhou.channel.config.ChannelPlayerConfig;
65
import cn.ussshenzhou.channel.util.AudioHelper;
7-
import com.mojang.logging.LogUtils;
8-
import net.minecraft.world.entity.player.Player;
96

107
import javax.annotation.Nullable;
118
import java.nio.ByteBuffer;
@@ -23,8 +20,8 @@
2320
* @author USS_Shenzhou
2421
*/
2522
public class PlayerAudio {
26-
private static final int MAX_BUFFER = 50;
27-
private static final int MIN_PLAY_THRESHOLD = 4;
23+
private static final int MAX_BUFFER = 100;
24+
private static final int MIN_PLAY_THRESHOLD = 5;
2825
private final BlockingQueue<short[]> audioBuffer = new ArrayBlockingQueue<>(MAX_BUFFER);
2926
private static int readyBuffer10ms = 0;
3027
public final int alSource, sampleRate, alDirectFilter, alReverbFilter;

src/main/java/cn/ussshenzhou/channel/audio/client/rt/RayTraceManager.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@ public static void play(double x, double y, double z, PlayerAudio audio) {
6666
alFilterf(audio.alReverbFilter, AL_LOWPASS_GAINHF, 1);
6767
alSource3f(audio.alSource, AL_POSITION, (float) data.virtualPos().x, (float) data.virtualPos().y, (float) data.virtualPos().z);
6868
audio.play();
69-
LogUtils.getLogger().info("play took {} ms", (Util.getNanos() - t) / 1000_000.0);
7069
}
7170

7271
private static SourceAudioData calculateSourceAudioData(Vec3 sourcePos) {
@@ -156,7 +155,6 @@ public static void tick(ClientTickEvent.Post event) {
156155
lastUpdate = Util.getMillis();
157156
clear();
158157
update();
159-
LogUtils.getLogger().warn("update took {} ms", Util.getMillis() - lastUpdate);
160158
}
161159

162160
private static void clear() {

src/main/java/cn/ussshenzhou/channel/audio/client/send/MicManager.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ public static synchronized void refresh(Mixer.Info deviceInfo, AudioFormat forma
5151
line.close();
5252
}
5353
}
54-
line = (TargetDataLine) AudioSystem.getMixer(deviceInfo).getLine(lineInfo);
54+
// FIXME same name?
55+
line = (TargetDataLine) AudioSystem.getMixer(AudioSystem.getMixerInfo()[23]).getLine(lineInfo);
5556
if (!line.isOpen()) {
5657
line.open(format);
5758
}

src/main/java/cn/ussshenzhou/channel/gui/InputConfigPanel.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ private void notifyMicManager() {
248248
if (deviceInfo == null) {
249249
return;
250250
}
251-
if (!AudioSystem.getMixer(deviceInfo).isLineSupported(new DataLine.Info(TargetDataLine.class, format))) {
251+
if (!AudioSystem.getMixer(AudioSystem.getMixerInfo()[23]).isLineSupported(new DataLine.Info(TargetDataLine.class, format))) {
252252
TSimpleNotification.fire(
253253
Component.literal("Selected Device Parameters Are Not Supported."),
254254
5,

0 commit comments

Comments
 (0)