1. Audio Unit into conference project.
* compile error
Expected ')' before '&' token
in file ConferenceInterface.h
/**
*加会方法
* param:加会的配置参数,和ini中的值一致
*/
int joinConf(ConfigParam& param);
GOT IT ! 仍然是因为对C/C++代码需要使用*.mm !
* setupMonoStreamFormat
// Fill the application audio format struct's fields to define a linear PCM,
// stereo, noninterleaved stream at the hardware sample rate.
monoStreamFormat.mFormatID = AUDIO_FORMAT;
monoStreamFormat.mFormatFlags =kAudioFormatFlagsAudioUnitCanonical;
monoStreamFormat.mBytesPerPacket = bytesPerSample;
monoStreamFormat.mFramesPerPacket =1;
monoStreamFormat.mBytesPerFrame = bytesPerSample;
monoStreamFormat.mChannelsPerFrame = 1; // 1 indicates mono
monoStreamFormat.mBitsPerChannel =16;
monoStreamFormat.mSampleRate = SAMPLE_RATE;
* input render callback
if (inBusNumber ==0) {
returnnoErr; // if is stereo bus, no play.
}
// read data audio data from audio engine, here it is 160*6=960 bytes
unsignedint readCount;
unsignedchar buf[AUDIO_DATA_PACKET_SIZE_IN_BYTES*6]; // 160 bytes
int BUF_NUM =1;
unsignedchar *ptr = buf;
for (int i=0; i<BUF_NUM; i++) {
// read 160 bytes of audio data
for (;;){
getAudioData(0, ptr, &readCount);
if (readCount !=0) {
break;
}
}
ptr+=160;
}
// put audio data into audio unit buffer
unsignedchar *outSamplesChannelLeft = (unsignedchar*) ioData->mBuffers[0].mData; // todo: this conversion might have issues.
memcpy(outSamplesChannelLeft, buf, BUF_NUM*160);
Q: AudioSampleType与unsigned char *之间的类型转换与memcpy是否会有什么问题?
* 3:00 PM,总结一下播放的状态
大约12ms callback被呼叫一次,每次要求512 frame数据
^ 与播放的audio data参数有对应关系吗? 2012/03/15
^ 512 frames可能是指缓冲区最大长度,不代表一定要这么多。可能没有填充的部分iOS就忽略了。2012/03/15
如果每次只读160B,并发给audio unit,
声音不对
但声音的时长是对的,并且似乎随不同的声音,出来的声音会有变化
可能要修改的地方
ASDB
AudioSampleType与unsigned char *之间的变化
Q: 是否应该将一个音频的sample(16b)转换成Audio Sample Type(UInt32)后再交给Audio Buffer ? 2012/03/15
callback要的数据大小与读取的大小之间的关系