2010-01-14 18 views
10

मैं निम्नलिखित तरीके से एक चर x को कोई मान निर्दिष्ट:wave.readframes द्वारा क्या किया जाता है?

import wave 
w = wave.open('/usr/share/sounds/ekiga/voicemail.wav', 'r') 
x = w.readframes(1) 

जब मैं एक्स मैं टाइप करें:

'\x1e\x00' 

तो x एक मूल्य मिला है। लेकिन वह क्या है? क्या यह हेक्साडेसिमल है? type(x) और type(x[0]) मुझे बताएं कि x और x[0] एक स्ट्रिंग्स। क्या कोई मुझे बता सकता है कि मुझे इस तार की व्याख्या कैसे करनी चाहिए? क्या मैं उन्हें पूर्णांक में बदल सकता हूं?

उत्तर

0

यह तार बाइट्स का प्रतिनिधित्व करते हैं। मुझे लगता है कि आप उन्हें struct पैकेज के साथ एक पूर्णांक में बदल सकते हैं, जो बाइट्स के तारों को समझने की अनुमति देता है।

7

इंटरैक्टिव दुभाषिया इस तरह के अप्राप्य पात्रों को आकर्षित करता है। स्ट्रिंग में दो बाइट्स, 0x1E और 0x00 शामिल हैं। आप इसे struct.unpack("<H", x) (थोड़ा एंडियन!) के साथ एक (वर्ड-साइज) पूर्णांक में परिवर्तित कर सकते हैं।

+0

इसके बाद आप उसी प्रारूप में स्ट्रिंग में पूर्णांक की सरणी को कैसे परिवर्तित करेंगे? – quano

+0

@quano: Arrays में ['.tostring()'] (http://docs.python.org/library/array.html#array.array.tostring) विधि है। सरल अनुक्रमों के लिए, आप 'struct.pack (" <4H ", 1, 2, 3, 4) का उपयोग कर सकते हैं। numpy भी इसी तरह के तरीकों होना चाहिए। – AndiDog

1

यह एक दो बाइट स्ट्रिंग है:

>>> x='\x1e\x00' 
>>> map(ord, list(x)) 
[30, 0] 
>>> [ord(i) for i in x] 
[30, 0] 
0

हाँ, यह हेक्साडेसिमल में है, लेकिन क्या इसका मतलब है कि wav फ़ाइल के अन्य आउटपुट पर निर्भर करता है जैसे नमूना चौड़ाई और चैनलों की संख्या। आपका डेटा दो तरीकों से, 2 चैनल और 1 बाइट नमूना चौड़ाई (स्टीरियो ध्वनि) या 1 चैनल और 2 बाइट नमूना चौड़ाई (मोनो ध्वनि) में पढ़ा जा सकता है। x.getparams() का उपयोग करें: पहला नंबर चैनलों की संख्या होगी और दूसरा नमूना चौड़ाई होगी।

This Link यह वास्तव में अच्छी तरह से बताता है।

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