728x90
raw pcm data format 음원이란?
header가 없이 raw data만 저장한 파일입니다.
따라서 pcm 포맷으로 저장된 오디오는 별도로 오디오에 대한 정보( sampling rate, bit size, endian, channels )를 가지고 있지 않으면 제대로 play할 수 없습니다.
저는 sampling rate, bit size, endian, channels 을
16kHz Sampling rate, 16 bit short-int, little-endian, mono 로 설정했지만
변수값을 바꾸면 다른 값으로도 변경 가능합니다!
실행결과입니다.
음원을 생성한 뒤 ETRI 서버에게 STT를 요청해서, 생성한 음원을 텍스트로 출력해봤습니다.
위의 영상에서 만든 음원입니다!
STT 예제는 아래의 링크를 들어가시면 됩니다.
2023.05.22 - [Nodejs] - [Node.js] ETRI OpenAPI의 음성인식 api 사용해보기 (STT)
전체 코드입니다!
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<!-- // RecordRTC 라이브러리 로드
// import RecordRTC from 'recordrtc'; -->
<script src="https://www.WebRTC-Experiment.com/RecordRTC.js"></script>
<script>
let audioRecorder;
function start(){
// getUserMedia로 오디오 스트림(나의 음성) 가져오기
navigator.mediaDevices.getUserMedia({ audio: true })
.then(function (stream) {
// 오디오 스트림을 녹음하기 위한 RecordRTC 객체 생성
audioRecorder = RecordRTC(stream, {
type: 'audio',
mimeType: 'audio/raw',
recorderType: StereoAudioRecorder,
// mono
numberOfAudioChannels: 1,
desiredSampRate: 16000,
bufferSize: 16384,
});
// 녹음 시작
audioRecorder.startRecording();
})
.catch(function (error) {
console.error('getUserMedia error:', error);
});
}
function recordStop(){
console.log("stop")
// 녹음 중지
audioRecorder.stopRecording(function() {
console.log("stopRecording")
// 녹음된 오디오 데이터를 Blob 객체로 가져오기
let audioBlob = audioRecorder.getBlob();
const url = window.URL.createObjectURL(audioBlob);
const a = document.createElement('a');
a.href = url;
a.download = 'example';
// 파일 다운로드
a.click();
setTimeout(() => {
window.URL.revokeObjectURL(url);
}, 100);
});
}
</script>
<button onclick="start()">시작</button>
<button onclick="recordStop()">중지</button>
</body>
</html>
'JavaScript' 카테고리의 다른 글
[javascript] keyup 사용하여 테이블 검색 기능 만들기 (0) | 2023.06.09 |
---|---|
[Javascript] BroadcastChannel 를 사용해서 탭 간 메세지 주고받기 (0) | 2023.06.07 |
[Javascript] 자바스크립트를 활용해서 get/post로 데이터 전달하기 (0) | 2023.05.25 |
[JavaScript] 정규식을 활용하여 이메일 로그인 시 예외처리하기 (0) | 2023.05.08 |
[JavaScript] 내 화면 녹화 및 다운로드하기 (0) | 2023.05.04 |