Codice:
import javax.sound.sampled.*;
import java.io.*;
public class TaxiRecord
{
// the line from which audio data is captured
private TargetDataLine line;
//private File f;
private FileOutputStream f;
public TaxiRecord() throws FileNotFoundException {
AudioFormat format = null;
DataLine.Info info = null;
byte tempBuffer[] = new byte[1000];
try{
format = getAudioFormat();
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);
line.start(); // start capturing
} catch (LineUnavailableException ex) {
ex.printStackTrace();
}
f = new FileOutputStream("/home/zabit/Documents/liketaxi/1.wav",true);
while(line.isOpen()){
int cnt = line.read(tempBuffer, 0, tempBuffer.length);
System.out.println(cnt);
int cntTemp = 0;
for(int g = 0; g < tempBuffer.length; g++)
if(tempBuffer[g] != 0) cntTemp++;
System.out.println(cntTemp);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byteArrayOutputStream.write(tempBuffer, 0, tempBuffer.length);
AudioFileFormat.Type afType = AudioFileFormat.Type.WAVE;
AudioFormat adfmt = getAudioFormat();
ByteArrayInputStream bis = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
AudioInputStream ais = new AudioInputStream(bis, adfmt, byteArrayOutputStream.toByteArray().length);
try{
int W = AudioSystem.write(ais, afType, f);
byteArrayOutputStream.flush();
byteArrayOutputStream.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
private 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;
}
}
Codice:
import java.io.FileNotFoundException;
public class TaxiRecordApp
{
public TaxiRecordApp(){
}
public static void main(String[] args){
try {
TaxiRecord tr = new TaxiRecord();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
Non capisco come streamare tutto AudioInputStream sul file /home/zabit/Documents/liketaxi/1.wav
In pratica sto cercando di salvare lo stream catturato da microfono e registrarlo su file.
Questa istruzione
Codice:
f = new FileOutputStream("/home/zabit/Documents/liketaxi/1.wav",true);
Crea il file appendendo se esiste gia. CIo che succede invece è che vengono scritti i byte.
Il file infatti cresce anche ad un mega, dopo qualche secondo, Ma se faccio play non sento nulla. sembra segua byte[1000];
Se provo ad aumentare questo valore a diciamo 1000000 lascinado scorrere per diversi secondi sento correttamente. Piu il valore è alto piu devo attendere prima di chiudere il canale.