Skip to content

Instantly share code, notes, and snippets.

@LinusU
Created May 21, 2016 18:05
Show Gist options
  • Select an option

  • Save LinusU/b1bfe4f0c63dd82332c38181686f5976 to your computer and use it in GitHub Desktop.

Select an option

Save LinusU/b1bfe4f0c63dd82332c38181686f5976 to your computer and use it in GitHub Desktop.

Revisions

  1. LinusU created this gist May 21, 2016.
    2 changes: 2 additions & 0 deletions Makefile
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,2 @@
    line-in:
    clang++ darwin.cc -framework AudioToolBox -framework CoreFoundation -o line-in
    52 changes: 52 additions & 0 deletions line-in.cc
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,52 @@
    #include <CoreAudio/CoreAudio.h>
    #include <AudioToolbox/AudioToolbox.h>

    #include <iostream>

    static const int kNumberBuffers = 3;
    static const int kBufferByteSize = 8192;

    void callback (void *userData, AudioQueueRef queue, AudioQueueBufferRef buffer, const AudioTimeStamp *startTime, UInt32 inumberPacketDescriptions, const AudioStreamPacketDescription *packetDescs) {
    OSStatus status;

    std::cout << buffer->mAudioDataBytesCapacity << std::endl;

    status = AudioQueueEnqueueBuffer(queue, buffer, 0, nullptr);
    if (status != 0) exit(5);
    }

    int main() {
    OSStatus status;
    AudioStreamBasicDescription desc;

    desc.mSampleRate = 44100;
    desc.mFormatID = kAudioFormatLinearPCM;
    desc.mFormatFlags = kAudioFormatFlagIsSignedInteger;
    desc.mBytesPerPacket = 0;
    desc.mFramesPerPacket = 1;
    desc.mBytesPerFrame = 0;
    desc.mChannelsPerFrame = 2;
    desc.mBitsPerChannel = 16;
    desc.mReserved = 0;

    AudioQueueRef queue;
    status = AudioQueueNewInput(&desc, callback, nullptr, nullptr, nullptr, 0, &queue);
    if (status != 0) return 1;

    status = AudioQueueStart(queue, nullptr);
    if (status != 0) return 2;

    for (int i = 0; i < kNumberBuffers; ++i) {
    AudioQueueBufferRef buffer;

    status = AudioQueueAllocateBuffer(queue, kBufferByteSize, &buffer);
    if (status != 0) return 3;

    status = AudioQueueEnqueueBuffer(queue, buffer, 0, nullptr);
    if (status != 0) return 4;
    }

    getchar();

    return 0;
    }