问题描述
我正在尝试在 Android 上实时播放通过 Socket Server 发送的 .wav
文件。
当我使用 pyaudio
时,以下解决方案适用于 Linux:
Client.py
p = pyaudio.PyAudio()
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100
stream = p.open(format=FORMAT,channels=CHANNELS,rate=RATE,output=True,frames_per_buffer=CHUNK)
while True:
res=self.ClientSocket.recv(1024).decode()
sys.stdout.flush()
data="1"
while data != "":
audio_bytes = self.ClientSocket.recv(1024)
stream.write(audio_bytes)
stream.stop_stream()
stream.close()
p.terminate()
Server.py
class Stream_Thread(Thread):
def init(self,conn,ip,port,filename,thread_id):
Thread.init(self)
self.conn = conn
self.ip = ip
self.port = port
self.filename = filename
self.thread_id = thread_id
print(
f"[ ] - Connecting to {self.ip}:{self.port}\tID: {self.thread_id}")
print(
f"[+] - Steam thread connected succesfully to {self.ip}:{str(self.port)}\tID: {self.thread_id}")
def run(self):
wf = wave.open(self.filename,'rb')
p = pyaudio.PyAudio()
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100
stream = p.open(format=FORMAT,frames_per_buffer=CHUNK)
data = 1
while data:
data = wf.readframes(CHUNK)
try:
self.conn.send(data)
except:
break
我很抱歉没有可重现的示例。
我的问题是,您无法在 android 上使用 pyaudio
,因此上述解决方案(适用于台式机)在移动设备上无法使用。
帖子如:Play audio files from server Android
对我如何使用 jnius
使其工作充满希望:(以下代码来自:Play sound using bytes that works on android)
from jnius import autoclass
MediaPlayer = autoclass('android.media.MediaPlayer')
AudioManager = autoclass('android.media.AudioManager')
self.sound = MediaPlayer()
self.sound.setDataSource(yourDataSource) #you can provide any data source,if its on the devie then the file path,or its url if you are playing online
self.sound.prepare()
self.sound.setLooping(False) #you can set it to true if you want to loop
self.sound.start()
# You can also use the following according to your needs
#self.sound.pause()
#self.sound.stop()
#self.sound.release()
#self.sound.getCurrentPosition()
#self.sound.getDuration()
我遇到的问题是,我应该在 self.sound.setDataSource(yourDataSource)
中放入什么来播放“字节”我假设如果我提供文件的路径或某些文件的 URL,这将完美地工作音频文件,但我需要的是播放发送到该设备的“字节”?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)