Чт дек 22, 2022 13:57:02
Чт дек 22, 2022 18:23:30
Пт дек 30, 2022 18:28:48
Пт дек 30, 2022 20:46:25
Пт дек 30, 2022 23:12:13
- Код:
package rmd.media.StreamingAudio;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.security.InvalidParameterException;
import java.net.InetAddress;
import java.net.DatagramSocket;
import java.net.DatagramPacket;
import java.net.SocketException;
import java.net.UnknownHostException;
import android.app.Activity;
import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioTrack;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.util.Log;
/** UdpStream activity sends and recv audio data through udp */
public class UdpStream extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.udpstream);
Button btnSend = (Button)findViewById(R.id.btnSend);
btnSend.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.d(LOG_TAG, "btnSend clicked");
SendAudio();
}
});
Button btnRecv = (Button)findViewById(R.id.btnRecv);
btnRecv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.d(LOG_TAG, "btnRecv clicked");
RecvAudio();
}
});
}
static final String LOG_TAG = "UdpStream";
static final String AUDIO_FILE_PATH = "/data/1.wav";
static final int AUDIO_PORT = 2048;
static final int SAMPLE_RATE = 8000;
static final int SAMPLE_INTERVAL = 20; // milliseconds
static final int SAMPLE_SIZE = 2; // bytes per sample
static final int BUF_SIZE = SAMPLE_INTERVAL*SAMPLE_INTERVAL*SAMPLE_SIZE;
public void RecvAudio()
{
Thread thrd = new Thread(new Runnable() {
@Override
public void run()
{
Log.e(LOG_TAG, "start recv thread, thread id: "
+ Thread.currentThread().getId());
AudioTrack track = new AudioTrack(AudioManager.STREAM_MUSIC,
SAMPLE_RATE, AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT, BUF_SIZE,
AudioTrack.MODE_STREAM);
track.play();
try
{
DatagramSocket sock = new DatagramSocket(AUDIO_PORT);
byte[] buf = new byte[BUF_SIZE];
while(true)
{
DatagramPacket pack = new DatagramPacket(buf, BUF_SIZE);
sock.receive(pack);
Log.d(LOG_TAG, "recv pack: " + pack.getLength());
track.write(pack.getData(), 0, pack.getLength());
}
}
catch (SocketException se)
{
Log.e(LOG_TAG, "SocketException: " + se.toString());
}
catch (IOException ie)
{
Log.e(LOG_TAG, "IOException" + ie.toString());
}
} // end run
});
thrd.start();
}
public void SendAudio()
{
Thread thrd = new Thread(new Runnable() {
@Override
public void run()
{
Log.e(LOG_TAG, "start send thread, thread id: "
+ Thread.currentThread().getId());
long file_size = 0;
int bytes_read = 0;
int bytes_count = 0;
File audio = new File(AUDIO_FILE_PATH);
FileInputStream audio_stream = null;
file_size = audio.length();
byte[] buf = new byte[BUF_SIZE];
try
{
InetAddress addr = InetAddress.getLocalHost();
DatagramSocket sock = new DatagramSocket();
audio_stream = new FileInputStream(audio);
while(bytes_count < file_size)
{
bytes_read = audio_stream.read(buf, 0, BUF_SIZE);
DatagramPacket pack = new DatagramPacket(buf, bytes_read,
addr, AUDIO_PORT);
sock.send(pack);
bytes_count += bytes_read;
Log.d(LOG_TAG, "bytes_count : " + bytes_count);
Thread.sleep(SAMPLE_INTERVAL, 0);
}
}
catch (InterruptedException ie)
{
Log.e(LOG_TAG, "InterruptedException");
}
catch (FileNotFoundException fnfe)
{
Log.e(LOG_TAG, "FileNotFoundException");
}
catch (SocketException se)
{
Log.e(LOG_TAG, "SocketException");
}
catch (UnknownHostException uhe)
{
Log.e(LOG_TAG, "UnknownHostException");
}
catch (IOException ie)
{
Log.e(LOG_TAG, "IOException");
}
} // end run
});
thrd.start();
}
}
Вт янв 03, 2023 11:18:47
Вт янв 03, 2023 23:28:33
import pyaudio
import socket
from threading import Thread
frames = []
def udpStream(CHUNK):
udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp.bind(("192.168.0.124", 4210))
while True:
soundData, addr = udp.recvfrom(CHUNK)
frames.append(soundData)
udp.close()
def play(stream, CHUNK):
BUFFER = 10
while True:
if len(frames) == BUFFER:
while True:
stream.write(frames.pop(0))
if __name__ == "__main__":
FORMAT = pyaudio.paInt8
CHUNK = 1024
CHANNELS = 1
RATE = 8000
p = pyaudio.PyAudio()
stream = p.open(format=FORMAT,
channels = CHANNELS,
rate = RATE,
output = True,
frames_per_buffer = CHUNK,
)
Ts = Thread(target = udpStream, args=(CHUNK,))
Tp = Thread(target = play, args=(stream, CHUNK,))
Ts.setDaemon=True
Tp.setDaemon=True
Ts.start()
Tp.start()
Ts.join()
Tp.join()
Ср янв 04, 2023 12:25:06
Ср янв 04, 2023 14:47:58
olegue писал(а):ethernet еще не прибыл. Заказал 2 версии и такую как вы мне порекомендовали и под Нану.
olegue писал(а):попробую тправить через Serial в Esp01 и принять по wifi. по крайней мере сериал справлвяется с потоком 64кбит.
Чт янв 05, 2023 11:30:17
roman.com писал(а):зачем 2 версии... они одинаковые))
roman.com писал(а):доделай уже что-нибудь одно... чтоб работало))
void loop()
{
Udp.beginPacket("192.168.0.124", 4210);
for(int i=0; i<1024;i++){
int old=micros();
float analog = analogRead(A0);
if (analog > 255) {
analog = 255;
}
else if (analog < 0){
analog = 0;
}
Udp.write(int(analog));
// Serial.print(int(analog));
// Serial.print(",");
while(micros()-old<125); // 90uSec = 1Sec/11111Hz - 3uSec para los otros procesos
}
//Serial.print(";;;;;");
Udp.endPacket();
delay(5);
}
Чт янв 05, 2023 15:00:13
Чт янв 05, 2023 20:11:12
Пт янв 06, 2023 23:22:39
public void RecvAudio()
{
Thread thrd = new Thread(new Runnable() {
@Override
public void run()
{
Log.e(LOG_TAG, "start2 recv thread, thread id: "
+ Thread.currentThread().getId());
AudioTrack track = new AudioTrack(AudioManager.STREAM_MUSIC,
SAMPLE_RATE, AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_8BIT, BUF_SIZE,
AudioTrack.MODE_STREAM);
track.play();
DatagramSocket sock = null;
try
{
sock = new DatagramSocket(AUDIO_PORT);
byte[] buf = new byte[BUF_SIZE];
while(Server_aktiv)
{
DatagramPacket pack = new DatagramPacket(buf, BUF_SIZE);
sock.receive(pack);
Log.d(LOG_TAG, "recv pack: " + pack.getLength());
buf=pack.getData();
//track.write(pack.getData(), 0, pack.getLength());
track.write(buf, 0, buf.length);
}
}
catch (SocketException se)
{
Log.e(LOG_TAG, "SocketException: " + se.toString());
}
catch (IOException ie)
{
Log.e(LOG_TAG, "IOException" + ie.toString());
}
finally
{
if (sock != null)
{
sock.close();
Toast toast = Toast.makeText(getApplicationContext(),
"Сервер UDP остановлен. Пора покормить кота!", Toast.LENGTH_SHORT);
toast.show();
}
}
} // end run
});
thrd.start();
}
Сб янв 07, 2023 00:50:56
olegue писал(а):тут
https://stackoverflow.com/questions/158 ... dp-packets
человек прелагал решения , но я не смог пока его применить.
AudioTrack track = new AudioTrack(AudioManager.STREAM_MUSIC,
SAMPLE_RATE, AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_8BIT, BUF_SIZE,
AudioTrack.MODE_STREAM);
track.play();
track.write(buf, 0, buf.length);
try
{
sock = new DatagramSocket(AUDIO_PORT);
byte[] buf = new byte[BUF_SIZE];
while(Server_aktiv)
{
DatagramPacket pack = new DatagramPacket(buf, BUF_SIZE);
sock.receive(pack);
Log.d(LOG_TAG, "recv pack: " + pack.getLength());
buf=pack.getData();
//track.write(pack.getData(), 0, pack.getLength());
track.write(buf, 0, buf.length);
}
}
try
{
sock = new DatagramSocket(AUDIO_PORT);
byte[] buf = new byte[BUF_SIZE];
DatagramPacket pack = new DatagramPacket(buf, buf.length);
while(Server_aktiv)
{
sock.receive(pack);
//Log.d(LOG_TAG, "recv pack: " + pack.getAddress(); // IP String
//Log.d(LOG_TAG, "recv pack: " + pack.getPort(); // port int
Log.d(LOG_TAG, "recv pack: " + pack.getLength()); // len int
//buf=pack.getData();
//track.write(pack.getData(), 0, pack.getLength());
track.write(buf, 0, buf.length);
}
}
Пн янв 09, 2023 22:33:27
Пн янв 09, 2023 23:47:16
Вт янв 10, 2023 14:00:53
Вт янв 10, 2023 15:22:20
int buffersize = AudioRecord.getMinBufferSize(11025,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
AudioRecord arec = new AudioRecord(
MediaRecorder.AudioSource.MIC, 11025,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT, buffersize);
byte[] buffer = new byte[buffersize];
arec.startRecording();
//arec.read(buffer, 0, buffersize);
int buffersize = AudioRecord.getMinBufferSize(11025,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
AudioTrack aTrack = new AudioTrack(
AudioManager.STREAM_VOICE_CALL, 11025,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT, buffersize,
AudioTrack.MODE_STREAM);
byte[] buffer = new byte[buffersize];
aTrack.write(buffer, 0, buffer.length);
Вт янв 10, 2023 16:45:08
roman.com писал(а):не совсем понятно зачем использовать VLC плеер...
Чт янв 12, 2023 13:42:01