logo

English

이곳의 프로그래밍관련 정보와 소스는 마음대로 활용하셔도 좋습니다. 다만 쓰시기 전에 통보 정도는 해주시는 것이 예의 일것 같습니다. 질문이나 오류 수정은 siseong@gmail.com 으로 주세요. 감사합니다.

Core Audio를 사용하여 macOS에서 Audio를 Capture하는 코드

by digipine posted Apr 19, 2024
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print

아래에서 Core Audio를 사용하여 macOS에서 오디오를 캡처하는 간단한 예제 코드를 제공합니다.

이 예제는 C++로 작성되었고, 입력된 오디오를 터미널에 출력하는 기능을 수행합니다.

macOS에서 실행할 수 있으며, 실행 시 키보드에서 Enter를 누르면 오디오 캡처가 중지됩니다. 이 예제는 단순히 오디오 데이터를 콘솔에 출력하지만, 실제 애플리케이션에서는 데이터를 적절히 처리하고 저장해야 합니다.

 

#include <iostream>
#include <CoreAudio/CoreAudio.h>
#include <CoreFoundation/CoreFoundation.h>

#define BUFFER_SIZE 1024

AudioQueueRef audioQueue;

static void HandleInputBuffer(void *input, AudioQueueRef inAQ, AudioQueueBufferRef inBuffer, const AudioTimeStamp *inStartTime, UInt32 inNumPackets, const AudioStreamPacketDescription *inPacketDesc) {
    // 오디오 데이터 처리 (여기서는 단순히 콘솔에 출력)
    for (int i = 0; i < inNumPackets; ++i) {
        std::cout << ((float *)((char *)inBuffer->mAudioData + (inPacketDesc ? inPacketDesc[i].mStartOffset : 0)))[0] << std::endl;
    }
    
    // 오디오 버퍼 재사용
    AudioQueueEnqueueBuffer(inAQ, inBuffer, 0, nullptr);
}

int main() {
    // 오디오 입력 장치 찾기
    AudioObjectPropertyAddress propertyAddress;
    propertyAddress.mSelector = kAudioHardwarePropertyDefaultInputDevice;
    propertyAddress.mScope = kAudioObjectPropertyScopeGlobal;
    propertyAddress.mElement = kAudioObjectPropertyElementMaster;

    AudioDeviceID deviceId;
    UInt32 size = sizeof(deviceId);
    OSStatus status = AudioObjectGetPropertyData(
        kAudioObjectSystemObject, &propertyAddress, 0, nullptr, &size, &deviceId);
    if (status != noErr) {
        std::cerr << "Failed to get default input device" << std::endl;
        return 1;
    }

    // 오디오 캡처 세션 설정
    AudioStreamBasicDescription audioFormat;
    audioFormat.mSampleRate = 44100.0;
    audioFormat.mFormatID = kAudioFormatLinearPCM;
    audioFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
    audioFormat.mFramesPerPacket = 1;
    audioFormat.mChannelsPerFrame = 1;
    audioFormat.mBitsPerChannel = 16;
    audioFormat.mBytesPerPacket = audioFormat.mBytesPerFrame = (audioFormat.mBitsPerChannel / 8) * audioFormat.mChannelsPerFrame;

    // 오디오 큐 생성
    status = AudioQueueNewInput(&audioFormat, HandleInputBuffer, nullptr, nullptr, kCFRunLoopCommonModes, 0, &audioQueue);
    if (status != noErr) {
        std::cerr << "Failed to create audio queue" << std::endl;
        return 1;
    }

    // 오디오 큐 시작
    status = AudioQueueStart(audioQueue, nullptr);
    if (status != noErr) {
        std::cerr << "Failed to start audio queue" << std::endl;
        return 1;
    }

    // 콘솔에서 키 입력을 기다림
    std::cout << "Press Enter to stop capturing audio..." << std::endl;
    getchar();

    // 오디오 큐 중지 및 해제
    AudioQueueStop(audioQueue, true);
    AudioQueueDispose(audioQueue, true);

    return 0;
}
TAG •

List of Articles
No. Subject Author Date Views
56 [Swift 3] HTTP Request 사용하기, 클래스 소스코드 및 사용법 digipine 2017.11.02 10066
55 OSX - Screen Serial Terminal - OSX에서 시리얼 터미널 사용하기 digipine 2017.11.03 7069
54 [iOS/Objective-C] __weak, __block 사용법 digipine 2021.02.16 5704
53 [Swift 3] TCPIP Socket 통신 클래스 소스 코드 및 사용법 digipine 2017.11.02 4878
52 [Objective-C] NSOperation과 NSOperationQueue를 사용하는 방법 - 설명 및 예제 엉뚱도마뱀 2018.03.14 4363
51 [iOS/macOS] 사설 인증서를 사용한 SSL HTTPS 통신 시 우회처리 digipine 2021.07.06 3269
50 iOS - Objective - C, URL 인코딩과 디코딩 digipine 2017.11.01 2077
49 [macOS] Sandbox 정책 극복기 Accessing Security Scoped Resource 1 file digipine 2017.11.02 2032
48 [Objective C] NSString 앞뒤 공백 문자 및 줄바꿈 문자 제거 digipine 2017.11.02 1770
47 [MacOS, Swift] 스크롤뷰, NSScrollView 사용법 엉뚱도마뱀 2018.11.01 1596
46 [swfit 4] 스위프트 Swift 동시성 동기화 정리 엉뚱도마뱀 2018.09.06 1487
45 OSX 사파리 최신 버전 폰트 변경하기 file digipine 2017.11.03 1303
44 iOS - Objective C 정규식 사용법 2 digipine 2017.11.01 1269
43 iOS - UITextField의 Placeholder Color 색 변경하기 file digipine 2017.11.02 1254
42 [swift 4] 변경 사항 정리 file 엉뚱도마뱀 2018.07.23 1200
41 [iOS, MacOS] Singleton 싱글톤 패턴 사용하기 2 digipine 2017.11.02 1191
40 iOS - Openssl 빌드하기 digipine 2017.11.01 1170
39 MacOS mysql 비밀번호 분실 시 재설정하기 digipine 2017.11.14 1151
38 [iOS, MacOS] NSNotification, NSNotificationCenter 사용법 digipine 2017.11.02 1109
37 iOS - BLE 장치용 ANCS Library for ANCS digipine 2017.11.02 1053
Board Pagination Prev 1 2 3 Next
/ 3