Обсуждаем контроллеры компании Atmel.
Ответить

Re: Ардуино - запись звука

Чт дек 22, 2022 13:57:02

понятно, но постичь, то,что через gprs нельзя передать 8битный звук - это было выше моих сил.

Добавлено after 4 minutes 58 seconds:
https://aliexpress.ru/item/32341839317. ... 1636476435

закажу вот эту штуку -адаптер LAN под Nano, надо таки довести дело до конца

Добавлено after 3 minutes 23 seconds:
непонятно только как это повлияет на проект с gprs передачей

Re: Ардуино - запись звука

Чт дек 22, 2022 18:23:30

ты что-то делаешь неправильно... я пока не знаю что... но знаю что что-то неправильно))

я такой заказывал...
https://aliexpress.ru/item/32832354059. ... 4aa6aAlR4K
он более новый))

Добавлено after 2 hours 53 minutes 42 seconds:
я все модули уже переделал на POE (5V, 2А)... чтоб с проводами не возиться))
схема.jpg
(14.73 KiB) Скачиваний: 47

после переделки.jpg
(81.19 KiB) Скачиваний: 57

работает)).jpg
(90.09 KiB) Скачиваний: 44

на 80 метров по витухе работает.
дальше не проверял)) думаю и 200 метров будет нормально.

Добавлено after 1 minute 39 seconds:
надо будет потом тоже добавить звук... например для домофона))
только звук без шифрования по интернету передавать нельзя... а по локалке пойдёт))
:tea:

Добавлено after 8 minutes 34 seconds:
щас застрял с приёмником...
схема_RX.jpg
(103.96 KiB) Скачиваний: 51

sn74hc00 медленно работают))
sn74hc00.jpg
(30.02 KiB) Скачиваний: 45

надо другие...
:tea:

Re: Ардуино - запись звука

Пт дек 30, 2022 18:28:48

roman.com, можно ли Ваш ява плейер скомпилировать под Андроид?

Re: Ардуино - запись звука

Пт дек 30, 2022 20:46:25

была такая мысль)) до андроид пока не дошёл... там чуть иначе... всякие манифесты писать надо и т.д.
для андроид есть своя среда разработки... от производителя))

Re: Ардуино - запись звука

Пт дек 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();
    }
   
}


отсюда

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:
я там покопался в файлах, там вроде под эклипс, если он существовал в те времена.

Re: Ардуино - запись звука

Вт янв 03, 2023 11:18:47

я смотрел видеоуроки на ютуб... там всё подробно... на примерах))

ethernet уже доделал ? надо что-то одно доделать... для начала))

Re: Ардуино - запись звука

Вт янв 03, 2023 23:28:33

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:
Код:
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()


еще вот на Python код нашел. Это код udp server для звука. Но не звучит. Очень плохой звук. Хотя Ваша прога воспроизводит хорошо.

Re: Ардуино - запись звука

Ср янв 04, 2023 12:25:06

вот проект, там внутри apk

https://files.fm/u/9yqm8xk2k

Re: Ардуино - запись звука

Ср янв 04, 2023 14:47:58

olegue писал(а):ethernet еще не прибыл. Заказал 2 версии и такую как вы мне порекомендовали и под Нану.

зачем 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кбит.

доделай уже что-нибудь одно... чтоб работало))

Re: Ардуино - запись звука

Чт янв 05, 2023 11:30:17

roman.com писал(а):зачем 2 версии... они одинаковые))


всегда надо иметь 2 . В случае непредвидненных ситуация проект не будет остановлен.

roman.com писал(а):доделай уже что-нибудь одно... чтоб работало))


по поводу wifi и esp8266 ....

вот прекрасно работающий код
Код:
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:
Так, что Роман, ввсе идет своим чередом, хотя изза возникших проблем со здоровьем мне это последнее время еще более нелегко дается. Уделяь это столько времени как раньше становитсья все тяжелее.

Re: Ардуино - запись звука

Чт янв 05, 2023 15:00:13

я , грешным делом полагал после экспериментов c gprs на sim800, что Ваш приемник не очень корректно работает.

в своём приёмнике я не сомневался))
единственное что вызывает сомнения - выбег частоты.
в материнской плате стоят кварцы...
кварц.jpg
(118.8 KiB) Скачиваний: 33

стабильность частоты кварца не идеальная...
кварц2.jpg
(78.88 KiB) Скачиваний: 37

поэтому через некоторое время может возникнуть выбег частоты приёмника и передатчика... получим рассинхронизацию...
-например передатчик будет передавать чуть с более высокой скорость (8001 семпл/с), а приёмник будут воспроизводить например чуть с меньшей скоростью (7999 семпл/c). Это приведёт сначала к задержкам воспроизведения... а потом и к переполнению буфера приёмника и потери пакета (в динамике услышим "заикания").
это надо проверить...
:roll:

Добавлено after 3 minutes 41 second:
по поводу wifi и esp8266 ....

вот прекрасно работающий код

в esp8266 тоже стоит кварц.
в esp8266 тоже стабильность частоты не идеальная)).
как долго ты его гонял в непрерывном режиме ?
1 час ? 2 часа ? выбег частоты проверял ?
например через 1 час непрерывной работы задержка воспроизведения осталась неизменной ?

вот если бы ты использовал атомные часы... например использующие полупериод распада цезия... то у меня бы не было бы сомнений в стабильности частоты))
часы)).jpg
(75.93 KiB) Скачиваний: 34

:)))

Добавлено after 9 minutes 38 seconds:
короче... осталось проверить как работает по эзернет... и можно переходить к написанию своего мессенджера для андроид))
мессенджеры.jpg
(55.15 KiB) Скачиваний: 42

самодельный скайп для ПК у нас уже есть))
:tea:

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

Re: Ардуино - запись звука

Чт янв 05, 2023 20:11:12

На час оставлял, но тут нужно учитывать что wifi Тоже такая себе стабильность, не очень стабильная. Но работало неплох, но затыки были , причем совершенно нерегулярыные, системы я не заметил,счас занялся андроидом и пока сложил в коробку.

Re: Ардуино - запись звука

Пт янв 06, 2023 23:22:39

Вот если бы можно было организовать какой - нить образцовый стримовый передатчик. Тогда можно было бы отстраивать и проверять приемники

Добавлено 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();
}


как приведу немного в порядок интерйфейс выложу apk и проект

Добавлено after 4 minutes 23 seconds:
с буфером надо поигратся.

тут

https://stackoverflow.com/questions/158 ... dp-packets

человек прелагал решения , но я не смог пока его применить.

Re: Ардуино - запись звука

Сб янв 07, 2023 00:50:56

olegue писал(а):тут

https://stackoverflow.com/questions/158 ... dp-packets

человек прелагал решения , но я не смог пока его применить.

я не знаю как работает audio для Андроида.))
но судя по всему примерно так же как в java...
я бы для начала поигрался с сами плеером в Андроида... а потом уже думал как это передать - принять по UDP/
в java я так и сделал)) сначала поигрался с самим плеером... а топом добавил передачу - приём по UDP.
а топом ещё добавил запись на диск ПК... получился диктофон))
а том ещё добавил ползунки... получился индикатор уровня сигнала))
а потом ещё... можно добавить всякие визуальные эффекты))
а потом ещё... можно сделать звуковой редактор))
редактор звука)).jpg
(31.07 KiB) Скачиваний: 34

и т.д.
:tea:
Код:
           
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);

:roll:


Код:
            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);
                }
            }

Re: Ардуино - запись звука

Пн янв 09, 2023 22:33:27

поставил 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 данных, не хочет он их отправлять с интерфейса. Надо коммандную строку искать

Re: Ардуино - запись звука

Пн янв 09, 2023 23:47:16

а шифрование будет ? )) или у тебя без шифрования... как WEB-радио))

https://www.radiokot.ru/forum/viewtopic ... 7&start=44

Re: Ардуино - запись звука

Вт янв 10, 2023 14:00:53

по ка мне не откого шифроваться. ХОчу просто наладить связь и разобраться в причинах лагов. Получается , и VLC и Ваше, Роман, java проигрыватетль одинаково принимают raw данные. Если бы мне удалось настроить отправку через vlc , а прием уже есть , то былоа бы полная ясность

Re: Ардуино - запись звука

Вт янв 10, 2023 15:22:20

не совсем понятно зачем использовать VLC плеер...
:roll:
у тебя же есть плееры java для ПК... и для андроид... и т.д.

а что умеет VLC плеер ?
пишут что умеет транслировать потоки по сети...
VLC плеер.jpg
(77.87 KiB) Скачиваний: 37

не пробовал))
:tea:

а что умеет плеер андроид ?
умеет записывать поток...
Код:
            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);

и т.д.))

Re: Ардуино - запись звука

Вт янв 10, 2023 16:45:08

roman.com писал(а):не совсем понятно зачем использовать VLC плеер...
:roll:

в нем можно задать буфер по прием и протестировать поток на какойто линии что бы разобраться почему не работает что-то самодельное на андроиде или esp


домучаал таки vlc

отправил таки с него поток в нужном мне формате 8бит/8000кгц на свой самодельный андроид плейр

вот строка
vlc.exe 1.raw --sout=#transcode{acodec="u8 ",ab=64,channels=1}:duplicate{dst=std{access=udp,mux=raw,dst=192.168.10.141:4210}}

ну че сказать. Лаги остались, вероятно в андроид плейере нужно делать буфер.
еще попробоую чуть позже с vlc на vlc.


И еще на дня придет ЛАН

Re: Ардуино - запись звука

Чт янв 12, 2023 13:42:01

пришел модуль 5500 . но готовых кодов нету под него. Надо писать, как я понял
Ответить