android - অ্যান্ড্রয়েড কাস্টম রম-এ কল-ভয়েস প্লেব্যাক সংশোধন করা হচ্ছে



android-source alsa (1)

বেশ কয়েকটি সম্ভাব্য বিষয় রয়েছে যা আমার মনে আসে। ফাঁকা বাফার আপনাকে ইঙ্গিত দিতে পারে যে আপনার ভুল উত্সটি নির্বাচিত হয়েছে। এছাড়াও যেহেতু https://developer.android.com/reference/android/media/AudioRecord.html#AudioRecord(int,%20int,%20int,%20int,%20int) অনুসারে আপনি সর্বদা কোনও ব্যতিক্রম নাও পেতে পারেন কিছু হলেও কনফিগারেশনের ক্ষেত্রে ভুল, আপনি নিশ্চিত করতে চাইতে পারেন যে আপনার অবজেক্টটি সঠিকভাবে শুরু হয়েছে কিনা। অন্য সব কিছু যদি ব্যর্থ হয় তবে আপনি একটি "mRecord.setPreferredDevice (AudioDeviceInfo.TYPE_BUILTIN_EARPIECE) করতেও পারেন;" ফোনের অন্তর্নির্মিত ইয়ারপিসটি সরাসরি আপনার রেকর্ডারের ইনপুটটিতে রুট করতে। হ্যাঁ, এটি দারুণ নোংরা এবং হ্যাকি, তবে সম্ভবত উদ্দেশ্যটি অনুসারে।

অন্যটি যা আমাকে বিস্মিত করেছিল তা হ'ল বিল্ডার ক্লাসটি ব্যবহার না করে আপনি তার নির্মাণকারীর মাধ্যমে অবজেক্টটি সরাসরি কনফিগার করার চেষ্টা করেছেন। এর পরিবর্তে আপনি অডিওরেকর্ড.বিল্ডারটি ব্যবহার না করার কোনও নির্দিষ্ট কারণ রয়েছে (এর পরিবর্তে https://developer.android.com/reference/android/media/AudioRecord.Builder.html এও একটি দুর্দান্ত উদাহরণ রয়েছে)?

আমি একটি সাধারণ ফোন কল প্লেব্যাক শব্দটিতে প্রিপ্রোসেসিং যুক্ত করতে অ্যান্ড্রয়েড ওএস (এওএসপি থেকে অফিসিয়াল চিত্র) সংশোধন করতে চাই।

আমি ইতিমধ্যে অ্যাপ অডিও প্লেব্যাকের জন্য এই ফিল্টারিংটি অর্জন করেছি ( এইচএল এবং অডিওফ্লিংগার সংশোধন করে)।

আমি কেবলমাত্র একটি নির্দিষ্ট ডিভাইস (Nexus 5X) টার্গেট করে ঠিক আছি। এছাড়াও, আমার কেবল প্লেব্যাক ফিল্টার করা দরকার - আমি রেকর্ডিংয়ের (আপলিংক) যত্ন করি না।

আপডেট # 1:

এটি পরিষ্কার করার জন্য - আমি কোয়ালকম-নির্দিষ্ট ড্রাইভারগুলি সংশোধন করে ঠিকঠাক করছি, বা এটি নেক্সাস 5 এক্স-এ চালিত অংশ এবং ইন-কল প্লেব্যাকটি সংশোধন করতে সহায়তা করতে পারে।

আপডেট # 2:

আমি একটি জাভা স্তর অ্যাপ্লিকেশন তৈরি করার চেষ্টা করছি যা ফোনটিকে প্লেব্যাকটি রিয়েল টাইমে সঙ্গীত প্রবাহে নিয়ে যায়।

আমি ইতিমধ্যে এটিকে সিস্টেম অ্যাপ হিসাবে ইনস্টল করতে, AudioRecord সাথে AudioSource.VOICE_DOWNLINK শুরু করার অনুমতি পেয়ে সফল AudioSource.VOICE_DOWNLINK । যাইহোক, রেকর্ডিং ফাঁকা নমুনা দেয়; এটি ভয়েস কল রেকর্ড করে না।

এটি আমার কর্মী থ্রেডের ভিতরে কোড:

// Start recording
int recBufferSize = AudioRecord.getMinBufferSize(44100, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT);
mRecord = new AudioRecord(MediaRecorder.AudioSource.VOICE_DOWNLINK, 44100, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT, recBufferSize);

// Start playback
int playBufferSize = AudioTrack.getMinBufferSize(44100, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT);
mTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 44100, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT, playBufferSize, AudioTrack.MODE_STREAM);

mRecord.startRecording();;
mTrack.play();

int bufSize = 1024;
short[] buffer = new short[bufSize];
int res;
while (!interrupted())
{
    // Pull recording buffers and play back
    res = mRecord.read(buffer, 0, bufSize, AudioRecord.READ_NON_BLOCKING);
    mTrack.write(buffer, 0, res, AudioTrack.WRITE_BLOCKING);
}

// Stop recording
mRecord.stop();
mRecord.release();
mRecord = null;

// Stop playback
mTrack.stop();
mTrack.release();;
mTrack = null;

আমি একটি নেক্সাস 5 এক্স, আমার নিজস্ব এওএসপি কাস্টম রম, অ্যান্ড্রয়েড 7.1.1 এ চলছে। আমার সেই জায়গাটি খুঁজে বের করতে হবে যা কল রেকর্ডিংয়ের কাজ করতে দেবে - সম্ভবত প্ল্যাটফর্ম hardware/qcom/audio/hal কোথাও hardware/qcom/audio/hal মধ্যে রয়েছে।

এছাড়াও আমি hardware/qcom/audio/hal/voice.c তবে আমি এটির কোনও ধারণা রাখতে সক্ষম হইনি (এটি যেভাবে চাইলে এটি কীভাবে কাজ করবে)।

আপডেট # 3:

আমি AudioSource.VOICE_DOWNLINK ব্যবহার সম্পর্কে আরও সুনির্দিষ্ট প্রশ্ন AudioSource.VOICE_DOWNLINK , যা সঠিক মনোযোগ আকর্ষণ করতে পারে এবং শেষ পর্যন্ত আমাকে এই প্রশ্নের সমস্যা সমাধানে সহায়তা করবে।