Python Android,按原样播放音频';正在从套接字服务器接收
我正在尝试播放一个通过Android live上的Socket服务器发送的Python Android,按原样播放音频';正在从套接字服务器接收,python,android,sockets,audio,pyjnius,Python,Android,Sockets,Audio,Pyjnius,我正在尝试播放一个通过Android live上的Socket服务器发送的.wav文件 当我使用pyaudio时,以下解决方案适用于Linux: Client.py p=pyaudio.pyaudio() 区块=1024 格式=pyaudio.paInt16 通道=2 费率=44100 流=p.open(格式=格式, 频道=频道, 比率=比率, 输出=真, 帧(每帧缓冲区=块) 尽管如此: res=self.ClientSocket.recv(1024).decode() sys.stdout.
.wav
文件
当我使用pyaudio
时,以下解决方案适用于Linux:
Client.py
p=pyaudio.pyaudio()
区块=1024
格式=pyaudio.paInt16
通道=2
费率=44100
流=p.open(格式=格式,
频道=频道,
比率=比率,
输出=真,
帧(每帧缓冲区=块)
尽管如此:
res=self.ClientSocket.recv(1024).decode()
sys.stdout.flush()
data=“1”
而数据!="":
audio_bytes=self.ClientSocket.recv(1024)
流写入(音频字节)
stream.stop_stream()
stream.close()
p、 终止()
Server.py
类流_线程(线程):
def init(自身、连接、ip、端口、文件名、线程id):
Thread.init(self)
self.conn=conn
self.ip=ip
self.port=端口
self.filename=文件名
self.thread\u id=线程\u id
印刷品(
f“[]-连接到{self.ip}:{self.port}\tID:{self.thread_id}”)
印刷品(
f“[+]-蒸汽线程成功连接到{self.ip}:{str(self.port)}\tID:{self.thread_id}”)
def运行(自):
wf=wave.open(self.filename,“rb”)
p=pyaudio.pyaudio()
区块=1024
格式=pyaudio.paInt16
通道=2
费率=44100
流=p.open(格式=格式,
频道=频道,
比率=比率,
输出=真,
帧(每帧缓冲区=块)
数据=1
而数据:
数据=wf.readframes(块)
尝试:
self.conn.send(数据)
除:
打破
我很抱歉没有一个可复制的例子
我的问题是,你不能在android上使用pyaudio
,因此上述解决方案(在桌面上工作)在移动设备上无法工作
职位,例如:
我已经给了我希望,我可以使用jnius
:(下面的代码来自:)
来自jnius导入自动类
MediaPlayer=autoclass('android.media.MediaPlayer'))
AudioManager=autoclass('android.media.AudioManager')
self.sound=MediaPlayer()
self.sound.setDataSource(yourDataSource)#您可以提供任何数据源,如果在设备上,则提供文件路径,如果在线播放,则提供其url
self.sound.prepare()
self.sound.setLooping(False)#如果要循环,可以将其设置为true
self.sound.start()
#您也可以根据需要使用以下产品
#self.sound.pause()
#self.sound.stop()
#self.sound.release()
#self.sound.getCurrentPosition()
#self.sound.getDuration()
我想,如果我提供了一个文件路径或某个音频文件的URL,那么我应该在self.sound.setDataSource(yourDataSource)
中放入什么来播放“字节”,但我需要的是播放发送到该设备的“字节”