我正在使用vpio音频单元在mac os x上进行捕捉和播放。
在我在vpio设备上设置输入/输出格式之前,一切顺利。
我想要的格式如下:
AudioStreamBasicDescription audio_format ;
audio_format.mSampleRate = 8000.0 ;
audio_format.mBitsPerChannel = 16 ;
audio_format.mChannelsPerFrame = 1 ;
audio_format.mBytesPerFrame = (audio_format.mBitsPerChannel >> 3) * audio_format.mChannelsPerFrame ;
audio_format.mFramesPerPacket = 1 ;
audio_format.mBytesPerPacket = audio_format.mBytesPerFrame * audio_format.mFramesPerPacket ;
audio_format.mFormatID = kAudioFormatLlinearPCM ;
audio_format.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked ;
我可以在vpio(输入总线/输出范围)上设置这种格式,但我不能在vpio上设置它(输出总线/输入范围)
我将得到错误代码(kAudioUnitErr_FormatNotSupported
)。
但是当我使用AUHAL unit
时,我可以设置两种格式
在AUHAL(输入总线/输出范围)和AUHAL(输出总线/输入范围)上。
我想知道这两个单位之间的区别是什么?
经过一些尝试,我终于在vpio(输出总线/输入范围)上找到了一种可用的格式,就像这样:
AudioStreamBasicDescription audio_format ;
audio_format.mSampleRate = 8000.0 ;
audio_format.mBitsPerChannel = 32 ;
audio_format.mChannelsPerFrame = 1 ;
audio_format.mBytesPerFrame = (audio_format.mBitsPerChannel >> 3) * audio_format.mChannelsPerFrame ;
audio_format.mFramesPerPacket = 1 ;
audio_format.mBytesPerPacket = audio_format.mBytesPerFrame * audio_format.mFramesPerPacket ;
audio_format.mFormatID = kAudioFormatLlinearPCM ;
audio_format.mFormatFlags = kLinearPCMFormatFlagIsFloat | kLinearPCMFormatFlagIsPacked ;
但令我困惑的是,vpio(输入总线/输出范围)和(输出总线/输入范围)上的格式不匹配。我想知道如何获得the available formats information of the vpio unit
?我找不到关于Apple网站上可用格式的任何文件。
有人可以回答我的问题吗?
谢谢&方面。
答案 0 :(得分:1)
我刚刚找到了一位更智能的工程师来完成这个VoiceProcessing Audio Unit:
How to use "kAudioUnitSubType_VoiceProcessingIO" subtype of core audio API in mac os?
简短的回答是:设置格式BEFOR初始化单位。多么直观!
答案 1 :(得分:0)
我和你有同样的问题。当我尝试将音频格式设置为语音处理音频单元时,出现错误-10865,这意味着音频格式属性不可写。
如果我理解正确,您无法在此音频单元上设置任何格式。如果您需要8000 Hz采样率的音频,则需要对其进行重新采样。
可以做到
祝你好运。
答案 2 :(得分:-1)
我使用以下设置来获得用于在我的项目中录制语音的最佳文件大小和音质。
// Setup audio session
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
// Define the recorder setting
NSMutableDictionary *recordSetting = [[NSMutableDictionary alloc] init];
[recordSetting setValue:[NSNumber numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey];
[recordSetting setValue:[NSNumber numberWithFloat:8000.0] forKey:AVSampleRateKey];
[recordSetting setValue:[NSNumber numberWithInt: 1] forKey:AVNumberOfChannelsKey];
[recordSetting setValue:[NSNumber numberWithInt:AVAudioQualityLow] forKey:AVEncoderAudioQualityKey];
// Initiate and prepare the recorder
recorder = [[AVAudioRecorder alloc] initWithURL:outputFileURL settings:recordSetting error:NULL];
recorder.delegate = self;
recorder.meteringEnabled = YES;
[recorder prepareToRecord];