में सरल उच्च और निम्न पास फ़िल्टर को कार्यान्वित करना कुछ डेटा रिकॉर्ड करने के लिए पोर्टौडियो का उपयोग करने का प्रयास कर रहा है, फिर रिकॉर्ड की गई आवाज को बदलने के लिए एल्गोरिदमिक फ़िल्टर का उपयोग करें और फिर इसे वापस चलाएं। मैंने इसे बहुत से सत्यापित किया है (उदाहरण से आ रहा है) लेकिन मैं सी के लिए काफी नया हूं और मुझे लगता है कि मेरे फ़िल्टर कार्यान्वयन में मैंने कुछ मूर्खतापूर्ण किया है।सी
*** glibc detected *** ./paex_record: free(): invalid pointer: 0xbfd68600 ***
======= Backtrace: =========
/lib/i386-linux-gnu/libc.so.6(+0x75ee2)[0xb75e2ee2]
./paex_record[0x8048fe5]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0xb75864d3]
./paex_record[0x80487f1]
======= Memory map: ========
08048000-0804a000 r-xp 00000000 08:05 2363767 /home/svictoroff/Documents/CompArch/portaudio/examples/paex_record
...
bfd68000-bff1a000 rw-p 00000000 00:00 0 [stack]
Aborted (core dumped)
मैं कर रहा हूँ बस वास्तव में नहीं यकीन है कि क्या यहाँ पर जा रहा है:
#if LOW_PASS
{
float RC = 1.0/(CUTOFF*2*3.14);
float dt = 1.0/SAMPLE_RATE;
float alpha = dt/(RC+dt);
float filteredArray[numSamples];
filteredArray[0] = data.recordedSamples[0];
for(i=1; i<numSamples; i++){
filteredArray[i] = filteredArray[i-1] + (alpha*(data.recordedSamples[i] - filteredArray[i-1]));
}
data.recordedSamples = filteredArray;
}
#endif
#if HIGH_PASS
{
float RC = 1.0/(CUTOFF*2*3.14);
float dt = 1.0/SAMPLE_RATE;
float alpha = RC/(RC + dt);
float filteredArray[numSamples];
filteredArray[0] = data.recordedSamples[0];
for (i = 1; i<numSamples; i++){
filteredArray[i] = alpha * (filteredArray[i-1] + data.recordedSamples[i] - data.recordedSamples[i-1]);
}
data.recordedSamples = filteredArray;
}
#endif
दर्ज की गई संकेत इन फिल्टर के माध्यम से जाने की कोशिश करता है मैं कुछ निम्न त्रुटि मिलता है। कोई विचार?
Pa_Terminate();
if(data.recordedSamples) /* Sure it is NULL or valid. */
free(data.recordedSamples);
if(err != paNoError)
{
fprintf(stderr, "An error occured while using the portaudio stream\n");
fprintf(stderr, "Error number: %d\n", err);
fprintf(stderr, "Error message: %s\n", Pa_GetErrorText(err));
err = 1; /* Always return 0 or 1, but no other return codes. */
}
return err;
* रिकॉर्ड किए गए नमूने * का आकार क्या है? – user1284631
त्रुटि के भीतर 'फ्री' में त्रुटि दिखाई देती है। क्या आप वह कोड दिखा सकते हैं जो 'फ्री' को भी कॉल करता है? – simonc
रिकॉर्ड किए गए नमूने लगभग 200k –