গাড়ী অডিও প্লাগইন সেবা

Android 14-এ নতুন গাড়ির OEM প্লাগইন পরিষেবাগুলি কিছু গাড়ির উপাদান কনফিগার করতে সক্ষম করে। অডিওর জন্য বিশেষভাবে, তিনটি নতুন প্লাগইন পরিষেবা চালু করা হয়েছে, যা AAOS ডিভাইসে নমনীয়ভাবে অডিও পরিচালনা কনফিগার করতে OEM-কে সক্ষম করে:

  • অডিও ফোকাস নিয়ন্ত্রণ
  • অডিও ভলিউম এবং নিঃশব্দ নিয়ন্ত্রণ
  • অডিও হাঁস নিয়ন্ত্রণ

কার প্লাগইন সার্ভিস আর্কিটেকচার

নীচের চিত্রটি গাড়ি পরিষেবাগুলির একটি ওভারভিউ এবং OEM গাড়ি পরিষেবার সাথে তাদের সম্পর্ক প্রদান করে৷ অ্যাপ প্রক্রিয়া এবং গাড়ি পরিষেবা প্রক্রিয়ার মতো, OEM গাড়ি পরিষেবা প্রক্রিয়া তার নিজস্ব প্রক্রিয়া স্থান দখল করে।

ইমেজ

গাড়ি পরিষেবা config_oemCarService এ সংজ্ঞায়িত উপাদান খুঁজে বের করে OEM গাড়ি পরিষেবা শুরু করে। কনফিগারেশন খালি থাকলে, OEM পরিষেবা বিদ্যমান থাকে না এবং কোনও পরিষেবা শুরু হয় না। উপাদানটি অবশ্যই OemCarService প্রসারিত করবে। গাড়ির অডিও পরিষেবাটিকে অবশ্যই গাড়ির অডিও OEM পরিষেবা অর্জনের জন্য APIগুলিকে ওভাররাইট করতে হবে:

public final class OemCarServiceImp extends OemCarService {
    @Override
    public OemCarAudioFocusService getOemAudioFocusService();

    @Override
    public OemCarAudioDuckingService getOemAudioDuckingService();

    @Override
    public OemCarAudioVolumeService getOemAudioVolumeService();
}

উদাহরণস্বরূপ , packages/services/Car/tests/OemCarServiceTestApp এ সংজ্ঞায়িত রেফারেন্স টেস্ট অ্যাপ দেখুন।

যদিও পরিষেবাটি গাড়ি পরিষেবা দ্বারা শুরু হয়, এটি স্বয়ংক্রিয়ভাবে গাড়ির অডিও পরিষেবার জন্য উপলব্ধ অনুমতিগুলির উত্তরাধিকারী হয় না৷ যেমন, OEM পরিষেবাগুলির জন্য প্রয়োজনীয় যে কোনও অনুমতি যথাযথ প্রক্রিয়ার সাথে অর্জন করা উচিত। উদাহরণস্বরূপ, packages/services/Car/data/etc/com.android.car.oemcarservice.testapp.xml দেখুন।

OEM পরিষেবা আর্কিটেকচার সহ গাড়ী অডিও পরিষেবা

AAOS-এ, গাড়ির অডিও পরিষেবা এই ক্রিয়াগুলি পরিচালনা করে:

  • অডিও রাউটিং
  • অডিও ফোকাস
  • অডিও হাঁস
  • ভলিউম এবং নিঃশব্দ

অ্যান্ড্রয়েড 14-এর আগে, এই আচরণটি মূলত স্থির ছিল এবং শুধুমাত্র সেটিংসের মাধ্যমে পরিবর্তন করা যেতে পারে, যদিও একটি খুব সীমিত সেটের ক্ষেত্রে। অ্যান্ড্রয়েড 14 একটি OEM-সংজ্ঞায়িত উপাদানের সাথে যোগাযোগ করার জন্য গাড়ী অডিও পরিষেবার জন্য একটি প্রক্রিয়া চালু করেছে যা পরিচালনা করে:

  • অডিও ফোকাস
  • অডিও হাঁস
  • ভলিউম এবং নিঃশব্দ

নীচের চিত্রটি গাড়ির অডিও পরিষেবা এবং গাড়ি OEM পরিষেবার জন্য একটি সরলীকৃত আর্কিটেকচার দেখায়৷ গাড়ির অডিও পরিষেবা বিভিন্ন হুকগুলিকে সংজ্ঞায়িত করে যা অডিও আচরণ পরিচালনা করতে গাড়ির OEM অডিও পরিষেবাতে কল করতে পারে৷ পরবর্তীটি ঘটে শুধুমাত্র যদি সংশ্লিষ্ট OEM গাড়ী অডিও পরিষেবা উপাদান সংজ্ঞায়িত করা হয়। অন্যথায়, গাড়ির অডিও পরিষেবা ডিফল্ট আচরণ ব্যবহার করে।

ইমেজ

গাড়ির অডিও পরিষেবা এবং গাড়ির OEM অডিও পরিষেবা সর্বদা সিঙ্কে রয়েছে তা নিশ্চিত করতে, প্রতিটি কলের জন্য গাড়ি অডিও পরিষেবা অডিও স্ট্যাকের বর্তমান অবস্থার প্রয়োজনীয় অংশগুলি গাড়ি OEM অডিও পরিষেবাতে পাস করে৷ উদাহরণস্বরূপ, যখন গাড়ির অডিও পরিষেবা অডিও ফোকাস মূল্যায়ন করার জন্য একটি অনুরোধকে বাধা দেয়, তখন এটি গাড়ির OEM অডিও পরিষেবাতে স্ট্যাকের বর্তমান অবস্থা পাস করে। বর্তমান অবস্থা বর্তমান ফোকাস ধারক এবং বর্তমান ফোকাস হারানো অন্তর্ভুক্ত. ফোকাস হারানো হল ফোকাস অনুরোধ যা এখনও স্ট্যাকের অংশ কিন্তু অস্থায়ীভাবে ফোকাস হারিয়েছে।

গাড়ির অডিও পরিষেবা অবশ্যই গাড়ির সমস্ত অডিও কার্যকলাপ পরিচালনা করবে৷ যদি গাড়ির অডিও পরিষেবা অডিও আচরণের কিছু অংশ পরিচালনা না করে, তাহলে গাড়ির OEM অডিও পরিষেবার কাছে প্রকাশিত তথ্য অসম্পূর্ণ। উদাহরণস্বরূপ, যদি একটি OEM তাদের নিজস্ব অডিও ফোকাস নীতি নিবন্ধন করে গাড়ি পরিষেবাতে অডিও ফোকাস পরিচালনাকে ওভাররাইট করে, তাহলে গাড়ির অডিও পরিষেবাটি গাড়ির OEM অডিও পরিষেবাকে সম্পূর্ণ তথ্য প্রদান করতে পারে না৷ এটি গাড়ির OEM অডিও পরিষেবার সিদ্ধান্ত নেওয়ার ক্ষমতাকে প্রভাবিত করতে পারে কারণ এতে গাড়ির অডিও পরিষেবাতে দৃশ্যমান নয় এমন তথ্যের অভাব থাকতে পারে৷

পদক্ষেপ নিতে, গাড়ির অডিও পরিষেবাটি OEM গাড়ি পরিষেবাগুলিকে কল করে৷ এই কলগুলি প্রক্রিয়া জুড়ে করা হয়, যার জন্য আন্তঃপ্রক্রিয়া যোগাযোগ (IPC) প্রয়োজন। IPC প্রতিটি কলে লেটেন্সি যোগ করে। OEM পরিষেবাতে বিলম্ব কমানো গুরুত্বপূর্ণ।

যেহেতু OEM পরিষেবাতে গাড়ির অডিও পরিষেবা কলগুলি ব্লক করছে, তাই OEM পরিষেবাটি সরাসরি API মূল্যায়নে গাড়ির অডিও পরিষেবাটিকে কল করা উচিত নয়৷ পরিবর্তে, গাড়ির অডিও পরিষেবা প্রয়োজনীয় তথ্য সরবরাহ করে যাতে দুটি প্রক্রিয়ার মধ্যে কলগুলি শুধুমাত্র একটি দিকে ভ্রমণের প্রয়োজন হয়৷

OEM গাড়ী অডিও সেবা সংজ্ঞা

OEM গাড়ী অডিও ফোকাস সেবা

গাড়ির অডিও পরিষেবা একটি অডিও নীতি ফোকাস শ্রোতা নিবন্ধন করে অ্যাপ থেকে অডিও ফোকাস অনুরোধ পরিচালনা করে। একটি স্ট্যাটিক ইন্টারঅ্যাকশন ম্যাট্রিক্সের উপর ভিত্তি করে ফোকাস আচরণ পরিচালনা করার জন্য গাড়ী অডিও পরিষেবার একটি ব্যবস্থা রয়েছে। ম্যাট্রিক্স তিনটি ভিন্ন ধরনের মিথস্ক্রিয়া সংজ্ঞায়িত করে:

  • সমসাময়িক মিথস্ক্রিয়া। ফোকাস হোল্ডাররা একই সময়ে ফোকাস বজায় রাখতে পারে।

  • একচেটিয়া মিথস্ক্রিয়া. ইনকামিং ফোকাস অনুরোধ বর্তমান ফোকাস হোল্ডার থেকে ফোকাস নেয়।

  • মিথস্ক্রিয়া প্রত্যাখ্যান করুন। বর্তমান ফোকাস ধারকের উপর ভিত্তি করে ইনকামিং ফোকাস অনুরোধ প্রত্যাখ্যান করা হয়েছে।

যদিও এটি কিছু স্বয়ংচালিত ব্যবহারের ক্ষেত্রে যথেষ্ট, এটি OEM প্রয়োজনীয়তার কারণে ভিন্ন হতে পারে এমন মিথস্ক্রিয়ার সমস্ত প্রয়োজনীয়তা পূরণ করে না। এর জন্য আমরা OemCarAudioFocusService প্রবর্তন করি:

public interface OEmCarAudioFocusService {
    OemCarAuddioFocusResults evaluateAudioFocusRequest(
        OemCarAudioFocusEvaluationRequest request);
    
    void notifyAudioFocusChange(
        List<AudioFocusEntry> holder,
        List<AudioFocusEntry> losers, int zoneId);
}

API evaluateAudioFocusRequest যে কোনো সময় গাড়ির অডিও পরিষেবা থেকে কল করা হয় যখন অডিও ফোকাসের জন্য একটি অনুরোধ থাকে যা মূল্যায়ন করা প্রয়োজন, এটি একটি দ্বিমুখী API যা ফলাফলগুলিকে ফিরিয়ে আনতে বাধা দেয়। অনুরোধে অডিও স্ট্যাকের বর্তমান অবস্থা সম্পর্কে তথ্য রয়েছে:

এই তথ্যটি focusHolders এ বর্তমান ফোকাস হোল্ডার এবং focusLosers লজার-এ বর্তমান ফোকাস হারানোর তুলনায় newFocusRequest মূল্যায়ন করতে ব্যবহার করা যেতে পারে। API এর ফলাফলগুলি ফেরত দেওয়া উচিত:

class OemCarAudioFocusResult {
    int audioZoneId;
    int audioFocusEvaluationResults;
    AudioFocusEntry focusResult;
    List<AudioFocusEntry> newLosers;
    List<AudioFocusEntry> newlyBlocked;
}

এটি audioFocusEvaluationResults এ প্রকৃত মূল্যায়ন ফলাফল সম্পর্কে তথ্য রয়েছে, যা নির্দেশ করে যে বর্তমান অনুরোধটি মঞ্জুর করা হয়েছে, বিলম্বিত হয়েছে বা এটি ব্যর্থ হয়েছে। স্ট্যাকের পরিবর্তনের প্রকৃতির উপর নির্ভর করে বর্তমান ফোকাস স্ট্যাকের যেকোনো পরিবর্তন newLosers এবং newlyBlocked এন্ট্রিতে সেট করা উচিত।

যেখানে newLosers এমন এন্ট্রি রয়েছে যা আগে ফোকাস ধরে রেখেছিল কিন্তু এখন স্থায়ীভাবে বা ক্ষণস্থায়ীভাবে ফোকাস হারাতে হবে। স্থায়ী ফোকাস হারানো ব্যক্তিদের অডিও ফোকাস স্ট্যাক থেকে আরও সরানো হবে, এবং ক্ষণস্থায়ী ফোকাস হারানোদের বর্তমান ফোকাস হারানোর স্ট্যাকে স্থানান্তরিত করা হবে যতক্ষণ না তারা ফোকাস পুনরুদ্ধার করে বা মূল ফোকাস অনুরোধকারী থেকে পরিত্যাগ করা হয়। যাই হোক না কেন, অনুরোধের জন্য ফোকাস শ্রোতা একটি সংশ্লিষ্ট ফোকাস হারানো পাবেন।

newlyBlocked তালিকায় এমন এন্ট্রি রয়েছে যেগুলি আগে ফোকাস হারানোর তালিকায় ছিল কিন্তু এখন নতুন এন্ট্রি দ্বারা ব্লক করা হয়েছে। ব্লক স্থায়ী বা ক্ষণস্থায়ী হতে পারে, স্থায়ী ফোকাস ব্লকের জন্য এন্ট্রি স্ট্যাক থেকে সরানো হবে এবং ফোকাস শ্রোতাদের কাছে ফোকাস ক্ষতি পাঠানো হবে। ক্ষণস্থায়ী ফোকাস লসের জন্য, এন্ট্রিটি ফোকাস হারানোর স্ট্যাকে থাকবে কিন্তু একটি নতুন ফোকাস ব্লকার ব্লকারের তালিকায় যোগ করা হবে, কোনো ফোকাস লস পাঠানো হবে না যেমনটি আগে পাঠানো হয়েছিল যখন এটি প্রথম ব্লক করা হয়েছিল। সমস্ত বর্তমান ব্লকারগুলি সরানো হলে অনুরোধটি অবশেষে অবরোধ মুক্ত করা হবে, অথবা ফোকাস পরিত্যাগ করা হলে এটি স্ট্যাক থেকে সরানো হবে।

দ্বিতীয় API, notifyAudioFocusChange হল একটি উপায় যা প্রতিটি অডিও ফোকাস অনুরোধে বলা হয় বা পরিত্যাগ করা হয়। API বেশিরভাগ ফোকাস পরিবর্তন সম্পর্কে OEM পরিষেবাকে অবহিত করতে ব্যবহৃত হয়, যা OEM গাড়ি অডিও পরিষেবার আচরণকে প্রভাবিত করতে পারে।

ফোকাস মূল্যায়নের জন্য নির্দেশিকা

AAOS-এ, অডিও ফোকাস অডিও প্লেব্যাক পরিচালনা করতে এবং ব্যবহারকারীর জন্য একটি সর্বোত্তম অভিজ্ঞতা প্রদান করতে কোন অ্যাপটি মেনে চলতে হবে তা নির্ধারণ করতে ব্যবহৃত হয়। যেমন, একটি অডিও ফোকাস অনুরোধ পরিচালনা করার সময় OEM প্লাগইন পরিষেবাকে নিম্নলিখিতগুলি বিবেচনা করা উচিত:

  • কোন স্থায়ী উচ্চ অগ্রাধিকার অডিও ফোকাস ছাড়া (যেমন একটি ফোন কল, জরুরী, বা নিরাপত্তা) অ্যাপ্লিকেশনগুলি অস্থায়ীভাবে বা স্থায়ীভাবে অডিও ফোকাস অর্জন করতে সক্ষম হওয়া উচিত।

  • একটি মিডিয়া ফোকাস সক্রিয় থাকাকালীন, অ্যাপ্লিকেশনগুলি অনুরোধ করছে:

    • কল ব্যবহারের ফোকাস, একযোগে বা একচেটিয়াভাবে ফোকাস গ্রহণ করতে সক্ষম হওয়া উচিত।

    • নেভিগেশন ব্যবহারের ফোকাস, একযোগে বা একচেটিয়াভাবে ফোকাস গ্রহণ করতে সক্ষম হওয়া উচিত।

    • সহকারী ব্যবহারের ফোকাস, একযোগে বা একচেটিয়াভাবে ফোকাস গ্রহণ করতে সক্ষম হওয়া উচিত।

  • উচ্চ অগ্রাধিকার অডিও ফোকাস (যেমন একটি ফোন কল, জরুরী সতর্কতা, বা নিরাপত্তা সতর্কতা) অ্যাপ্লিকেশানগুলি সক্রিয় থাকা অবস্থায়, যেকোন আগত বিলম্বিত অডিও ফোকাস অনুরোধ প্রয়োজন অনুসারে মঞ্জুর করা উচিত বা বিলম্বিত করা উচিত।

যদিও উপরের পরামর্শগুলি সম্পূর্ণ নয়, তারা গ্যারান্টি দিতে সাহায্য করতে পারে যে ফোকাসের অনুরোধকারী অ্যাপগুলি যখন কোনও সক্রিয় উচ্চ অগ্রাধিকারের শব্দ না থাকে তখন ফোকাস পেতে সক্ষম হবে। উচ্চ অগ্রাধিকারের শব্দগুলি সক্রিয় থাকা সত্ত্বেও, বিলম্বিত ফোকাস অনুরোধগুলিকে এখনও সম্মান করা উচিত এবং উচ্চ অগ্রাধিকারের শব্দ বন্ধ হয়ে গেলে ফোকাস পেতে সক্ষম হওয়া উচিত।

OEM গাড়ী ভলিউম সেবা

গাড়ির অডিও পরিষেবা অডিও সিস্টেম থেকে ভলিউম সামঞ্জস্য শুনে বা গাড়ির ইনপুট পরিষেবা থেকে সরাসরি ভলিউম কী ইভেন্টগুলি শোনার মাধ্যমে ভলিউম কী ইভেন্টগুলি পরিচালনা করে৷ প্রতিটি ক্ষেত্রে, গাড়ির অডিও পরিষেবার ডিফল্ট আচরণ হল সক্রিয় অডিও প্লেয়ার এবং একটি অডিও প্রসঙ্গ অগ্রাধিকার তালিকার উপর ভিত্তি করে কোন ভলিউম গ্রুপ পরিবর্তন করতে হবে তা নির্ধারণ করা।

আমরা দুটি ভলিউম অগ্রাধিকার তালিকা প্রদান. প্রথম তালিকাটি এই ক্রমে সমস্ত অডিও প্রসঙ্গ বিবেচনা করে। তালিকাটি অবরোহী ক্রমে উপস্থাপন করা হয়েছে, শীর্ষে সর্বোচ্চ অগ্রাধিকার এবং নীচে সর্বনিম্ন অগ্রাধিকার। উদাহরণস্বরূপ, যদি নেভিগেশন অডিও এবং মিউজিক অডিও একই সময়ে সক্রিয় থাকে, তাহলে ভলিউম কী ইভেন্টের সময় নেভিগেশন ভলিউম পরিবর্তন করা হয়।

  1. নেভিগেশন
  2. কল
  3. সঙ্গীত
  4. ঘোষণা
  5. ভয়েস কমান্ড
  6. কল রিং
  7. সিস্টেম সাউন্ড
  8. নিরাপত্তা
  9. এলার্ম
  10. বিজ্ঞপ্তি
  11. যানবাহনের অবস্থা
  12. জরুরী অবস্থা

ভলিউম কী ইভেন্ট ম্যানেজমেন্টকে কম জটিল করতে, গাড়ির অডিও পরিষেবার অডিও প্রসঙ্গের দ্বিতীয় অগ্রাধিকার তালিকা রয়েছে:

  1. কল
  2. মিডিয়া
  3. ঘোষণা
  4. ভয়েস কমান্ড

এই তালিকাটিও অবরোহী ক্রমে উপস্থাপন করা হয়েছে। এই দ্বিতীয় তালিকার উদ্দেশ্য হল মূল ইভেন্টগুলির মাধ্যমে আরও সাধারণ শব্দগুলিকে পরিবর্তন করার অনুমতি দেওয়া। অস্বাভাবিক, সম্ভবত একটি ছোট সময়ের শব্দ, শুধুমাত্র অডিও সেটিংস UI এর মাধ্যমে পরিচালনা করা যেতে পারে।

ভলিউমের আসল সংস্করণটি audioVolumeAdjustmentContextsVersion কনফিগারেশনের সাথে সেট করা যেতে পারে। কনফিগারেশনটি 1 বা 2 এ সেট করা যেতে পারে ( 2 ডিফল্ট)।

ভলিউম ম্যানেজমেন্টে আরও নমনীয়তা প্রদান করতে, Android 14 এ OemCarAudioVolumeService চালু করা হয়েছে:

public interface OemCarAudioVolumeService {
    OemCarvolumeChangeInfo getSuggestedGroupForVolumeChange(
OemCarAudioVolumeRequest request, int volumeAdjustment);
}

OEM গাড়ির অডিও ভলিউম পরিষেবাটির একটি একক পদ্ধতি রয়েছে, যা একটি volumeAdjustment এবং একটি OemCarAudioVolumeRequest নেয়:

class OemCarAudioVolumeRequest {
    int audioZoneId;
    int callState;
    List<AudioAttributes> activePlaybackAttributes;
    List<AudioAttributes> duckedAttributes;
    List<CarVolumeGroupInfo> volumeGroupState;
}

অনুরোধের activePlaybackAttributes এ সক্রিয় অডিও বৈশিষ্ট্য রয়েছে। duckedAttributes সবই বর্তমানে ducked অডিও অ্যাট্রিবিউট। volumeGroupState ভলিউম গ্রুপের বর্তমান অবস্থা রয়েছে। অনুরোধটি অডিও স্ট্যাকের বর্তমান অবস্থার প্রতিনিধিত্ব করে এবং কোন ভলিউম গ্রুপ পরিবর্তন করা উচিত তা নির্ধারণ করতে ব্যবহার করা যেতে পারে। OemCarVolumeChangeInfo তে ফলাফলগুলি ফেরত দেওয়া উচিত:

class OemCarVolumeChangeInfo {
    boolean change;
    CarVolumeGroupInfo volumeGroupChanged;
}

change বুলিয়ান নির্দেশ করে যে কোনো ভলিউম পরিবর্তিত হয়েছে কিনা, true নির্দেশ করে যে একটি পরিবর্তন আছে এবং ভলিউম গ্রুপ আপডেট করা উচিত। volumeGroupChanged হল প্রকৃত ভলিউম গ্রুপ যা পরিবর্তন করা উচিত। এপিআই-তে পাস করা আসল volumeAdjustment প্যারামিটার অনুযায়ী এই গ্রুপটি পরিবর্তন করা উচিত। উদাহরণস্বরূপ, যদি ফলাফলগুলি নির্দেশ করে যে নেভিগেশন ভলিউম গ্রুপটি নিঃশব্দ করা উচিত, তাহলে বুলিয়ান true হবে এবং নেভিগেশনের জন্য ফেরত ভলিউম গ্রুপটি হওয়া উচিত।

OEM গাড়ী হাঁস সেবা

গাড়ির অডিও পরিষেবা অডিও ফোকাস পরিবর্তনগুলি পর্যবেক্ষণ করে অডিও ডাকিং পরিচালনা করে এবং AudioControl এইচএএল-কে কোন অডিও ডিভাইসগুলি ডাকতে হবে সে সম্পর্কে একটি সংকেত প্রেরণ করে৷ যখন ফোকাস পরিবর্তিত হয়, তখন সমস্ত সক্রিয় ফোকাস হোল্ডারদের মূল্যায়ন করা হয় যে এই স্ট্যাটিক ডকিং নিয়মের উপর ভিত্তি করে কোনটি হাঁস করা উচিত:

  • জরুরী শব্দ কল শব্দ ছাড়া সব হাঁস
  • জরুরী শব্দ ব্যতীত সবকিছুই নিরাপত্তাহীন
  • নেভিগেশন নিরাপত্তা এবং জরুরী শব্দ ছাড়া সবকিছু হাঁস
  • নিরাপত্তা, জরুরী, এবং নেভিগেশন শব্দ ছাড়া হাঁস কল করুন
  • ভয়েস হাঁস কল রিং শব্দ
  • সঙ্গীত এবং ঘোষণা সবকিছু দ্বারা duck করা উচিত

এই নিয়মগুলি সম্পূর্ণ নয় এবং এই নির্দেশিকাগুলির উপর ভিত্তি করে শব্দগুলিকে কীভাবে ডাকা উচিত তা নির্ধারণের জন্য OEMগুলি দায়ী থাকে৷ উপলব্ধ প্রয়োজনীয়তার উপর ভিত্তি করে OEMগুলি এই সুপারিশগুলিকে আরও সক্রিয়ভাবে নিয়ন্ত্রণ করতে পারে। Android 14 এ OemCarDuckingService চালু করা হয়েছে:

class OemCarAudioDuckingService {
List<AudioAttributes>   evaluateAttributesToDuck(
        OemCarAudioVolumeRequest request);
}

এই APIটি অডিও ফোকাস পরিবর্তনের জন্য গাড়ী অডিও পরিষেবা থেকে কল করা হয়। এটি OEM গাড়ির ভলিউম পরিষেবাতে প্রবর্তিত OemCarAudioVolumeRequest পুনরায় ব্যবহার করে এবং হাঁসের কোন বৈশিষ্ট্যগুলি সম্পর্কে সিদ্ধান্ত নেওয়ার জন্য প্রাসঙ্গিক তথ্য রয়েছে৷ API থেকে হাঁসের অডিও বৈশিষ্ট্যের তালিকা বর্তমান অডিও অবস্থার সাথে তুলনা করা হয়:

  • অডিও বৈশিষ্ট্য বর্তমানে ducked:

    • তালিকায়, হাঁস করা অব্যাহত
    • তালিকায় নেই, হাঁস পালন বন্ধ
  • অডিও অ্যাট্রিবিউট বর্তমানে ডক করা হয়নি:

    • তালিকায়, ducked
    • তালিকায় নেই, হাঁস পালন বন্ধ

গাড়ির অডিও পরিষেবা তারপর অডিও বৈশিষ্ট্যগুলি কোন অডিও আউটপুট ডিভাইসের অন্তর্গত তা নির্ধারণ করে এবং যথাক্রমে ডকড অডিও আউটপুট ডিভাইস তালিকা বা আনডাকড অডিও ডিভাইসের তালিকায় যোগ করে। হার্ডওয়্যার স্তরে প্রয়োজনীয় হাঁস সঞ্চালনের জন্য এটি শেষ পর্যন্ত অডিও কন্ট্রোল এইচএএল- এ পাঠানো হয়।

নীচের চিত্রটি ফোকাস অনুরোধের জন্য অডিও ডাকিং নিয়ন্ত্রণের একটি সরলীকৃত সিকোয়েন্স ডায়াগ্রাম দেখায় যখন OEM ডাকিং পরিষেবা ব্যবহার করা হয়:

ইমেজ

ক্রমটি শুরু হয় যখন একটি অ্যাপ পাবলিক অডিও ম্যানেজার API-এর মাধ্যমে অডিও ফোকাস পরিচালনা করার অনুরোধ করে। ফলাফল নির্ধারণের জন্য অনুরোধটি গাড়ির অডিও পরিষেবাতে পাঠানো হয়েছে। যখন অডিও ফোকাস নির্ধারণ করা হয়, তখন অডিও ডাকিং মূল্যায়ন করা হয় গাড়ির অডিও পরিষেবা যা OemCarAudioDuckingService কল করে তা মূল্যায়ন করার জন্য কোন অডিও বৈশিষ্ট্যগুলিকে ডাকা উচিত। evaluateAttributesToDuck API থেকে ফলাফলগুলি ফিরে আসার পরে, ডাকের জন্য অডিও ডিভাইসগুলি গণনা করা হয়, এবং অবশেষে অডিও হার্ডওয়্যারে ডাকিং প্রয়োগ করতে AudioControl তথ্য পাঠানো হয়।

OEM গাড়ী অডিও পরিষেবা রেফারেন্স বাস্তবায়ন

AAOS packages/services/Car/tests/OemCarServiceTestApp এ OEM গাড়ি পরিষেবার একটি রেফারেন্স বাস্তবায়ন প্রদান করে, যা OemCarAudioFocusService , OemCarAudioDuckingService , এবং OemCarAudioVolumeService এর সাথে OemCarService প্রয়োগ করে৷ পরেরটির জন্য, প্রতিটি পরিষেবা একটি স্ট্যাটিক আচরণ লোড করতে XML ফাইল ব্যবহার করে। উদাহরণ স্বরূপ, OemCarAudioFocusServiceImp oem_focus_config.xml লোড করে, যাতে একটি ইন্টারঅ্যাকশন ম্যাট্রিক্স থাকে। যখন evaluateAudioFocusRequest কল করা হয় তখন ফোকাস অনুরোধের মূল্যায়ন করতে ম্যাট্রিক্স ব্যবহার করা হয়।

রেফারেন্স পরীক্ষা অ্যাপ ডিবাগিং

OEM গাড়ি পরিষেবা পরীক্ষা অ্যাপটি AOSP সোর্স কোডের অংশ। OEM তাদের প্রয়োজন অনুযায়ী পরিবর্তন করতে পারেন. ডিবাগিংয়ের জন্য, পরীক্ষা অ্যাপটি সক্ষম করতে config_oemCarService কনফিগারেশন ব্যবহার করুন।

<!-- This is the component name for the OEM customization service. OEM can choose to implement
this service to customize car service behavior for different policies. If OEMs choose to
implement it, they have to implement a service extending OemCarService exposed by car-lib,
and implement the required component services.
If the component name is invalid, CarService would not connect to any OEM service.
Component name can not be a third party package. It should be pre-installed -->
<string name="config_oemCarService" translatable="false">
com.android.car.oemcarservice.testapp/.OemCarServiceImpl
</string>

OEM গাড়ি পরিষেবা যাচাই করতে OEM পরিষেবার জন্য গাড়ি পরিষেবা dump কমান্ড ব্যবহার করে:

adb shell dumpsys car_service --oem-service

ফলাফল নীচের আউটপুট অনুরূপ হতে পারে:

***CarOemProxyService dump***
  mIsFeatureEnabled: true
  mIsOemServiceBound: true
  mIsOemServiceReady: true
  mIsOemServiceConnected: true
  mInitComplete: true
  OEM_CAR_SERVICE_CONNECTED_TIMEOUT_MS: 5000
  OEM_CAR_SERVICE_READY_TIMEOUT_MS: 5000
  mComponentName: com.android.car.oemcarservice.testapp/.OemCarServiceImpl

dump তথ্যের প্রতিটি ব্যাচের প্রতিটি বুলিয়ান বৈশিষ্ট্য এবং পরিষেবার অবস্থা নির্ধারণ করে। উদাহরণস্বরূপ, ডাম্প তথ্য mIsOemServiceReady নির্দিষ্ট করে যে পরিষেবাটি ব্যবহার করার জন্য প্রস্তুত কিনা, যেখানে true নির্দেশ করে এটি প্রস্তুত এবং false নির্দেশ করে যে এটি প্রস্তুত নয়।