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.
}
}
搞定!(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.
}
}
相关文章推荐
- iphone/iPad 搞定Audio Unit 2012/05/13
- iPhone/iPad Audio Unit声音播放
- iPhone/iPad 2012/05/14 take care of Audio Unit
- iPhone/iPad Audio Unit 2012/05/19
- UC故事与iPhone/iPad Audio Unit 2012/05/16
- UC故事+iPhone/iPad Audio Unit 2012/05/17
- iPhone/iPad开发札记2012/03/11 -2 Audio Unit
- iPhone/iPad 2012/05/12 搞定Audio Unit
- IPhone开发 用子类搞定不同的设备(iphone和ipad)
- AudioServicesPlaySystemSound 系统声音提示 iOS iPad
- AudioServicesPlaySystemSound 系统声音提示 iOS iPad
- AudioServicesPlaySystemSound 系统声音提示 iOS iPad
- iPhone/iPad Unit Test in xcode 4.3
- iPhone/iPad开发扎记 2012/02/11 - 玩转iOS Audio Service
- iPhone/iPad声音问题
- AudioServicesPlaySystemSound 系统声音提示 iOS iPad
- iOS开发 ( iPhone/iPad):利用ffmpeg 实现音频解码、声音播放
- AudioServicesPlaySystemSound 系统声音提示 iOS iPad
- ipad、iphone上播放电影没声音的解决方法
- 处理iPhone 6s plus/iPad 横屏启动App界面布局错乱问题