में .wav का औसत आयाम क्या किसी को सी # का उपयोग करके .wav फ़ाइल का औसत आयाम प्राप्त करने का कोई तरीका पता है (भले ही इसका मतलब है बाहरी आउट लाइन लाइन प्रोग्राम को कॉल करना और आउटपुट को पार्स करना)? धन्यवाद!सी #
सी #
उत्तर
यहां एक स्निप है जो स्टीरियो वाव में पढ़ता है और डेटा को दो सरणी में रखता है। यह अपरीक्षित क्योंकि मैं कुछ कोड को दूर करने के लिए किया था
/// <summary>
/// Read in wav file and put into Left and right array
/// </summary>
/// <param name="fileName"></param>
private void ReadWavfiles(string fileName)
{
byte[] fa = File.ReadAllBytes(fileName);
int startByte = 0;
// look for data header
{
var x = 0;
while (x < fa.Length)
{
if (fa[x] == 'd' && fa[x + 1] == 'a' &&
fa[x + 2] == 't' && fa[x + 3] == 'a')
{
startByte = x + 8;
break;
}
x++;
}
}
// Split out channels from sample
var sLeft = new short[fa.Length/4];
var sRight = new short[fa.Length/4];
{
var x = 0;
var length = fa.Length;
for (int s = startByte; s < length; s = s + 4)
{
sLeft[x] = (short)(fa[s + 1] * 0x100 + fa[s]);
sRight[x] = (short)(fa[s + 3] * 0x100 + fa[s + 2]);
x++;
}
}
// do somthing with the wav data in sLeft and sRight
}
यदि Wav फ़ाइल मोनो है, तो क्या मैं केवल sRight [x] = (लघु) (fa [s + 3] * 0x100 + fa [s + 2]) पर टिप्पणी करने में सक्षम हूं; लाइन और एस = एस + 4 से एस = एस +2 बदलें? मैं WAV प्रारूप से बहुत परिचित नहीं हूं। धन्यवाद! – BarrettJ
मुझे या तो नहीं, लेकिन मुझे लगता है कि आप सिर्फ sright छोड़ सकते हैं। – Nifle
मैंने ऊपर सूचीबद्ध परिवर्तनों को और एसएलईएफटी को "var sLeft = new short [fa.Length/2]" के रूप में घोषित किया है; वास्तव में मोनो फाइलों के लिए काम करता है। – BarrettJ
आम तौर पर root-mean-squared विधि का उपयोग पाप (x)-जैसे सिग्नल के "माध्य" आयाम की गणना करने के लिए किया जाता है।
NAudio .NET के लिए लाइब्रेरी आपकी सर्वश्रेष्ठ शर्त की तरह लगता है। यह एक ऑडियो फ़ाइल के तरंगों तक पहुंच की इजाजत देता है, जो औसत ampltiude के मूल्य की गणना करने के लिए लूप कर सकते हैं।
कि .wav, मोनो यह है कि अगर स्थिति किसी भी आसान/अलग बनाता है उल्लेख करने के लिए भूल (मोनो और एक चलती औसत की गणना करने के लिए परिवर्तित) है। – BarrettJ