Add AudioRecorder
This commit is contained in:
		
							
								
								
									
										68
									
								
								src/main/java/envoy/client/data/AudioRecorder.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								src/main/java/envoy/client/data/AudioRecorder.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,68 @@ | ||||
| package envoy.client.data; | ||||
|  | ||||
| import java.io.IOException; | ||||
| import java.nio.file.Files; | ||||
| import java.nio.file.Path; | ||||
|  | ||||
| import javax.sound.sampled.*; | ||||
|  | ||||
| import envoy.exception.EnvoyException; | ||||
|  | ||||
| /** | ||||
|  * Records audio and exports it as a byte array. | ||||
|  * <p> | ||||
|  * Project: <strong>envoy-client</strong><br> | ||||
|  * File: <strong>AudioRecorder.java</strong><br> | ||||
|  * Created: <strong>02.07.2020</strong><br> | ||||
|  * | ||||
|  * @author Kai S. K. Engelbart | ||||
|  * @since Envoy Client v0.1-beta | ||||
|  */ | ||||
| public final class AudioRecorder { | ||||
|  | ||||
| 	private final AudioFormat format; | ||||
|  | ||||
| 	private DataLine.Info	info; | ||||
| 	private TargetDataLine	line; | ||||
| 	private Path			tempFile; | ||||
|  | ||||
| 	public AudioRecorder() { this(new AudioFormat(16000, 16, 1, true, false)); } | ||||
|  | ||||
| 	public AudioRecorder(AudioFormat format) { | ||||
| 		this.format	= format; | ||||
| 		info		= new DataLine.Info(TargetDataLine.class, format); | ||||
| 	} | ||||
|  | ||||
| 	public boolean isSupported() { return AudioSystem.isLineSupported(info); } | ||||
|  | ||||
| 	public void start() throws EnvoyException { | ||||
| 		try { | ||||
|  | ||||
| 			// Open the line | ||||
| 			line = (TargetDataLine) AudioSystem.getLine(info); | ||||
| 			line.open(format); | ||||
| 			line.start(); | ||||
|  | ||||
| 			// Prepare temp file | ||||
| 			tempFile = Files.createTempFile("recording", "wav"); | ||||
|  | ||||
| 			// Start the recording | ||||
| 			var ais = new AudioInputStream(line); | ||||
| 			AudioSystem.write(ais, AudioFileFormat.Type.WAVE, tempFile.toFile()); | ||||
| 		} catch (IOException | LineUnavailableException e) { | ||||
| 			throw new EnvoyException("Cannot record voice", e); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	public byte[] finish() throws EnvoyException { | ||||
| 		try { | ||||
| 			line.stop(); | ||||
| 			line.close(); | ||||
| 			byte[] data = Files.readAllBytes(tempFile); | ||||
| 			Files.delete(tempFile); | ||||
| 			return data; | ||||
| 		} catch (IOException e) { | ||||
| 			throw new EnvoyException("Cannot save voice recording", e); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user