[java] bufferizzare stream audio da mic

Stato
Chiusa ad ulteriori risposte.

zabitmrw

Nuovo Utente
17 Lug 2021
8
0
1
import javax.sound.sampled.*; import java.io.*; import java.net.*; import java.util.Arrays; /** * A sample program is to demonstrate how to record sound in Java */ public class JavaSoundRecorder { // record duration, in milliseconds static final long RECORD_TIME = 5000; // 5 seconds // format of audio file AudioFileFormat.Type fileType = AudioFileFormat.Type.WAVE; // the line from which audio data is captured TargetDataLine line; /** * Defines an audio format */ AudioFormat getAudioFormat() { float sampleRate = 16000; int sampleSizeInBits = 8; int channels = 2; boolean signed = true; boolean bigEndian = true; AudioFormat format = new AudioFormat(sampleRate, sampleSizeInBits, channels, signed, bigEndian); return format; } /** * Captures the sound and record into a WAV file */ void start() { try { AudioFormat format = getAudioFormat(); DataLine.Info info = new DataLine.Info(TargetDataLine.class, format); // checks if system supports the data line if (!AudioSystem.isLineSupported(info)) { System.out.println("Line not supported"); System.exit(0); } line = (TargetDataLine) AudioSystem.getLine(info); line.open(format,4096); line.start(); // start capturing System.out.println("Start capturing..."); byte tempBuffer[] = new byte[10000]; ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); try{ int c = 0; while(line.isOpen()){ //Read data from the internal // buffer of the data line. c++; int cnt = line.read(tempBuffer, 0, tempBuffer.length); System.out.println("letti dim buffer: "+cnt+"\n"); System.out.print("letti bytes:"+Arrays.toString(tempBuffer)); if(cnt > 0){ byteArrayOutputStream.write(tempBuffer, 0, cnt); } }//end while System.out.println("numero di volte che ha letto:"+c); byteArrayOutputStream.close(); String fileName = "/home/zabit/Documents/rec.wav"; File fileStreamedWav = new File(fileName); AudioFileFormat.Type afType = AudioFileFormat.Type.WAVE; //AudioFormat adfmt = new AudioFormat(8000.0f, 8, 1, true , true); AudioFormat adfmt = getAudioFormat(); ByteArrayInputStream bis = new ByteArrayInputStream(byteArrayOutputStream.toByteArray()); AudioInputStream ais = new AudioInputStream(bis, adfmt, byteArrayOutputStream.toByteArray().length); int W = AudioSystem.write(ais, afType, fileStreamedWav); //leggi il file audio e play //invia al server socket //Socket soc = new Socket("127.0.0.1" ,4444); //DataOutputStream out = new DataOutputStream(soc.getOutputStream()); //out.write(result); }catch (Exception e) { System.out.println(e); System.exit(0); }//end catch } catch (LineUnavailableException ex) { ex.printStackTrace(); } //} catch (IOException ioe) { // ioe.printStackTrace(); //} } /** * Closes the target data line to finish capturing and recording */ void finish() { line.stop(); line.close(); System.out.println("Finished"); } /** * Entry to run the program */ public static void main(String[] args) { final JavaSoundRecorder recorder = new JavaSoundRecorder(); // creates a new thread that waits for a specified // of time before stopping Thread stopper = new Thread(new Runnable() { public void run() { try { Thread.sleep(RECORD_TIME); } catch (InterruptedException ex) { ex.printStackTrace(); } recorder.finish(); } }); stopper.start(); // start recording recorder.start(); } }

Salve sto provando a scrivere la parte di codice java per bufferizzare l'audio stream preso da microfono.
Mi spiego meglio, l'applicazione con un Thread rimane in attesa per 5 secondi.
Durante questi 5 secondi il processo JavaSoundRecorder parte, solo dopo trascorsi i secondi verrà terminato di fatto uscendo dal ciclo e chiudendo la comunicazione con il microfono.
Il processo dopo aver ottenuto "una linea microfono" cattura l'audio. Finchè il microfono e quindi la sua linea è aperta, leggo 10000 bytes e tento di stampare a video questi byte
byte tempBuffer[] = new byte[10000]; int cnt = line.read(tempBuffer,0,tempBuffer.length); System.out.print("letti:"+Arrays.toString(tempBuffer));

devo prima sapere la lunghezza dello stream dal mic, quindi devo bufferizzare. Pertanto creo ByteArrayOutputStream e scrivo dentro ogni chunk di 10000 bytes.
Infine prima di poter provare a inviarlo su socket salvo tutto su file wav.
 

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.449
338
83
codice.JPG
 
  • Like
Reactions: zabitmrw
Stato
Chiusa ad ulteriori risposte.
Discussioni simili
Autore Titolo Forum Risposte Data
L java api_google Javascript 0
F NetBeans problema creazione progetto Java Windows e Software 0
L java + Api di google Javascript 1
A [Cerchiamo] [Retribuito/a] "Java Solution Architect" Offerte e Richieste di Lavoro e/o Collaborazione 1
F Script java elenco alfabetico non funziona Javascript 3
C Serializzazione in java Java 1
M AIUTO ESERCIZIO JAVA Javascript 1
M Ripasso Java Offerte e Richieste di Lavoro e/o Collaborazione 0
F [OFFRO - RETRIBUITO] Sviluppatori JAVA Offerte e Richieste di Lavoro e/o Collaborazione 0
L leggere RGB di un pixel dello schermo in java Java 1
I Creazione programmino JAVA Offerte e Richieste di Lavoro e/o Collaborazione 0
F Aiuto java script Javascript 2
T [Java] tipi generici con esempio pratico Java 1
J File audio in java Java 0
V [JAVA] come integrare un software scritto in java su una pagina web? Java 4
C Java client / server Java 0
F [OFFRO][RETRIBUITO] PROGRAMMATORE JAVA Offerte e Richieste di Lavoro e/o Collaborazione 0
C [Java] testare un metodo con Junit Java 1
A [Java] caricare un url esterno senza utilizzo di iframe Java 0
S [OFFRO] Debug delle tue applicazioni Java Offerte e Richieste di Lavoro e/o Collaborazione 1
L [Java] Aggiungere elementi ad array JSON Java 0
B [Java] Paginazione in risposta HTTP Java 0
A [Java]Date diminuite di un giorno su db MySQL Java 0
K [Java] aiuto switch case Java 1
P [Java] limite destro di un JFrame Java 5
D [Java] far partire JProgressBar all'apertura di un JFrame Java 1
N [java con eclipse]metodo ricorsivo che accetta in ingresso un char e restituisce un int Java 0
A Verifica validità data in Java Java 2
L [Java] Errore json conversione Java 0
Drago73 [Java] leggere/scrivere txt server Java 0
M [Javascript] Java card Java 0
serena.cerutti posizioni aperte: PhP, Java, .Net Offerte e Richieste di Lavoro e/o Collaborazione 0
N [Java]problema jasper report dopo compilazione file .jar Java 0
N [Java] Piccolo jform per calcolo totale da 2 campi i double Java 0
N [Java] jbutton con funzioni Java 2
M [java] esercizio lunghezza array di stringhe Java 0
A [java] problema esercizio Java 0
filograndipad2 Esempi chiari e completi sul funzionamento degli eventi in Java Java 1
Raziel84 [Java] Combinazione elementi matrice Java 0
A [java] problema esercizio array Java 5
L da php a popup java PHP 2
W Piccolo sistema per gestire alcune periferiche, Java o altro linguaggio? Java 8
S Cerco programmatore java Offerte e Richieste di Lavoro e/o Collaborazione 0
Z [Java] Grassetto assente su font incorporato nel pacchetto jar Java 0
O [Java] Lettura da JSON File Java 0
Z [Java] Caratteri distorti e spaziature errate nelle stampe di componenti swing Java 0
W Aiutino per compilare o eseguire un App Java Java 0
S [JAVA] Geocoding Java Java 0
Andy56 Parametri funzioni in Java Java 0
B [Java] Stringhe binarie Java 0

Discussioni simili