Ардуино - запись звука
- Реклама
надо было начинать с Ethernet... там скорость стабильная и пакеты не теряются))

понятно, но постичь, то,что через gprs нельзя передать 8битный звук - это было выше моих сил.
Добавлено after 4 minutes 58 seconds:
https://aliexpress.ru/item/32341839317. ... 1636476435
закажу вот эту штуку -адаптер LAN под Nano, надо таки довести дело до конца
Добавлено after 3 minutes 23 seconds:
непонятно только как это повлияет на проект с gprs передачей
Добавлено after 4 minutes 58 seconds:
https://aliexpress.ru/item/32341839317. ... 1636476435
закажу вот эту штуку -адаптер LAN под Nano, надо таки довести дело до конца
Добавлено after 3 minutes 23 seconds:
непонятно только как это повлияет на проект с gprs передачей
ты что-то делаешь неправильно... я пока не знаю что... но знаю что что-то неправильно))
я такой заказывал...
https://aliexpress.ru/item/32832354059. ... 4aa6aAlR4K
он более новый))
Добавлено after 2 hours 53 minutes 42 seconds:
я все модули уже переделал на POE (5V, 2А)... чтоб с проводами не возиться)) на 80 метров по витухе работает.
дальше не проверял)) думаю и 200 метров будет нормально.
Добавлено after 1 minute 39 seconds:
надо будет потом тоже добавить звук... например для домофона))
только звук без шифрования по интернету передавать нельзя... а по локалке пойдёт))

Добавлено after 8 minutes 34 seconds:
щас застрял с приёмником... sn74hc00 медленно работают)) надо другие...

я такой заказывал...
https://aliexpress.ru/item/32832354059. ... 4aa6aAlR4K
он более новый))
Добавлено after 2 hours 53 minutes 42 seconds:
я все модули уже переделал на POE (5V, 2А)... чтоб с проводами не возиться)) на 80 метров по витухе работает.
дальше не проверял)) думаю и 200 метров будет нормально.
Добавлено after 1 minute 39 seconds:
надо будет потом тоже добавить звук... например для домофона))
только звук без шифрования по интернету передавать нельзя... а по локалке пойдёт))
Добавлено after 8 minutes 34 seconds:
щас застрял с приёмником... sn74hc00 медленно работают)) надо другие...
- Реклама
была такая мысль)) до андроид пока не дошёл... там чуть иначе... всякие манифесты писать надо и т.д.
для андроид есть своя среда разработки... от производителя))
для андроид есть своя среда разработки... от производителя))
может есть андроид студио
компилировать этот код
http://rxwen.blogspot.com/2011/10/strea ... droid.html
Добавлено after 9 minutes 58 seconds:
вероятно потребуется весь пакет. Тема двольно старая может я сам найду подходящий на тот момент , аэто 2012 год , компилятор
http://web.archive.org/web/201204131451 ... ing_audio/
Добавлено after 1 minute 45 seconds:
нашел его проект на гитхабе
https://github.com/rxwen/rxwen-blog-stu ... ming_audio
Добавлено after 19 minutes 50 seconds:
я там покопался в файлах, там вроде под эклипс, если он существовал в те времена.
компилировать этот код
отсюдаКод: Выделить всё
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(); } }
http://rxwen.blogspot.com/2011/10/strea ... droid.html
Добавлено after 9 minutes 58 seconds:
вероятно потребуется весь пакет. Тема двольно старая может я сам найду подходящий на тот момент , аэто 2012 год , компилятор
http://web.archive.org/web/201204131451 ... ing_audio/
Добавлено after 1 minute 45 seconds:
нашел его проект на гитхабе
https://github.com/rxwen/rxwen-blog-stu ... ming_audio
Добавлено after 19 minutes 50 seconds:
я там покопался в файлах, там вроде под эклипс, если он существовал в те времена.
я смотрел видеоуроки на ютуб... там всё подробно... на примерах))
ethernet уже доделал ? надо что-то одно доделать... для начала))
ethernet уже доделал ? надо что-то одно доделать... для начала))
ethernet еще не прибыл. Заказал 2 версии и такую как вы мне порекомендовали и под Нану.
но по приложению отработал на выходных
https://www.youtube.com/watch?v=fyaaMn6Av3s
поставил осюда
https://drive.google.com/file/d/1a2vg0m ... cUu7P/view
eclipse juno +Aндроид SDK
поставил java 6 jdk
Поробоовал скопилировать проект. К сожалению импорт проекта не удался. Кричит на Манифест. Манифест фообще не понимает. Тогда взял фйлы из layuot и src и перенес их в новых проект. Компилил его под Андрод 4.4. Небольшие ошибки опять повылазили, поправил. Проблема именео что проект очень старый, скорее всего он компилирся под Андроид 2.x или даже ниже. Пробовал ставить в sdk менеджере поддержку - не получилсь.
Короче , по итого проект скомпилился, под 4.4. я получил apk и я его запустил на своем телефоне. Но пока ничего не зработала, там есть процедура проигрывания , она в MainActivity, вроде как она должна играть 1.wav который лежит на data, но ругается на buffer. К сожалению проект отстался на другом компе. Завтра выложу. Может быть кто-то или , Вы , Роман занитересуетесь.
Добавлено after 18 minutes 5 seconds:
если б на гитхабе хоть писали какой версией компились
Добавлено after 1 hour 29 minutes 28 seconds:
еще вот на Python код нашел. Это код udp server для звука. Но не звучит. Очень плохой звук. Хотя Ваша прога воспроизводит хорошо.
но по приложению отработал на выходных
https://www.youtube.com/watch?v=fyaaMn6Av3s
поставил осюда
https://drive.google.com/file/d/1a2vg0m ... cUu7P/view
eclipse juno +Aндроид SDK
поставил java 6 jdk
Поробоовал скопилировать проект. К сожалению импорт проекта не удался. Кричит на Манифест. Манифест фообще не понимает. Тогда взял фйлы из layuot и src и перенес их в новых проект. Компилил его под Андрод 4.4. Небольшие ошибки опять повылазили, поправил. Проблема именео что проект очень старый, скорее всего он компилирся под Андроид 2.x или даже ниже. Пробовал ставить в sdk менеджере поддержку - не получилсь.
Короче , по итого проект скомпилился, под 4.4. я получил apk и я его запустил на своем телефоне. Но пока ничего не зработала, там есть процедура проигрывания , она в MainActivity, вроде как она должна играть 1.wav который лежит на data, но ругается на buffer. К сожалению проект отстался на другом компе. Завтра выложу. Может быть кто-то или , Вы , Роман занитересуетесь.
Добавлено after 18 minutes 5 seconds:
если б на гитхабе хоть писали какой версией компились
Добавлено after 1 hour 29 minutes 28 seconds:
Код: Выделить всё
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()
зачем 2 версии... они одинаковые))olegue писал(а):ethernet еще не прибыл. Заказал 2 версии и такую как вы мне порекомендовали и под Нану.
а в чём разница ENC28J60 и W5500 ?
ENC28J60 работает только с ethernet пакетами... остальное (UDP) делает ардуина...
W5500 работает как с ethernet пакетами, так и делает остальное (UDP)... при этом ардуина отдыхает))
вывод: W5500 более универсальный. Поэтому рекомендую его.
до Aндроид SDK ещё не дошёл... у меня нет Aндроид... пока нет))
пытался писать на Python... мне не понравилось. Вернулся на знакомый Си и java ))
Добавлено after 2 minutes 58 seconds:
доделай уже что-нибудь одно... чтоб работало))olegue писал(а):попробую тправить через Serial в Esp01 и принять по wifi. по крайней мере сериал справлвяется с потоком 64кбит.
всегда надо иметь 2 . В случае непредвидненных ситуация проект не будет остановлен.roman.com писал(а):зачем 2 версии... они одинаковые))
по поводу wifi и esp8266 ....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);
}Прнимаю его на Ваш java приемник без проблем
взято отсюда
https://arduino.stackexchange.com/quest ... eger-input
Андроид проект является продолжением этой темы. Т.е теперь я хочу принимать этоо сигнал на андроиде.
Счас разберусь с sdk и кнопками и выдам чего нить или найду готовое, что предпочтительнее, потому как правило это все уже написано.
Добавлено after 3 minutes 55 seconds:
Если честно, то я , грешным делом полагал после экспериментов c gprs на sim800, что Ваш приемник не очень корректно работает. Но теперь эти подозрения сняты. проблема именно в gprs передатчике. Но, как говорится, что ни делалется все к лучшем. В итоге поучли и передатчик на esp8266 и убедился что с Вашим приемником все хорошо.
Добавлено after 2 minutes 10 seconds:
Так, что Роман, ввсе идет своим чередом, хотя изза возникших проблем со здоровьем мне это последнее время еще более нелегко дается. Уделяь это столько времени как раньше становитсья все тяжелее.
[uquote="olegue",url="/forum/viewtopic.php?p=4348561#p4348561"]я , грешным делом полагал после экспериментов c gprs на sim800, что Ваш приемник не очень корректно работает.[/uquote]
в своём приёмнике я не сомневался))
единственное что вызывает сомнения - выбег частоты.
в материнской плате стоят кварцы... стабильность частоты кварца не идеальная... поэтому через некоторое время может возникнуть выбег частоты приёмника и передатчика... получим рассинхронизацию...
-например передатчик будет передавать чуть с более высокой скорость (8001 семпл/с), а приёмник будут воспроизводить например чуть с меньшей скоростью (7999 семпл/c). Это приведёт сначала к задержкам воспроизведения... а потом и к переполнению буфера приёмника и потери пакета (в динамике услышим "заикания").
это надо проверить...

Добавлено after 3 minutes 41 second:
[uquote="olegue",url="/forum/viewtopic.php?p=4348561#p4348561"]по поводу wifi и esp8266 ....
вот прекрасно работающий код[/uquote]
в esp8266 тоже стоит кварц.
в esp8266 тоже стабильность частоты не идеальная)).
как долго ты его гонял в непрерывном режиме ?
1 час ? 2 часа ? выбег частоты проверял ?
например через 1 час непрерывной работы задержка воспроизведения осталась неизменной ?
вот если бы ты использовал атомные часы... например использующие полупериод распада цезия... то у меня бы не было бы сомнений в стабильности частоты))
Добавлено after 9 minutes 38 seconds:
короче... осталось проверить как работает по эзернет... и можно переходить к написанию своего мессенджера для андроид)) самодельный скайп для ПК у нас уже есть))

блин.. с этими праздниками некогда заняться программами... ))

в своём приёмнике я не сомневался))
единственное что вызывает сомнения - выбег частоты.
в материнской плате стоят кварцы... стабильность частоты кварца не идеальная... поэтому через некоторое время может возникнуть выбег частоты приёмника и передатчика... получим рассинхронизацию...
-например передатчик будет передавать чуть с более высокой скорость (8001 семпл/с), а приёмник будут воспроизводить например чуть с меньшей скоростью (7999 семпл/c). Это приведёт сначала к задержкам воспроизведения... а потом и к переполнению буфера приёмника и потери пакета (в динамике услышим "заикания").
это надо проверить...
Добавлено after 3 minutes 41 second:
[uquote="olegue",url="/forum/viewtopic.php?p=4348561#p4348561"]по поводу wifi и esp8266 ....
вот прекрасно работающий код[/uquote]
в esp8266 тоже стоит кварц.
в esp8266 тоже стабильность частоты не идеальная)).
как долго ты его гонял в непрерывном режиме ?
1 час ? 2 часа ? выбег частоты проверял ?
например через 1 час непрерывной работы задержка воспроизведения осталась неизменной ?
вот если бы ты использовал атомные часы... например использующие полупериод распада цезия... то у меня бы не было бы сомнений в стабильности частоты))
Добавлено after 9 minutes 38 seconds:
короче... осталось проверить как работает по эзернет... и можно переходить к написанию своего мессенджера для андроид)) самодельный скайп для ПК у нас уже есть))
блин.. с этими праздниками некогда заняться программами... ))
На час оставлял, но тут нужно учитывать что wifi Тоже такая себе стабильность, не очень стабильная. Но работало неплох, но затыки были , причем совершенно нерегулярыные, системы я не заметил,счас занялся андроидом и пока сложил в коробку.
Вот если бы можно было организовать какой - нить образцовый стримовый передатчик. Тогда можно было бы отстраивать и проверять приемники
Добавлено after 3 hours 35 minutes 58 seconds:
Рабочий код для приемника Udp audio для Андроида.
Но с затыками еще предстоит бороться.
как приведу немного в порядок интерйфейс выложу apk и проект
Добавлено after 4 minutes 23 seconds:
с буфером надо поигратся.
тут
https://stackoverflow.com/questions/158 ... dp-packets
человек прелагал решения , но я не смог пока его применить.
Добавлено after 3 hours 35 minutes 58 seconds:
Рабочий код для приемника Udp audio для Андроида.
Но с затыками еще предстоит бороться.
Код: Выделить всё
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();
}Добавлено after 4 minutes 23 seconds:
с буфером надо поигратся.
тут
https://stackoverflow.com/questions/158 ... dp-packets
человек прелагал решения , но я не смог пока его применить.
я не знаю как работает audio для Андроида.))olegue писал(а):тут
https://stackoverflow.com/questions/158 ... dp-packets
человек прелагал решения , но я не смог пока его применить.
но судя по всему примерно так же как в java...
я бы для начала поигрался с сами плеером в Андроида... а потом уже думал как это передать - принять по UDP/
в java я так и сделал)) сначала поигрался с самим плеером... а топом добавил передачу - приём по UDP.
а топом ещё добавил запись на диск ПК... получился диктофон))
а том ещё добавил ползунки... получился индикатор уровня сигнала))
а потом ещё... можно добавить всякие визуальные эффекты))
а потом ещё... можно сделать звуковой редактор)) и т.д.
Код: Выделить всё
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);
}
}
поставил VLC плейер, теперь слушаю стрим с esp8266 посредством этой строки
vlc --demux=rawaud --rawaud-channels=1 --rawaud-samplerate=8000 --rawaud-fourcc "u8 " --network-caching=2000 udp://@:4210
прикольно.
Добавлено after 1 minute 55 seconds:
Но лаги остались!!!! ааааааааа. Счас заряжу трансляцию с vlc и попытаюсь принять. Интересно будут ли лаги.
Добавлено after 56 minutes 23 seconds:
Но VLC пока не удалось зарядить на трансляцию Raw данных, не хочет он их отправлять с интерфейса. Надо коммандную строку искать
vlc --demux=rawaud --rawaud-channels=1 --rawaud-samplerate=8000 --rawaud-fourcc "u8 " --network-caching=2000 udp://@:4210
прикольно.
Добавлено after 1 minute 55 seconds:
Но лаги остались!!!! ааааааааа. Счас заряжу трансляцию с vlc и попытаюсь принять. Интересно будут ли лаги.
Добавлено after 56 minutes 23 seconds:
Но VLC пока не удалось зарядить на трансляцию Raw данных, не хочет он их отправлять с интерфейса. Надо коммандную строку искать
а шифрование будет ? )) или у тебя без шифрования... как WEB-радио))
https://www.radiokot.ru/forum/viewtopic ... 7&start=44
https://www.radiokot.ru/forum/viewtopic ... 7&start=44
по ка мне не откого шифроваться. ХОчу просто наладить связь и разобраться в причинах лагов. Получается , и VLC и Ваше, Роман, java проигрыватетль одинаково принимают raw данные. Если бы мне удалось настроить отправку через vlc , а прием уже есть , то былоа бы полная ясность
не совсем понятно зачем использовать VLC плеер...
у тебя же есть плееры java для ПК... и для андроид... и т.д.
а что умеет VLC плеер ?
пишут что умеет транслировать потоки по сети... не пробовал))

а что умеет плеер андроид ?
умеет записывать поток...
умеет воспроизводить поток...
и т.д.))
у тебя же есть плееры java для ПК... и для андроид... и т.д.
а что умеет VLC плеер ?
пишут что умеет транслировать потоки по сети... не пробовал))
а что умеет плеер андроид ?
умеет записывать поток...
Код: Выделить всё
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);


