【发布时间】:2024-01-24 00:50:01
【问题描述】:
我一直在尝试将录制的音频发送到如下所示的控制器方法:
JS
$scope.convertBlobToArrayBuffer = function (audioBlob) {
var fileReader = new FileReader();
fileReader.onload = function() {
$scope.saveRecordingToServer( this.result );
};
fileReader.readAsArrayBuffer(audioBlob);
}
$scope.saveRecordingToServer = function (audioArrayBuffer) {
var bytes = new Uint8Array(audioArrayBuffer);
$http({
method: 'POST',
url: '/upload',
data: { data: bytes }
}).then(function (data) {
console.log(data);
}, function (error) {
console.log('Call failed with error: ', error);
}
);
}
Java:
@PostMapping("/upload")
@ResponseBody
public void upload(@RequestBody byte[] bytearray) throws UnsupportedAudioFileException {
String fileName ="test"+new Date().getTime()+".wav";
String filePath = rootLocation + fileName;
try {
InputStream b_in = new ByteArrayInputStream(bytearray);
AudioFormat format = new AudioFormat(48000, 16, 1, true, false);
AudioInputStream stream = new AudioInputStream(b_in, format,
bytearray.length);
File file = new File(filePath);
AudioSystem.write(stream,javax.sound.sampled.AudioFileFormat.Type.WAVE, file);
System.out.println("File saved: " + file.getName() + ", bytes: "
+ bytearray.length);
} catch (IOException ex) {
System.err.println(ex);
}
}
最初我尝试发送 arraybuffer,结果是一个空白的 wav 文件。 然后我将其更改为 Uint8Array。有了这个,我得到了一个带有一些噪音的 wav 文件。此外,我的录音是大约 10 秒的音频,而 wav 文件的长度超过 2 分钟。
【问题讨论】:
标签: javascript java audio-recording