여러 소리를 동시에 나오게 하려다보니 pygame.mixer.Sound() 를 사용해야하고 , 다시 그 소리들을 하나의 파일로 저장해야할 때.
오디오 출력을 캡처하여 파일로 저장해야한다고 함.
오디오 출력을 캡처하기위한 sou
nddevice와 numpy를 활용해서 시스템 오디오 출력을 녹음해보자.
필요한 라이브러리
pip install sounddevice numpy scipy pygame
예제코드 (단일채널을 사용하는 경우)
import pygame
import sounddevice as sd
import numpy as np
import scipy.io.wavfile as wav
import threading
import time
# 녹음 설정
SAMPLE_RATE = 44100 # 표준 샘플링 레이트 (CD 품질)
CHANNELS = 2 # 스테레오 녹음
DURATION = 10 # 녹음할 시간 (초)
OUTPUT_FILE = "output.wav" # 저장할 파일 이름
# 🔹 pygame 초기화
pygame.mixer.init()
def play_audio():
"""pygame에서 오디오 재생"""
pygame.mixer.music.load("example.mp3") # 원하는 파일 경로
pygame.mixer.music.play()
print("🎵 오디오 재생 시작...")
# 녹음 시간이 끝날 때까지 대기
time.sleep(DURATION)
pygame.mixer.music.stop()
print("🎵 오디오 재생 종료")
def record_audio():
"""출력 오디오(스피커) 녹음"""
print("🎙️ 녹음 시작...")
recording = sd.rec(int(DURATION * SAMPLE_RATE), samplerate=SAMPLE_RATE, channels=CHANNELS, dtype="int16")
sd.wait() # 녹음이 끝날 때까지 대기
wav.write(OUTPUT_FILE, SAMPLE_RATE, recording)
print(f"✅ 녹음 완료! 파일 저장됨: {OUTPUT_FILE}")
# 🎵 오디오 재생 & 녹음 동시 실행 (스레드 사용)
play_thread = threading.Thread(target=play_audio)
record_thread = threading.Thread(target=record_audio)
play_thread.start()
record_thread.start()
play_thread.join()
record_thread.join()
예제코드 2 (여러개 채널을 사용하는 경우)
import pygame
import sounddevice as sd
import numpy as np
import scipy.io.wavfile as wav
import threading
import time
# 녹음 설정
SAMPLE_RATE = 44100
CHANNELS = 2
DURATION = 10
OUTPUT_FILE = "all_channels_output.wav"
pygame.mixer.init()
def play_multiple_sounds():
"""여러 개의 pygame.mixer.Sound를 동시에 재생"""
sound1 = pygame.mixer.Sound("sound1.wav")
sound2 = pygame.mixer.Sound("sound2.wav")
sound1.play()
sound2.play()
print("🎵 여러 사운드 재생 중...")
time.sleep(DURATION) # 재생 시간 동안 대기
pygame.mixer.stop()
print("🎵 모든 사운드 종료!")
def record_audio():
"""출력 오디오 녹음"""
print("🎙️ 녹음 시작...")
recording = sd.rec(int(DURATION * SAMPLE_RATE), samplerate=SAMPLE_RATE, channels=CHANNELS, dtype="int16")
sd.wait()
wav.write(OUTPUT_FILE, SAMPLE_RATE, recording)
print(f"✅ 녹음 완료! 저장됨: {OUTPUT_FILE}")
# 🎵 오디오 재생 & 녹음 동시 실행
play_thread = threading.Thread(target=play_multiple_sounds)
record_thread = threading.Thread(target=record_audio)
play_thread.start()
record_thread.start()
play_thread.join()
record_thread.join()
예제를 적고보니 sd.rec()가 전체 사운드를 녹음한다는 점은 다른게 없네 ㅋ.. 단순해서 굿.
728x90
'개발로그 > Python' 카테고리의 다른 글
random.choice()와 random.shuffle()은 비슷해 보이지만 목적이 완전히 다르다 (0) | 2025.03.15 |
---|---|
Preload + On-demand + Fallback 구조 (캐싱전략에 관하여, 용어설명) 메모 (0) | 2025.03.12 |
python - API 연동할 때, 인증코드를 모듈마다 넣는 이유..가 있었다.. 무식해서 그런게 아니라규..ㅠ (0) | 2025.03.11 |
구글드라이브에서 API로 파일 탐색을 할 때, 어떻게 하는게 더 효율적일까? feat ChatGPT (0) | 2025.03.11 |
threading.Event() 객체의 활용 예제 및 백그라운드 실행 정리 (0) | 2025.03.09 |
FFmpeg 다운로드 및 설치 (0) | 2025.03.08 |
Google Drive에 있는 파일을 다운로드하는 세가지 방법 (0) | 2025.03.07 |
Vscode or Jupyter notebook conda 환경에서 실행되도록 설정하기 (0) | 2025.03.06 |
댓글