[TypeScript] 내 목소리 재생
14774 단어 typescriptwebaudioapi
소개
이번에는 Web Audio API로 나만의 목소리를 재생합니다.
환경
기본 사용법
오디오 데이터를 제어하려면 먼저 "AudioContext"를 만듭니다.
오디오 설정 및 볼륨 업/다운 등의 각 작업을 "AudioNode"로 표현합니다.
입력에서 출력까지 모든 "AudioNode"를 연결합니다.
마이크 사용
이번에는 마이크를 사용합니다.
이를 위해 "getUserMedia"로 장치를 가져옵니다.
main.page.ts
export async function init(): Promise<void> {
// Get audio(microphone)
const medias = await navigator.mediaDevices.getUserMedia({
video: false,
audio: true,
});
const audioContext = new AudioContext();
const audioSourceNode = audioContext.createMediaStreamSource(medias);
// By default, use speaker of the computer as output
audioSourceNode
.connect(audioContext.destination);
}
효과 추가
효과를 연결할 수 있습니다.
main.page.ts
export async function init(): Promise<void> {
...
audioContext = new AudioContext();
const audioSourceNode = audioContext.createMediaStreamSource(medias);
// volume up
const gain = audioContext.createGain();
gain.gain.value = 2.0;
// delay the sound
const delay = new DelayNode(audioContext);
delay.delayTime.value = 1;
// output only right channel
const panner = new StereoPannerNode(audioContext, { pan: 1 });
audioSourceNode
.connect(gain)
.connect(delay)
.connect(panner)
.connect(audioContext.destination);
}
얻다
지연
패너
효과 값 업데이트
연결 후 효과 값을 업데이트할 수 있습니다.
다음에는 더 많은 효과를 보도록 하겠습니다.
채널 분할 및 병합
분할 채널
"createChannelSplitter"로 채널을 좌우로 분할할 수 있습니다.
main.page.ts
export async function init(): Promise<void> {
...
// volume up
const gain = audioContext.createGain();
gain.gain.value = 2.0;
// delay the sound
const delay = new DelayNode(audioContext);
delay.delayTime.value = 1;
// output only right channel
const panner = new StereoPannerNode(audioContext, { pan: 1});
const splitter = audioContext.createChannelSplitter(2);
audioSourceNode.connect(splitter);
splitter.connect(gain, 1);
splitter.connect(delay, 1);
// No any effects...
splitter.connect(panner, 1);
splitter.connect(audioContext.destination);
}
오디오 소스가 "ChannelSplitterNode"에 의해 모노가 되었기 때문에 다시 패닝할 수 없습니다.
따라서 샘플 코드의 "StereoPannerNode"가 작동하지 않습니다.
소스 병합
분할 후 "ChannelMergerNode"로 병합할 수 있습니다.
main.page.ts
export async function init(): Promise<void> {
...
// volume up
const gain = audioContext.createGain();
gain.gain.value = 2.0;
// delay the sound
const delay = new DelayNode(audioContext);
delay.delayTime.value = 0.1;
const splitter = audioContext.createChannelSplitter(2);
audioSourceNode.connect(splitter);
splitter.connect(gain, 1);
splitter.connect(delay, 1);
const merger = audioContext.createChannelMerger(2);
gain.connect(merger, 0, 1);
delay.connect(merger, 0, 1);
splitter.connect(merger, 1, 0);
merger.connect(audioContext.destination);
}
자원
Reference
이 문제에 관하여([TypeScript] 내 목소리 재생), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/masanori_msl/typescript-play-my-own-voice-58i4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)