UInt16 processGain(AudioBuffer buffer,
float gain)
{
SInt16 *input = (SInt16 *)buffer.mData;
UInt64 avg = 0;
for(int i = 0; i < buffer.mDataByteSize; i++){
avg += abs(input[i]); // 音量増幅前の累計
SInt32 gained = input[i] * gain;
if (gained > kMaxSInt16) {
gained = kMaxSInt16;
}
else if (gained < kMinSInt16) {
gained = kMinSInt16;
}
input[i] = gained;
}
avg /= buffer.mDataByteSize;
return (UInt16)avg;
}
- (AudioBuffer)normalize:(AudioBuffer)buffer {
UInt16 avg = 0;
if (self.isBoost) {
avg = processGain(buffer, gain);
if (avg > 0) {
gain = (float)kMaxSInt16 / avg;
if (gain > kMaxGain) {
gain = kMaxGain;
}
NSLog(@"gain:%f", gain);
}
}
return buffer;
}
UInt16 processGain(AudioBuffer buffer)
{
SInt16 *input = (SInt16 *)buffer.mData;
UInt64 avg = 0;
for(int i = 0; i < buffer.mDataByteSize; i++){
avg += abs(input[i]); // 音量増幅前の累計
}
avg /= buffer.mDataByteSize;
float gain = 1.0;
if (avg > 0) {
gain = (float)kMaxSInt16 / avg;
if (gain > kMaxGain) {
gain = kMaxGain;
}
NSLog(@"gain:%f", gain);
}
for(int i = 0; i < buffer.mDataByteSize; i++){
avg += abs(input[i]); // 音量増幅前の累計
SInt32 gained = input[i] * gain;
if (gained > kMaxSInt16) {
gained = kMaxSInt16;
}
else if (gained < kMinSInt16) {
gained = kMinSInt16;
}
input[i] = gained;
}
return (UInt16)avg;
}
- (NSData *)normalize:(NSData *)data length:(NSUInteger)length {
SInt16 *input = (SInt16 *)data.bytes;
UInt64 avg = 0;
for(int i = 0; i < length; i++){
avg += abs(input[i]); // 音量増幅前の累計
}
avg /= length;
float gain = 1.0;
if (avg > 0) {
gain = (float)kMaxSInt16 / avg;
if (gain > kMaxGain) {
gain = kMaxGain;
}
// NSLog(@"gain:%f", gain);
}
for (int i = 0; i < length; i++) {
avg += abs(input[i]); // 音量増幅前の累計
SInt32 gained = input[i] * gain;
if (gained > kMaxSInt16) {
gained = kMaxSInt16;
}
else if (gained < kMinSInt16) {
gained = kMinSInt16;
}
input[i] = gained;
}
return [NSData dataWithBytes:input length:length];
}