0

I'm creating android app that receive on socket decoded mp3 music from python server. When I try to play back the music received in the stream using the pyjnius library and android audiotrack there is absolutely no sound on the phone. Сlient on Windows works fine.

I tried change every parameter of audiotrack but in vain. Also tried just playing a piece of sound, but it's the same. Probably I use write() in wrong way and I need somehow change format of data.

Client:
host_ip = '192.168.1.205'
    print(host_ip)
    port = 33
    sample = 44100   
                
    client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    socket_address = (host_ip,port)
    print('server listening at',socket_address)
    client_socket.connect(socket_address) 
    print("CLIENT CONNECTED TO",socket_address)
    
    AudioTrack = autoclass('android.media.AudioTrack')
    AudioManager = autoclass('android.media.AudioManager')
    AudioFormat = autoclass('android.media.AudioFormat')
    AudioRecord = autoclass('android.media.AudioRecord')
    sample = AudioTrack.getNativeOutputSampleRate(
        AudioManager.USE_DEFAULT_STREAM_TYPE
    )

    n = AudioRecord.getMinBufferSize(
        sample,
        AudioFormat.CHANNEL_OUT_STEREO,
        AudioFormat.ENCODING_PCM_16BIT, 
    )

    audio_stream = AudioTrack(
        AudioManager.STREAM_MUSIC,
        sample,
        AudioFormat.CHANNEL_OUT_STEREO,
        AudioFormat.ENCODING_PCM_16BIT,
        n,
        AudioTrack.MODE_STREAM,
    )
    audio_stream.play()   
    data = b""
    payload_size = struct.calcsize("Q") 
    while True:
        while len(data) < payload_size:
            packet = client_socket.recv(4*1024)
            if not packet: break
            data+=packet
        packed_msg_size = data[:payload_size]
        data = data[payload_size:]
        msg_size = struct.unpack("Q",packed_msg_size)[0]
        while len(data) < msg_size:
            data += client_socket.recv(4*1024)
        frame_data = data[:msg_size]
        data  = data[msg_size:]
        frame = pickle.loads(frame_data)
                                     
        audio_stream.write(frame, 0, n) 
        await asyncio.sleep(0.00001)

Server:
global wf   
    client_socket, address = server_socket.accept()
    connections.append(client_socket)
    t2 = threading.Thread(target=connect, args=())
    t2.start()
    chunk = 1024
    sample_rate = 44100
    p = pyaudio.PyAudio()
   
    stream = p.open(format=pyaudio.paInt16,
                    channels=1,
                    rate=sample_rate,
                    input=True,
                    output=True,
                    frames_per_buffer=chunk)

    data = None
    while True:
        while len(connections) != 0:
            with io.BytesIO(wf) as f:
                f.seek(chunk)
                data = f.read(chunk)
                while data:
                    a = pickle.dumps(data)
                    message = struct.pack("Q",len(a))+a
                    for client in connections:
                        try:
                            client.sendall(message)
                        except:
                            connections.remove(client)
                    data = f.read(chunk)
                wf = AudioSegment.from_mp3(getSong())._data
Venjer
  • 1
  • 1

0 Answers0