2017-01-27 6 views
5

मैं एक iPhone पर अंतर्निहित माइक्रोफ़ोन 6. क्षुधा के साथ रिकॉर्डिंग एक चैनल ऑडियो के लिए एप्लिकेशन में लिख रहा हूँ पर (1000 हर्ट्ज के आसपास) एक कम नमूना पर रिकॉर्ड करने के लिए अपेक्षा के अनुरूप पर रिकॉर्ड करने के लिए कॉन्फ़िगर किया गया काम करता है 8000 हर्ट्ज यहाँ कोडकैसे एक iPhone

// Set up audio session 
    let session = AVAudioSession.sharedInstance() 

    // Configure audio session 
    do { 
     try session.setCategory(AVAudioSessionCategoryPlayAndRecord) 

     var recordSettings = [String:AnyObject]() 
     recordSettings[AVFormatIDKey] = Int(kAudioFormatLinearPCM) as AnyObject 

     // Set the sampling rate 
     recordSettings[AVSampleRateKey] = 8000.0 as AnyObject 
     recordSettings[AVNumberOfChannelsKey] = 1 as AnyObject 

     recorder = try AVAudioRecorder(url: outputFileURL, settings: recordSettings) 

     recorder?.delegate = self 
     recorder?.isMeteringEnabled = true 

     recorder?.prepareToRecord() 

     return true 

    } 
    catch { 
     throw Error.AVConfiguration 
    } 

है भंडारण आवश्यकताओं को कम करने के लिए, मैं एक बहुत कम नमूना दर (आदर्श कम से कम 1000 हर्ट्ज) पर रिकॉर्ड करने के लिए करना चाहते हैं। यदि मैं नमूना दर 1000 हर्ट्ज पर सेट करता हूं, तो ऐप रिकॉर्ड 8000 हर्ट्ज पर होता है।

एप्पल के प्रलेखन के अनुसार,

हार्डवेयर नमूना दर के लिए उपलब्ध रेंज डिवाइस निर्भर है। यह आमतौर पर 8000 से 48000 हर्ट्ज तक है।

प्रश्न ... यह AVAudioSession (या अन्य ढांचे) का उपयोग करने के लिए एक कम नमूना दर ऑडियो रिकार्ड करने के लिए संभव है? iPhone पर

+0

आप असम्पीडित पीसीएम के बजाय एएसी जैसे विभिन्न प्रारूप का उपयोग क्यों नहीं करते? यदि आप कोडेक का उपयोग करते हैं, तो फ़ाइल का आकार बहुत कम हो जाएगा – manishg

+1

मुझे लगता है कि आपको ~ 50-500 हर्ट्ज (न्यूक्विस्ट सीमा तक माइक्रोफ़ोन की अनुमानित सीमा) में आवृत्तियों की * लापरवाह * रिकॉर्डिंग की आवश्यकता है? अन्यथा यह अंतरिक्ष बचाने की एक बहुत खराब तरीका है। – Krumelur

उत्तर

6

ऑडियो रिकॉर्डिंग हार्डवेयर कोडेक तो उपलब्ध फ्रेम दरों hardcoded कर रहे हैं और बदला नहीं जा सकता के साथ बना रहे हैं। लेकिन अगर आपको 1 किलोहर्ट्ज़ नमूना दर की आवश्यकता है तो आप 8kHz पर रिकॉर्ड कर सकते हैं और बस कुछ अनुकरण पुस्तकालय के साथ रिकॉर्ड करने के बजाय बस दोबारा रिकॉर्ड कर सकते हैं। निजी तौर पर, मैं ऐसे कार्यों के लिए ffmpeg का उपयोग करना पसंद करता हूं।

+0

यह सही उत्तर है, लेकिन मैं यह जोड़ूंगा कि अगर बस अनुकरण की आवश्यकता है, तो शायद libresample या libsoxr जैसी छोटी लाइब्रेरी संपूर्ण ffmpeg से एकीकृत करना आसान है। – Krumelur

5

मुझे आशा है कि आप जानते हैं कि द्वारा niquist theorem आप उम्मीद नहीं कर सकते हैं बहुत उपयोगी परिणाम आप क्या हासिल करने की कोशिश की

है, छोड़कर आप कम आवृत्तियों केवल के लिए लक्षित कर रहे हैं। उस स्थिति के लिए आप पहले कम-पास फ़िल्टर का उपयोग करना चाहेंगे। यह लगभग olny आवृत्तियों 500 Hz नीचे के साथ आवाज को समझने के लिए असंभव है। आमतौर पर भाषण को 3 kHz की आवश्यकता होती है, जो 6000 की नमूना दर के लिए बनाता है।

एक उदाहरण की आप को कुछ इसी तरह की कोशिश की उम्मीद करना होगा क्या के लिए:

ffmpeg -i tst.mp3 -ar 1000 tst.wav 
उदा

कुछ vocals और परिणाम सुनें। हालांकि आप संभवतः कुछ स्वीकार्य व्यापार-बंद प्राप्त कर सकते हैं उदा। 3000

एक वैकल्पिक का एक नमूना दर मक्खी पर कुछ संपीड़नकरने के लिए के रूप में @manishg सुझाव दिया होगा। स्मार्टफोन के रूप में इन दिनों वास्तविक समय में वीडियो संपीड़न कर सकते हैं जो आईफोन के हार्ड- और सॉफ्टवेयर के साथ पूरी तरह से व्यवहार्य होना चाहिए। लेकिन नमूना दर को कम करने की तुलना में यह पूरी तरह से अलग बात है।