Python Android,播放从套接字服务器接收到的音频

问题描述

我正在尝试在 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 (将#修改为@)