chore: 完善从节点连接提示音
This commit is contained in:
@@ -2,7 +2,7 @@ build:
|
|||||||
docker run --rm -v $(shell pwd):/app idootop/open-xiaoai-runtime:oh2p \
|
docker run --rm -v $(shell pwd):/app idootop/open-xiaoai-runtime:oh2p \
|
||||||
cargo build --target armv7-unknown-linux-gnueabihf --release
|
cargo build --target armv7-unknown-linux-gnueabihf --release
|
||||||
|
|
||||||
# 部署到小爱音箱(调试用)
|
# 部署到小爱音箱(调试自用)
|
||||||
deploy:
|
deploy:
|
||||||
dd if=target/armv7-unknown-linux-gnueabihf/release/stereo \
|
dd if=target/armv7-unknown-linux-gnueabihf/release/stereo \
|
||||||
| sshpass -p open-xiaoai ssh -o HostKeyAlgorithms=+ssh-rsa root@192.168.31.153 "dd of=/data/stereo"
|
| sshpass -p open-xiaoai ssh -o HostKeyAlgorithms=+ssh-rsa root@192.168.31.153 "dd of=/data/stereo"
|
||||||
|
|||||||
@@ -13,14 +13,21 @@ pub async fn run_stereo() -> Result<()> {
|
|||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
let mode = &args[1];
|
let mode = if args[1].to_lowercase() == "master" {
|
||||||
|
"主节点"
|
||||||
|
} else {
|
||||||
|
"从节点"
|
||||||
|
};
|
||||||
|
|
||||||
let role = if args[2].to_lowercase() == "left" {
|
let role = if args[2].to_lowercase() == "left" {
|
||||||
ChannelRole::Left
|
ChannelRole::Left
|
||||||
} else {
|
} else {
|
||||||
ChannelRole::Right
|
ChannelRole::Right
|
||||||
};
|
};
|
||||||
|
|
||||||
if mode == "master" {
|
println!("🚗 当前为: {} {}", mode, role.to_string());
|
||||||
|
|
||||||
|
if mode == "主节点" {
|
||||||
run_master(role).await
|
run_master(role).await
|
||||||
} else {
|
} else {
|
||||||
run_slave(role).await
|
run_slave(role).await
|
||||||
|
|||||||
@@ -26,8 +26,6 @@ struct SlaveSession {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn run_master(master_role: ChannelRole) -> Result<()> {
|
pub async fn run_master(master_role: ChannelRole) -> Result<()> {
|
||||||
println!("--- 主节点模式 ({}) ---", master_role.to_string());
|
|
||||||
|
|
||||||
// 0. 设置 ALSA 重定向
|
// 0. 设置 ALSA 重定向
|
||||||
println!("🔥 启动中,请稍等...");
|
println!("🔥 启动中,请稍等...");
|
||||||
let _alsa_guard = AlsaRedirector::new()?;
|
let _alsa_guard = AlsaRedirector::new()?;
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ use crate::net::protocol::{AudioPacket, ChannelRole, ControlPacket};
|
|||||||
use crate::utils::jitter_buffer::JitterBuffer;
|
use crate::utils::jitter_buffer::JitterBuffer;
|
||||||
use crate::utils::sync::{ClockSync, now_us};
|
use crate::utils::sync::{ClockSync, now_us};
|
||||||
use anyhow::{Result, anyhow};
|
use anyhow::{Result, anyhow};
|
||||||
|
use std::process::Command;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use tokio::io::{AsyncReadExt, AsyncWriteExt};
|
use tokio::io::{AsyncReadExt, AsyncWriteExt};
|
||||||
@@ -16,8 +17,6 @@ use tokio::sync::{Mutex, mpsc};
|
|||||||
|
|
||||||
/// 运行从节点模式
|
/// 运行从节点模式
|
||||||
pub async fn run_slave(role: ChannelRole) -> Result<()> {
|
pub async fn run_slave(role: ChannelRole) -> Result<()> {
|
||||||
println!("--- 从节点模式 ({}) ---", role.to_string());
|
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
match handle_connection(role.clone()).await {
|
match handle_connection(role.clone()).await {
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
@@ -134,6 +133,14 @@ async fn handle_connection(role: ChannelRole) -> Result<()> {
|
|||||||
|
|
||||||
// 8. 播放主循环
|
// 8. 播放主循环
|
||||||
println!("✅ 主节点已连接,音频串流中...");
|
println!("✅ 主节点已连接,音频串流中...");
|
||||||
|
let _ = Command::new("sh")
|
||||||
|
.arg("-c")
|
||||||
|
.arg(format!(
|
||||||
|
"/usr/sbin/tts_play.sh \"主节点已连接,{}\" >/dev/null 2>&1",
|
||||||
|
role.to_string()
|
||||||
|
))
|
||||||
|
.status();
|
||||||
|
|
||||||
let mut pcm_buf = vec![0i16; config.frame_size];
|
let mut pcm_buf = vec![0i16; config.frame_size];
|
||||||
let mut last_seq: Option<u32> = None;
|
let mut last_seq: Option<u32> = None;
|
||||||
let mut last_packet_time = now_us();
|
let mut last_packet_time = now_us();
|
||||||
|
|||||||
Reference in New Issue
Block a user