chore: 初始化 client v2
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||
pub enum AudioScene {
|
||||
Music,
|
||||
Voice,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct AudioConfig {
|
||||
// ALSA 设备参数,用于录音和播放
|
||||
pub capture_device: String,
|
||||
pub playback_device: String,
|
||||
pub sample_rate: u32,
|
||||
pub channels: u16,
|
||||
pub frame_size: usize, // 帧大小,单位为采样点
|
||||
|
||||
// Opus 编解码参数,用于音频传输
|
||||
pub audio_scene: AudioScene,
|
||||
pub bitrate: i32,
|
||||
pub vbr: bool, // 是否启用 VBR(动态比特率)
|
||||
pub fec: bool, // 是否启用 FEC(内联前向纠错)
|
||||
}
|
||||
|
||||
impl AudioConfig {
|
||||
pub fn music() -> Self {
|
||||
Self {
|
||||
audio_scene: AudioScene::Music,
|
||||
sample_rate: 48_000, // 48kHz
|
||||
channels: 2,
|
||||
frame_size: 960, // 20ms at 48kHz
|
||||
bitrate: 320_000, // 320 kbps
|
||||
..Default::default()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn voice() -> Self {
|
||||
Self {
|
||||
audio_scene: AudioScene::Voice,
|
||||
sample_rate: 16_000, // 16kHz
|
||||
channels: 1,
|
||||
frame_size: 320, // 20ms at 16kHz
|
||||
bitrate: 32_000, // 32 kbps
|
||||
..Default::default()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for AudioConfig {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
audio_scene: AudioScene::Voice,
|
||||
capture_device: "plug:Capture".to_string(),
|
||||
playback_device: "default".to_string(),
|
||||
sample_rate: 16_000,
|
||||
channels: 1,
|
||||
frame_size: 320, // 20ms at 16kHz
|
||||
bitrate: 32_000,
|
||||
vbr: false,
|
||||
fec: false,
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user