将AVAudioRecorder.ToUrl()与MonoTouch 4.0.1一起使用将返回null

时间:2011-05-04 04:05:37

标签: c# iphone ios xamarin.ios avaudiorecorder

在过去的两年里,我正在使用下一个代码来启动录音机对象,一切都很好。

ar = AVAudioRecorder.ToUrl(url, settings, out errorRecorder);
ar.MeteringEnabled = false;

然而,本周我升级到:Mono 2.10.2,MonoTouch 4.0.1.10285,MonoDevelop 2.4.2。我还在使用Xcode 3.2.6和iOS SDK 4.3。使用此配置,方法

AVAudioRecorder.ToUrl(url, settings, out errorRecorder)

总是向ar对象返回一个空值。

有人有同样的问题吗?这是完整的代码:

NSError errorRecorder;
NSUrl url;
NSDictionary settings;
AVAudioRecorder ar;
string path, audioFile;

NSObject[] values = new NSObject[]
{
    NSNumber.FromInt32((int)AudioFileType.M4A), 
    NSNumber.FromFloat(11025.0f), 
    NSNumber.FromInt32(1),
    NSNumber.FromInt32((int)AVAudioQuality.Min)
};

NSObject[] keys = new NSObject[]
{
    AVAudioSettings.AVFormatKey,
    AVAudioSettings.AVSampleRateKey,
    AVAudioSettings.AVNumberOfChannelsKey,
    AVAudioSettings.AVEncoderAudioQualityKey
};

settings = NSDictionary.FromObjectsAndKeys (values, keys);

path = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
path = Path.Combine(path, audioDir);
if (!Directory.Exists(path)){
    Directory.CreateDirectory(path);
}

audioFile = newJobEntity.jobid + "_" + numFiles + ".caf";

if (!File.Exists(Path.Combine(path, audioFile)))
    FileStream audioFileStream = File.Create(Path.Combine(path, audioFile));

url = NSUrl.FromFilename(Path.Combine(path, audioFile));

ar = AVAudioRecorder.ToUrl(url, settings, out errorRecorder);
ar.MeteringEnabled = false;

先谢谢。

1 个答案:

答案 0 :(得分:1)

更改发生在设置对象中。如果你阅读苹果文档,它会与示例相符。这应该为你做。

更改:AudioFileType.M4A 收件人:AudioFormatType.M4A

更改:AVAudioSettings.AVFormatKey 收件人:AVAudioSettings.AVFormatIDKey