|
|
原程序:
- #!/usr/bin/env python3
- import asyncio import websockets import sys import wave
- async def run_test(uri): async with websockets.connect(uri) as websocket:
- wf = wave.open(sys.argv[1], "rb")
- await websocket.send('{ "config" : { "sample_rate" : %d } }' % (wf.getframerate()))
- buffer_size = int(wf.getframerate() * 0.2) # 0.2 seconds of audio
- print("@@@@@@")
- while True:
- data = wf.readframes(buffer_size)
- if len(data) == 0:
- break
- await websocket.send(data)
- print (await websocket.recv())
- print("******")
- await websocket.send('{"eof" : 1}')
- print (await websocket.recv())
- asyncio.run(run_test('ws://*.*.*.*:***')
复制代码 将Python WebSocket客户端程序转换为Android Java版本,并避免使用javax.sound.sampled库。以下是完整的实现:
关键转换点:
1、移除Java Sound API依赖:完全移除了javax.sound.sampled相关导入和使用
2、文件读取:使用FileInputStream替代Python的wave.open来读取音频文件
3、异步处理:通过新线程处理音频数据发送,避免阻塞主线程
4、WebSocket通信:
在onOpen中启动音频发送流程
使用send方法发送数据和配置信息
实现onMessage处理服务器响应
5、缓冲区管理:设置0.2秒的音频数据块大小(假设16kHz采样率,16位深度)
6、资源清理:在适当位置关闭文件流,防止资源泄漏
使用时,创建AudioSocketClient实例并调用connect()方法即可建立WebSocket连接并开始传输音频数据。
|
|