Java Sound registrare l'audio che si sta ascoltando

di il
5 risposte

Java Sound registrare l'audio che si sta ascoltando

Salve a tutti sono nuovo del forum e diciamo anche delle programmazione in java. Avrei un problema da sottoporvi. Vorrei catturare l'audio che in un qualsiasi momento si sta ascoltando sul proprio pc . Per registare da microfono sono riuscito usando questo codice preso in parte dalla rete e adattato un pochino per vedere il suo funzionamento
	public void run() {
		
		AudioFormat tmpAf = null;
		DataLine.Info info = null;
		
			tmpAf = SetFileAudio.setAudio();
			 info= new DataLine.Info(TargetDataLine.class,
					tmpAf);
			
				if (!AudioSystem.isLineSupported(info))
				{System.out.println("La linea " +info+ " non e'supportata.");
				}
				else
				try {
				target= (TargetDataLine) AudioSystem.getLine(info);
				
				target.open();
				} catch (LineUnavailableException ex) {
				System.out.println("Impossibile aprire la linea: "+ ex);
				return;
				}
		//esecuzione 
				ByteArrayOutputStream out = new ByteArrayOutputStream();
				int frameSizeInBytes= tmpAf.getFrameSize();
				int bufferSubLength= (int)(target.getBufferSize()/8); //frazione buffer
				int bufferLengthInBytes= bufferSubLength* frameSizeInBytes;
			
				byte[] data = new byte[bufferLengthInBytes];
				int numBytesRead;
				File f = new File("C:/Documents and Settings/UTENTE/Desktop/Università/prova.wav");
				try {
					f.createNewFile();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				target.start();
				int n=0;
				while (thread!=null) {
				if((numBytesRead= target.read(data, 0,
				bufferLengthInBytes)) ==-1) 
				{break;}
				
				out.write(data, 0, numBytesRead);
				for(Byte sel : data)
					System.out.print(sel+",");
				System.out.print("\n");
				
				
				byte audioBytes[] = out.toByteArray();
				ByteArrayInputStream bais= new ByteArrayInputStream(audioBytes);
				
				int frameSizeInByte= tmpAf.getFrameSize();
				long lenInFrames = audioBytes.length / frameSizeInByte;
				AudioInputStream ais= new AudioInputStream(bais, // InputStream contenente tutti i campioni
				tmpAf, // formato audio dello stream
				lenInFrames); // numero di frame dello stream
				
				System.out.println(saveAudioFile(ais,AudioSystem.getAudioFileTypes()[0],f));
				DataInputStream prova = new DataInputStream(ais);
				
				}
				target.stop();
				target.close();
			

	}
Il codice apre la targetline registra e poi salva tutto in un file nella mia cartella dell uni. Qui tutto funziona per il meglio ma io vorrei che invece di registare dal microfono registrasse direttamente da qeullo che viene mandato alle casse. Questa funzione c'è gia in windows infatti impostando da pannello di controllo Audio - Mixaggio Stereo il programma legge effettivamente quello che sento dalle casse . Io vorrei che questa scelta venisse fatta internamente al programma ... come faccio ? ho visto in giro che ci son programmi che ti permettono di fare cio .. è possibile in java cambiare il target o il sorce ( non ho capito bene XD ) del mixer? oppure bisogna usare un programma di terze parti ( che però nn ho idea di come poter usare nel mio prog XD ) ... grazie mille per l'ascolto spero che qualcuno abbia la soluzione anke perchè son giorni che leggo girandoci sempre attorno

5 Risposte

Devi accedere o registrarti per scrivere nel forum
5 risposte