您的位置:首页 > 其它

iPhone/iPad搞定Audio Unit声音 2012/05/15

2012-05-15 12:30 183 查看
1. 处理样本大小由160变成186的问题

搞定!(12:30)

#include
<queue>

using
namespace std;

class AudioBufferHandler {
public:
AudioBufferHandler(int intpuSize,
int outputSize);

void putAudioData(short *data,
int len);

int needMoreData();

void getAudioData(short *data,
int len);

private:

int inputSize, outputSize;
queue<short> audioQueue;
};

#include
"AudioBufferHandler.h"

AudioBufferHandler::AudioBufferHandler(int s1,
int s2):inputSize(s1), outputSize(s2)
{}

void AudioBufferHandler::putAudioData(short *data,
int len) {

for (int i=0; i<len; i++) {
audioQueue.push(data[i]);
}
}

int AudioBufferHandler::needMoreData() {

return audioQueue.size() < outputSize;
}

void AudioBufferHandler::getAudioData(short *data,
int len) {

for (int i=0; i<len; i++) {
data[i] = audioQueue.front();
audioQueue.pop();
}
}

render callback:

// read audio data, at most 3*160=480 samples

for (int i=0; i<3; i++) {

if (audioBufferHandler->needMoreData()) {

memset(buf,
0, AUDIO_DATA_PACKET_SIZE_IN_BYTES);

getAudioData(0, buf, &readCount);
// read audio data from channel 0
audioBufferHandler->putAudioData((short *)buf,
160);
}

if (readCount ==
0) {
return
noErr;
// if no audio data, do nothing.
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: