আমি AUGraph
আমার আইওএস অ্যাপে প্লেব্যাক এবং অডিও রেকর্ড করতে অডিও ইউনিটস এপিআই এর সাথে কাজ করছি । এখন আমার একটি বিরল সমস্যা আছে যখন একটিAUGraph
নিম্নলিখিত ত্রুটিটি দিয়ে শুরু করতে অক্ষম থাকে:
ফলাফল = kAUGraphErr_CannotDoInCurrentContext (-10863)
AUGraphStart
অডিও প্লেব্যাকের জন্য সেট আপ করা হয়েছে এমনটি আমরা কল করার চেষ্টা করার সময় ত্রুটিটি অনাকাঙ্ক্ষিত হয়েছিল :
(BOOL)startRendering
{
if (playing) {
return YES;
}
playing = YES;
if (NO == [self setupAudioForGraph:&au_play_graph playout:YES]) {
print_error("Failed to create play AUGraph",0);
playing = NO;
return NO;
}
//result = kAUGraphErr_CannotDoInCurrentContext (-10863)
OSStatus result = AUGraphStart(au_play_graph);
if (noErr != result) {
print_error("AUGraphStart", result);
playing = NO;
}
return playing;
}
এখানে আমরা ডকুমেন্টেশন থেকে কী পাই:
রেন্ডার থ্রেডে স্পিনিং বা অপেক্ষা করা এড়াতে (খারাপ ধারণা!), এউগ্রাফের অনেকগুলি কলই ফিরে আসতে পারে: kAUGraphErr_CannotDoInCurrentContext। এই ফলাফলটি কেবল তখনই উত্পন্ন হয় যখন আপনি তার রেন্ডার কলব্যাক থেকে কোনও AUGraph API কল করেন। এর অর্থ হ'ল যে লকটি প্রয়োজনীয় ছিল সে সময় অন্য থ্রেড দ্বারা ধরে ছিল । আপনি যদি এই ফলাফলের কোডটি দেখতে পান তবে আপনি সাধারণত ক্রিয়াটি আবার চেষ্টা করতে পারেন - সাধারণত নেক্সট রেন্ডার চক্র (যাতে এর মধ্যে লকটি সাফ হয়ে যায়), অথবা আপনি সেই অ্যাপ্লিকেশানের অন্য থ্রেডে ডেলিগেট করতে পারেন। রেন্ডার থ্রেডটি আপনার স্পিন করা উচিত নয় sleep
এই ফলাফলের কোডটি কেবলমাত্র একটি ট্রানজিটরি অবস্থা, যা আপনার অন্যান্য থ্রেডের অউগ্রাফের কল (যেটিতে লক রয়েছে) সম্পূর্ণ হওয়ার সাথে সাথেই তা চলে যাবে।
আমার ক্ষেত্রে, আমি কেবল এটি শুরু করি AUGraph
, এটি নতুন এবং সবেমাত্র তৈরি। আমি কীভাবে মামলাটি ডিবাগ করতে পারি এবং এখানে সম্ভাব্য সমস্যাটি কী হতে পারে?
setupAudioForGraph
? আপনি কি প্রথমে গ্রাফআইনিটায়াল করেছেন?