关于音频问题,有偿请教问题,对我过于难了。

2024-05-25 19:54:49 +08:00
 pipixiarwksb

通过 socket 发送原始 pcm 数据,格式如下 Sample Rate: 48000.0 Channel Count: 2 Common Format: PCM Float32

pcm 数据发送的: (0x10529da40: 3840/3840 bytes)

在 python 服务端接收数据时,直接写入 wav 文件,背景有声音,但是噪声很大,这应该怎么处理,客户端写入文件时是没问题的。如有大佬知道能解决问题,200 元给大佬喝茶!!!还望大佬能指点一二!!!

1164 次点击
所在节点    外包
13 条回复
a33291
2024-05-25 19:58:39 +08:00
udp 发的?乱序或者丢包了吧
客户端发送时写入文件,服务端收到也写入文件,然后用 BC 十六进制对比一下差异
dode
2024-05-25 20:37:16 +08:00
记录首发 HEX 原始数据,对比差异,这个要多少带宽,中途 TC 连接要是断了怎么办?

客户端写好文件,再用程序发到服务器吧
iOCZS
2024-05-25 23:40:00 +08:00
两端收发的文件是否一致啊
pipixiarwksb
2024-05-27 09:57:04 +08:00
@a33291 tcp 协议
@dode 要求一定的实时性,没法写入文件再发到服务器
@iOCZS 这个怎么做啊,因为我服务端是一直再接收,客户端可以随时停掉,怎么才能确保两边同时停止写入文件
ziding
2024-05-27 10:22:22 +08:00
1. 对比两端的 wav 文件
2. 播放的设置是否搞对了?有点像采样率没搞对的情况
jifengg
2024-05-27 10:41:38 +08:00
wav 文件头写了吗?
pipixiarwksb
2024-05-27 13:59:42 +08:00
@jifengg 头是啥,还要写头?
@ziding 采样率是 48000.0
dode
2024-05-27 13:59:54 +08:00
客户端传输数据时,TCP 连接断掉了怎么办?
客户端一个线程直接边写文件,一个线程边读取这个文件,发送到服务器。
dode
2024-05-27 14:00:31 +08:00
现有程序执行时,占用多大网络带宽?
jifengg
2024-05-27 14:33:06 +08:00
wav 文件头,包含了你说的 PCM 格式描述:
“Sample Rate: 48000.0 Channel Count: 2 Common Format: PCM Float32”
以及其他信息,如果没有这些信息,用播放器直接播放 wav 文件,要么不能播,要么按默认参数播
csulyb
2024-05-27 15:38:57 +08:00
思路:
1.服务器端直接把 pcm 存下来,然后用播放器比如 audacity 播放看看正常不
a.正常就是你 wav 的头不对,自己对着 wav 的头修改下。
b.不正常的话,注意下音频数据存储用哪个,float 还是 int16 ?

还有个问题 网络通信为啥直接 pcm ,节省带宽最好 opus 编码下发
xsen
2024-05-28 08:39:29 +08:00
1. 服务端保存为 pcm ,用 vlc 看播放是否有问题
2. 确认包是否完整—就是对整个 pcm/wav 文件做 MD5 ,接收后确认 MD5 值是否一样
3. 确认写入的采样率、通道数是否一致
EvaDan
2024-05-30 16:47:57 +08:00
@pipixiarwksb 前面有个哥们说的对 wav 文件的需要文件头信息来表明怎么解析后续的数据格式,不然播放器解析不了。PCM 就是纯数据,不带格式。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1043925

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX