• 티스토리 홈
  • 프로필사진
    chantleman
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
chantleman
  • 프로필사진
    chantleman
    • 분류 전체보기 (326)
      • 프로젝트 (1)
      • react (2)
      • 코딩테스트 (133)
        • lv0 (101)
        • lv1 (10)
        • lv2 (7)
        • lv3 (15)
      • 오류 (11)
      • 리눅스 (2)
      • 닷넷 (1)
      • 자바 (67)
        • spring (7)
      • js (38)
      • 오라클 (40)
        • PLSQL (4)
      • cs (7)
      • 도커 aws (3)
      • 단축키 (3)
      • 나만봐 (0)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • Web Audio API — createMediaStreamSource, createScriptProcessor
        2025년 10월 28일
        • chantleman
        • 작성자
        • 2025.10.28.:37

        웹에서 마이크 입력을 받아서 실시간으로 오디오 데이터를 분석하거나 가공하려면
        Web Audio API의 두 가지 기능을 꼭 알아야 합니다.

        바로 👉 createMediaStreamSource() 와 createScriptProcessor() 입니다.

         

         

         

        🎙️ 1. createMediaStreamSource(stream)

        ✅ 역할

        createMediaStreamSource()는
        getUserMedia()로 얻은 MediaStream(마이크 입력) 을 Web Audio API의 AudioNode로 변환해주는 메서드입니다.

         

        즉, 브라우저의 마이크 입력을 Web Audio 파이프라인으로 끌어오는 역할이에요.

         

        💡 예시 코드

        const audioContext = new AudioContext();
        
        navigator.mediaDevices.getUserMedia({ audio: true })
          .then(stream => {
            const source = audioContext.createMediaStreamSource(stream);
            source.connect(audioContext.destination); // 스피커로 바로 출력
          });

         

        이렇게 하면 마이크 소리가 그대로 스피커로 출력됩니다.

         

         

         

        ⚙️ 2. createScriptProcessor(bufferSize, inputChannels, outputChannels)

         

        ✅ 역할

        createScriptProcessor()는 오디오 데이터를 JavaScript 코드로 직접 처리할 수 있게 해주는 노드입니다.

         

         

        ⚠️ 단, 이 메서드는 현재 Deprecated(폐기 예정) 상태입니다.
        최신 방식은 AudioWorklet을 사용하는 것입니다.
        하지만 기존 코드나 예제에서는 여전히 자주 등장합니다.

         

         

        💡 예시 코드

        const audioContext = new AudioContext();
        const processor = audioContext.createScriptProcessor(4096, 1, 1);
        
        processor.onaudioprocess = function(event) {
          const input = event.inputBuffer.getChannelData(0);
          console.log("오디오 데이터:", input);
        };
        
        navigator.mediaDevices.getUserMedia({ audio: true })
          .then(stream => {
            const source = audioContext.createMediaStreamSource(stream);
            source.connect(processor);
            processor.connect(audioContext.destination);
          });

         

        이 코드는 마이크 입력을 받아서 onaudioprocess 이벤트 안에서 실시간 오디오 샘플 데이터(Float32Array) 를 가져옵니다.

         

        이 데이터를 이용하면 다음과 같은 기능을 만들 수 있어요:

        • 실시간 볼륨(음량) 측정
        • 파형 시각화 (Visualizer)
        • 음성 감지 (VAD, Voice Activity Detection)

         

         

         

        🔄 3. 둘의 관계

         
        구성 요소역할

         

        createMediaStreamSource 마이크 입력을 AudioNode로 변환
        createScriptProcessor 오디오 데이터를 JS에서 실시간 처리

         

         

        이 둘을 연결하면 다음과 같은 흐름이 됩니다 👇

         

        [마이크 입력 stream]
                ↓
        createMediaStreamSource()
                ↓
        createScriptProcessor()  ← 오디오 분석 / 가공
                ↓
        destination (스피커 또는 무출력)

         

         

         

         

        🚀 4. AudioWorklet — 최신 대체 기술

         

        createScriptProcessor는 AudioWorklet으로 대체되었습니다.
        AudioWorklet은 더 빠르고 안정적이며, 오디오 프레임을 별도의 스레드에서 처리합니다.

        간단히 구조만 보면 이렇게 됩니다.

        await audioContext.audioWorklet.addModule('processor.js');
        const workletNode = new AudioWorkletNode(audioContext, 'my-processor');

         

        • processor.js 안에 오디오 처리 로직을 작성하고
        • 메인 스레드에서 AudioWorkletNode로 연결하면 됩니다.

         

         

         

        ✨ 한 줄 요약

        🎧 createMediaStreamSource는 마이크 입력을 연결,
        createScriptProcessor는 그 오디오 데이터를 직접 다루는 역할을 한다.
        최신 브라우저에서는 AudioWorklet으로 대체되는 추세다.

         

        728x90

        'js' 카테고리의 다른 글

        녹화 데이터 서버로 보내기  (0) 2025.10.30
        Web Audio API —inputBuffer.getChannelData()  (0) 2025.10.28
        checked가 왜 안 풀려?  (2) 2025.04.23
        apexchart 사용하기  (1) 2025.01.03
        .onload 와 .ready()  (0) 2024.11.24
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바