audio_data, sample_rate = torchaudio.load("D:\data\8k\x.wav")
我获取了 audio_data, 希望将它发送到 java 的 websocket 服务,接收格式如下
public void onMessage(byte[] bytes, Session session)
虽然都是 bytes, 但是 java 的 byte 范围[-128, 127],而 python 是[0,255] 每次数据发送就直接断开了服务。
我想知道要怎么转换,才能让 java 服务接收到音频信息。之前没写过 python, 希望高手指点一下
1
sujin190 268 天前 1
正常的二进制 bytes 数据流是无符号的,因为它是二进制流而不是数字,不包含符号含义,也就是值范围应该是 0 到 255 ,但是都怪 java 没有无符号数,所以 java 的 byte 是有符号的也就是值范围是-128 到 127 ,但它们从二进制上看是同一个完全一样的不影响吧,你把这个 byte[]扔给音视频解码器接收 byte[]参数的是完全正常的,但是如果你要自己写算法计算处理那你就要注意符号和溢出问题了,所以也不知道你说的 java 不能正常接收是啥毛病
|
2
sujin190 268 天前 1
顺便说 java 因为没有无符号数据类型,你想正常处理无符号数计算那使用更高一级数据宽度的类型就好了,比如 byte 转 short ,也就是:
((short) v) & 0xff 这样一下,注意最后面这个 & 0xff ,一定要再&一下才可以,然后你再看就发现和 python 等其它语言的数字值一样了,说实话 java 因为这个问题处理二进制流简直坑死人麻烦的不行 |