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();
}
}
// 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.
}
}