5

क्या ऐप द्वारा उत्पन्न आंतरिक ध्वनि रिकॉर्ड करना संभव है?एंड्रॉइड ऐप और निर्यात एमपी 3 के आंतरिक ध्वनि प्लेबैक को रिकॉर्ड/कैप्चर करें?

मेरा ऐप आपको संगीत दृश्यों को बनाने और चलाने की अनुमति देता है।

soundPool.play(soundIds[i], 1f, 1f, 1, 0, Constants.TIME_RATE); 

मैं एमपी 3 को अनुक्रम और निर्यात रिकॉर्ड करने में सक्षम होना चाहता हूं।

मैं Audio Capture देखा लेकिन setAudioSource (पूर्णांक audio_source) केवल एमआईसी रिकॉर्डिंग स्वीकार करने के लिए लगता है।

धन्यवाद

उत्तर

3

नहीं, (ऑडियो आउटपुट रही, यहां तक ​​कि अपने खुद के अनुप्रयोग के लिए वास्तव में है कि, पूरी तरह सच नहीं है, क्योंकि आप यह Visualizer एपीआई के माध्यम से प्राप्त कर सकते हैं के लिए कोई एपीआई है, लेकिन यह इस तरह के कम गुणवत्ता की होगी मुझे संदेह है कि यह आपके लिए किसी भी प्रयोग का होगा)।

यदि आप उस तरह की कार्यक्षमता चाहते हैं तो आपको इसे स्वयं लागू करना होगा। अर्थात्; जैसे ही आप ध्वनि के प्लेबैक शुरू करते हैं, उन्हें मिलाएं और परिणाम को फ़ाइल में भी लिखें। अगर ध्वनियां संपीड़ित होती हैं तो आपको उन्हें स्वयं को डीकोड करने का भी मामला लेना होगा।

नोट कोई MP3 एन्कोडर एंड्रॉयड के साथ शामिल है कि है, तो आप यह है कि अगर आप प्रारूप में निर्यात करना चाहते हैं है वैसे भी अपने स्वयं के MP3 एन्कोडर आपूर्ति करने के लिए होगा।

+0

धन्यवाद माइकल - कोई विचार जहां सबसे अच्छा शुरू करना है (प्रलेखन, ट्यूटोरियल इत्यादि) क्योंकि मुझे नहीं पता कि मैं ध्वनियों को कैसे मिश्रित करूं और उन्हें फाइल में लिखूं? – fxfuture

+0

सबसे सरल परिदृश्य होगा यदि आपकी सभी आवाज़ें एक ही नमूना दर, चैनलों की संख्या आदि के कच्चे पीसीएम थे; और आपने एक बुनियादी योजक मिक्सर का उपयोग किया था। आपके मिश्रण में प्रत्येक वर्तमान सक्रिय ध्वनि से नमूना लेने और उन्हें एक साथ जोड़ने के लिए, और उसके बाद मानक जावा फ़ाइल एपीआई का उपयोग फ़ाइल को परिणाम लिखने के लिए किया जाएगा। यह सुनिश्चित करने के लिए देखभाल की जानी चाहिए कि अतिरिक्त ओवरफ्लो नहीं होगा। यदि आप एन्कोडिंग और डिकोडिंग से निपटना शुरू करते हैं तो यह अधिक जटिल हो जाता है। यदि आप Google उदास करते हैं तो आपको उपयोगी जानकारी मिल सकती है। "ffmpeg एमपी 3 एंड्रॉइड" या "ऑडियो मिश्रण" के लिए। – Michael

+1

बहुत उपयोगी धन्यवाद। शुरुआत के लिए यह पाया - http://mobilengineering.blogspot.it/2012/06/audio-mix-and-record-in-android.html – fxfuture

1

के रूप में माइकल ने कहा, यू अपने लागू करने की आवश्यकता इसके लिए अपने एन्कोडर और डिकोडर। विजुअलाइजर डेटा की बहुत कम गुणवत्ता प्रदान कर रहा है क्योंकि हम इसे कस्टम दृश्यों और प्रभावों पर दिखाने के लिए उपयोग कर सकते हैं जो तुल्यकारक के साथ सिंक्रनाइज़ होते हैं।

यह link जहां आपको एमपी 3 फ़ाइल के लिए सरल डिकोडर और एन्कोडर मिलेगा। जहां वे एमपी 3 फ़ाइल से डेटा पढ़ रहे हैं और इसे नई एमपी 3 फ़ाइल में डाल रहे हैं। उन्होंने कुछ अन्य एक्सटेंशन के लिए भी समर्थन बनाया था।

http://code.google.com/p/ringdroid/source/browse/#svn%2Fbranches%2Fgingerbread%2Fsrc%2Fcom%2Fringdroid

0

http://xzpeter.org/?p=254 के अनुसार यह आंतरिक साउंड प्लेबैक कब्जा करने के लिए अगर आप एंड्रॉयड स्रोतों को संशोधित संभव है। विशेष रूप से AudioFlinger::MixerThread कक्षा का लेखन कार्य। (ध्यान दें कि आलेख थोड़ा पुराना है - नवीनतम एंड्रॉइड संस्करणों AudioFlinger पर पुनर्गठित किया गया था और कोड को अब threadLoop_write() फ़ंक्शन में पाया जा सकता है)।

मूल समाधान लेखक का हवाला देते हुए:

AudioFlinger dir frameworks/base/services/audioflinger/ के तहत कार्यान्वित किया जाता है। हम पर जा रहे हैं मिक्सर आउटपुट को ढूंढना है। फ़ाइल AudioFlinger.cpp में, हम देख सकते हैं AudioFlinger::MixerThread::threadLoop(), जो मिक्सर के थ्रेड काम कर रहा है, और यह मिक्सर थ्रेड AudioFlinger::BaseThread से विरासत में मिला है।फिर, बस अपने सबसे अच्छे संपादक (vim, Emacs, एडिट, जो कुछ भी) के साथ कीवर्ड खोज mOutput->write , और हम threadLoop() समारोह के तहत कुछ इस तरह मिल जाएगा:

mLastWriteTime = systemTime(); 
mInWrite = true; 
mBytesWritten += mixBufferSize; 

int bytesWritten = (int)mOutput->write(mMixBuffer, mixBufferSize); 
if (bytesWritten < 0) mBytesWritten -= mixBufferSize; 
mNumWrites++; 
mInWrite = false; 

बहुत बिंदु है कि मिक्सर उत्पादन बफर को हार्डवेयर संबंधित कोड में स्थानांतरित किया जाता है, और ऑडियो क्लिप mMixbuffer में है, आकार mixBufferSize के साथ। इस बफर में, पीसीएम कच्चे ऑडियो डेटा 44100Hz नमूना दर, 2 चैनल और 16 बिट्स छोटे एंडियन के साथ इसके परम के रूप में हैं। क्रम में परिवर्तित करने में,
aplay -t raw -c 2 -f S16_LE -r 44100 wav.raw

वैसे भी: आप लिखते हैं तो यह एक फाइल करने के लिए बाहर बफ़र, /data/wav.raw की तरह, तुम बस adb pull आपके मेजबान मशीन के लिए डेटा फ़ाइल को पुनः प्राप्त और aplay के साथ खेलने के लिए उपयोग कर सकते हैं यह एमपी 3 के लिए आपको माइकल द्वारा बताए गए बाहरी एन्कोडर का उपयोग करना होगा।

संबंधित मुद्दे