gpt4 book ai didi

ios - EZAudio 自定义 AudioStreamBasicDescription 没有按我的预期工作

转载 作者:行者123 更新时间:2023-12-01 16:44:16 26 4
gpt4 key购买 nike

EZAudio我想尽可能创建单光音频缓冲区列表。在过去,我每个 audioBuffer 达到 46 个字节,但 bufferDuration 相对较小。首先,如果我使用下面的 AudioStreamBasicDescription 进行输入和输出

AudioStreamBasicDescription audioFormat;
audioFormat.mBitsPerChannel = 8 * sizeof(AudioUnitSampleType);
audioFormat.mBytesPerFrame = sizeof(AudioUnitSampleType);
audioFormat.mBytesPerPacket = sizeof(AudioUnitSampleType);
audioFormat.mChannelsPerFrame = 2;
audioFormat.mFormatFlags = kAudioFormatFlagsCanonical | kAudioFormatFlagIsNonInterleaved;
audioFormat.mFormatID = kAudioFormatLinearPCM;
audioFormat.mFramesPerPacket = 1;
audioFormat.mSampleRate = 44100;

并使用 TPCircularBuffer 作为传输器,然后我在 bufferList 中得到两个缓冲区,mDataByteSize 4096 肯定太多了。所以我尝试使用我以前的 ASBD
audioFormat.mSampleRate         = 8000.00;
audioFormat.mFormatID = kAudioFormatLinearPCM;
audioFormat.mFormatFlags = kAudioFormatFlagsCanonical | kAudioFormatFlagIsNonInterleaved;
audioFormat.mFramesPerPacket = 1;
audioFormat.mChannelsPerFrame = 1;
audioFormat.mBitsPerChannel = 8;
audioFormat.mBytesPerPacket = 1;
audioFormat.mBytesPerFrame = 1;

现在 mDataByteSize 为 128,我只有一个缓冲区,但 TPCircularBuffer 无法正确处理。我认为这是因为我只想使用一个 channel 。所以 atm 我拒绝了 TBCB 并尝试将字节编码和解码为 NSData 或只是为了测试直接通过 AudioBufferList 但即使对于第一个 AudioStreamBasicDescription 声音也太失真了。

我当前的代码
-(void)initMicrophone{

AudioStreamBasicDescription audioFormat;
//*
audioFormat.mBitsPerChannel = 8 * sizeof(AudioUnitSampleType);
audioFormat.mBytesPerFrame = sizeof(AudioUnitSampleType);
audioFormat.mBytesPerPacket = sizeof(AudioUnitSampleType);
audioFormat.mChannelsPerFrame = 2;
audioFormat.mFormatFlags = kAudioFormatFlagsCanonical | kAudioFormatFlagIsNonInterleaved;
audioFormat.mFormatID = kAudioFormatLinearPCM;
audioFormat.mFramesPerPacket = 1;
audioFormat.mSampleRate = 44100;

/*/
audioFormat.mSampleRate = 8000.00;
audioFormat.mFormatID = kAudioFormatLinearPCM;
audioFormat.mFormatFlags = kAudioFormatFlagsCanonical | kAudioFormatFlagIsNonInterleaved;
audioFormat.mFramesPerPacket = 1;
audioFormat.mChannelsPerFrame = 1;
audioFormat.mBitsPerChannel = 8;
audioFormat.mBytesPerPacket = 1;
audioFormat.mBytesPerFrame = 1;

//*/


_microphone = [EZMicrophone microphoneWithDelegate:self withAudioStreamBasicDescription:audioFormat];

_output = [EZOutput outputWithDataSource:self withAudioStreamBasicDescription:audioFormat];
[EZAudio circularBuffer:&_cBuffer withSize:128];
}

-(void)startSending{
[_microphone startFetchingAudio];
[_output startPlayback];
}

-(void)stopSending{
[_microphone stopFetchingAudio];
[_output stopPlayback];
}

-(void)microphone:(EZMicrophone *)microphone
hasAudioReceived:(float **)buffer
withBufferSize:(UInt32)bufferSize
withNumberOfChannels:(UInt32)numberOfChannels{
dispatch_async(dispatch_get_main_queue(), ^{
});
}

-(void)microphone:(EZMicrophone *)microphone
hasBufferList:(AudioBufferList *)bufferList
withBufferSize:(UInt32)bufferSize
withNumberOfChannels:(UInt32)numberOfChannels{
//*
abufferlist = bufferList;
/*/
audioBufferData = [NSData dataWithBytes:bufferList->mBuffers[0].mData length:bufferList->mBuffers[0].mDataByteSize];
//*/
dispatch_async(dispatch_get_main_queue(), ^{
});
}
-(AudioBufferList*)output:(EZOutput *)output needsBufferListWithFrames:(UInt32)frames withBufferSize:(UInt32 *)bufferSize{
//*
return abufferlist;
/*/
// int bSize = 128;
// AudioBuffer audioBuffer;
// audioBuffer.mNumberChannels = 1;
// audioBuffer.mDataByteSize = bSize;
// audioBuffer.mData = malloc(bSize);
//// [audioBufferData getBytes:audioBuffer.mData length:bSize];
// memcpy(audioBuffer.mData, [audioBufferData bytes], bSize);
//
//
// AudioBufferList *bufferList = [EZAudio audioBufferList];
// bufferList->mNumberBuffers = 1;
// bufferList->mBuffers[0] = audioBuffer;
//
// return bufferList;
//*/


}

我知道 bSize 的值在输出中:needsBufferListWithFrames:withBufferSize: 可能已更改。

我的主要目标是尽可能多地创建单声道声音,将其编码为 nsdata 并将其解码为输出。你能告诉我我做错了什么吗?

最佳答案

我有同样的问题,移动到 AVAudioRecorder 并设置我需要的参数我保留 EZAudio(EZMicrophone)用于音频可视化这里是实现此目的的链接:

iOS: Audio Recording File Format

关于ios - EZAudio 自定义 AudioStreamBasicDescription 没有按我的预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21404617/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com