Hi,
I'm new to MacOS programming, but have considerable background in different UNIX systems. I'm trying to port my project,
DarkIce to MacOS. For this, I need to be able to simply record audio from an audio device. More precisely:
- open the audio device
- configure for appropriate parameters (e.g. 44.1kHz, 16 bit, 2 channel, PCM recording)
- read from the device
- close the device
for example, on Solaris / OpenBSD / NetBSD, the following code achieves just this:
CODE
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <errno.h>
#include <sys/audioio.h>
#define FILE_NAME "/dev/audio"
#define SAMPLE_RATE 22050
#define CHANNEL 2
#define BITS_PER_SAMPLE 16
#define BUF_SIZE 4
int main(int argc, char **argv) {
int fd;
audio_info_t audioInfo;
unsigned char buf[BUF_SIZE];
unsigned int len = BUF_SIZE;
ssize_t ret;
fd = open( FILE_NAME, O_RDONLY);
AUDIO_INITINFO( &audioInfo);
audioInfo.record.sample_rate = SAMPLE_RATE;
audioInfo.record.channels = CHANNEL;
audioInfo.record.precision = BITS_PER_SAMPLE;
audioInfo.record.encoding = AUDIO_ENCODING_LINEAR;
if ( ioctl(fd, AUDIO_SETINFO, &audioInfo) ) {
printf("can't set audio info, error: %d\n", errno);
}
ret = read(fd, buf, len);
printf("%d returned by read\n", ret);
if ( ret == -1 ) {
printf("error code %d\n", errno);
}
close(fd);
return 0;
}
What I hear is that MacOS uses a callback pattern to access audio data from the sound card. if so, probably I'm looking for a sample that does:
- initialize the whole thing
- set the audio parameters (e.g. 44.1kHz 16 bit stereo PCM recording)
- register my callback function
- shut down
Can anyone help me?