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) भी कर सकते हैं;" सीधे अपने रिकॉर्डर के इनपुट के लिए फोन के अंतर्निहित ईयरपीस को रूट करने के लिए। हाँ, यह थोड़े गंदे और हैकरी है, लेकिन शायद उद्देश्य के अनुरूप है।

दूसरी बात जो मुझे हैरान कर रही थी कि आपने बिल्डर क्लास का उपयोग करने के बजाय ऑब्जेक्ट को सीधे उसके कंस्ट्रक्टर के माध्यम से कॉन्फ़िगर करने का प्रयास किया है। क्या कोई विशिष्ट कारण है कि आप AudioRecord.Builder का उपयोग नहीं करना चाहते हैं (इसके बजाय https://developer.android.com/reference/android/media/AudioRecord.Builder.html पर एक अच्छा उदाहरण है)?

मैं सामान्य ओएस कॉल प्लेबैक ध्वनि के लिए प्रीप्रोसेसिंग जोड़ने के लिए एंड्रॉइड ओएस (एओएसपी से आधिकारिक छवि) को संशोधित करना चाहूंगा।

मैंने पहले से ही ऐप ऑडियो प्लेबैक ( HAL और ऑडीओफ़्लिंगर को संशोधित करके) के लिए यह फ़िल्टरिंग हासिल कर ली है।

मैं केवल एक विशिष्ट उपकरण (Nexus 5X) को लक्षित करके ठीक हूं। इसके अलावा, मुझे केवल प्लेबैक को फ़िल्टर करने की आवश्यकता है - मुझे रिकॉर्डिंग (अपलिंक) की परवाह नहीं है।

अद्यतन # 1:

यह स्पष्ट करने के लिए - मैं क्वालकॉम-विशिष्ट ड्राइवरों को संशोधित करने के साथ ठीक हूं, या जो भी हिस्सा है वह नेक्सस 5 एक्स पर चलता है और मुझे इन-कॉल प्लेबैक को संशोधित करने में मदद कर सकता है।

अद्यतन # 2:

मैं एक जावा लेयर एप बनाने का प्रयास कर रहा हूं जो फोन प्लेबैक को वास्तविक समय में म्यूजिक स्ट्रीम में रूट करता है।

मैंने पहले ही इसे एक सिस्टम ऐप के रूप में स्थापित करने में सफलता प्राप्त कर ली है, AudioRecord को 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 प्लेटफ़ॉर्म कोड में कहीं।

इसके अलावा, मैं फंक्शन voice_check_and_set_incall_rec_usecase को hardware/qcom/audio/hal/voice.c देख रहा हूं। हालाँकि, मैं इसका मतलब नहीं समझ पा रहा था (इसे कैसे बनाया जाए, यह काम करने का तरीका है)।

अद्यतन # 3:

मैंने AudioSource.VOICE_DOWNLINK का उपयोग करने के बारे में अधिक विशिष्ट प्रश्न खोला है , जो सही ध्यान आकर्षित कर सकता है और अंततः मुझे इस प्रश्न को हल करने में भी मदद करेगा।





android-rom