gpt4 book ai didi

ios - AVAudioRecorder 录制 AAC/m4a

转载 作者:技术小花猫 更新时间:2023-10-29 10:29:39 52 4
gpt4 key购买 nike

我正在尝试使用 AVAudioRecorder 在设备上录制音频。该文件被传输到网络服务器,我想在网络浏览器中播放生成的文件。

我已经尝试了设备上的各种设置组合...似乎无法将文件编码为正确的 AAC 格式。

QuickTime 说它不知道如何播放这个文件。

示例代码

    private void InitializeRecordingSession() {
string fileName = string.Format("{0}.m4a", Guid.NewGuid());
string tmpdir = Environment.GetFolderPath(Environment.SpecialFolder.Personal) + "/audio";
if (!Directory.Exists(tmpdir))
Directory.CreateDirectory(tmpdir);
audioFilePath = Path.Combine(tmpdir, fileName);

Console.WriteLine("Audio File Path: " + audioFilePath);

var url = NSUrl.FromFilename(audioFilePath);
var settings = new AVAudioRecorderSettings() {
AudioFormat = AudioFormatType.MPEG4AAC,
SampleRate = 44100,
NumberChannels = 1,
AudioQuality = AVAudioQuality.High,
};

recorder = AVAudioRecorder.ToUrl(url, settings, out error);

//Set Recorder to Prepare To Record
recorder.PrepareToRecord();
}

编辑-将此代码放在行之前

recorder = AVAudioRecorder.ToUrl(url, settings, out error);

一切正常。

NSError error;    
AVAudioSession audioSession = AVAudioSession.SharedInstance();
audioSession.SetCategory(AVAudioSession.CategoryRecord, out error);
audioSession.SetActive(true, out error);

最佳答案

对于硬件加速编码器,在任何给定时间只能有一个 session 处于事件状态。这意味着,对于 AAC,它将在模拟器(使用软件编码器)中工作,但可能在设备(使用硬件编码器)上失败,除非您的应用激活 AVAudioSession

我还尝试使用 AVAudioRecorder 以 AAC 编码格式录制音频,最好是在 .m4a 文件中。我有一段时间做这件事。我很快就能够在核心音频文件 (.caf) 中获取代码以录制到 AAC,但我无法让 AVAudioRecorder 正确格式化 .m4a。我正要使用较低级别的音频单元 API 重写我的应用程序中的录音代码,但我把它放在次要位置,并添加了代码来处理共享 Audio Session 。设置完成后,我返回并尝试将其另存为 .m4a,但效果很好。

下面是一些示例代码:

NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docsDir = [dirPaths objectAtIndex:0];
NSURL *tmpFileUrl = [NSURL fileURLWithPath:[docsDir stringByAppendingPathComponent:@"tmp.m4a"]];
NSDictionary *recordSettings = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt: kAudioFormatMPEG4AAC], AVFormatIDKey,
[NSNumber numberWithFloat:16000.0], AVSampleRateKey,
[NSNumber numberWithInt: 1], AVNumberOfChannelsKey,
nil];
NSError *error = nil;
AVAudioRecorder *recorder = [[AVAudioRecorder alloc] initWithURL:tmpFileUrl settings:recordSettings error:&error];
[recorder prepareToRecord];

AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryRecord error:nil];
[session setActive:YES error:nil];

[recorder record];

然后结束我使用的录音:

[recorder stop];
AVAudioSession *session = [AVAudioSession sharedInstance];
int flags = AVAudioSessionSetActiveFlags_NotifyOthersOnDeactivation;
[session setActive:NO withFlags:flags error:nil];

然后可以随意使用“tmpFileUrl”中的文件。

关于ios - AVAudioRecorder 录制 AAC/m4a,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12163240/

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