मैं एंड्रॉइड में नया हूं और मैं एक ऐसा प्रोग्राम बनाने की कोशिश कर रहा हूं जो ऑडियो ध्वनि को कैप्चर करता है और उसके बाद मौजूद आवृत्तियों को प्रदर्शित करता है। मुझे एक उदाहरण मिला जो ग्राफिक तुल्यकारक के ग्राफ़िक भाग को खींचता है। इस उदाहरण में ऑडियो ध्वनि को कैप्चर करने के लिए इसे ऑडियो रिकॉर्ड का ऑब्जेक्ट उपयोग किया जाता है। घटक आवृत्तियों में ऑडियो सिग्नल को तोड़ने के लिए उपयोग की जाने वाली तकनीक एक गणितीय परिवर्तन को एक अलग फूरियर ट्रांसफॉर्म (डीएफटी) कहा जाता है और डीएफटी करने के लिए इसे एक तेज फूरियर ट्रांसफॉर्म (एफएफटी) का उपयोग किया जाता है। यह उदाहरण एक पैकेज का उपयोग करता है जो एफएफटी लागू करता है। पैकेज www.netlib.org/fftpack/jfftpack.tgz से जुड़ा हुआ है। समस्या यह है कि मैं इस उदाहरण को चलाने के बाद स्टार्ट बटन दबाए जाने के बाद ग्राफिक तुल्यकारक प्रदर्शन पर प्रकट नहीं होता है।एंड्रॉइड में विश्लेषण और विज़ुअलाइजिंग फ्रीक्वेंसी के लिए ध्वनि कैप्चरिंग
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<ImageView android:id="@+id/ImageView01" android:layout_width="wrap_content"
android:layout_height="wrap_content"></ImageView><Button android:text="Start"
android:id="@+id/StartStopButton" android:layout_width="wrap_content"
android:layout_height="wrap_content"></Button>
</LinearLayout>
AndroidManifest.xml में मैं RECORD_AUDIO अनुमति सेट:
package com.audio.processing;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import ca.uol.aig.fftpack.RealDoubleFFT;
public class AudioProcessing extends Activity implements OnClickListener{
int frequency = 8000;
int channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO;
int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;
private RealDoubleFFT transformer;
int blockSize = 256;
Button startStopButton;
boolean started = false;
RecordAudio recordTask;
ImageView imageView;
Bitmap bitmap;
Canvas canvas;
Paint paint;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startStopButton = (Button) this.findViewById(R.id.StartStopButton);
startStopButton.setOnClickListener(this);
transformer = new RealDoubleFFT(blockSize);
imageView = (ImageView) this.findViewById(R.id.ImageView01);
bitmap = Bitmap.createBitmap((int)256,(int)100,Bitmap.Config.ARGB_8888);
canvas = new Canvas(bitmap);
paint = new Paint();
paint.setColor(Color.GREEN);
imageView.setImageBitmap(bitmap);
}
private class RecordAudio extends AsyncTask<Void, double[], Void> {
@Override
protected Void doInBackground(Void... params) {
try {
int bufferSize = AudioRecord.getMinBufferSize(frequency,
channelConfiguration, audioEncoding);
AudioRecord audioRecord = new AudioRecord(
MediaRecorder.AudioSource.DEFAULT, frequency,
channelConfiguration, audioEncoding, bufferSize);
short[] buffer = new short[blockSize];
double[] toTransform = new double[blockSize];
audioRecord.startRecording();
while (started) {
int bufferReadResult = audioRecord.read(buffer, 0, blockSize);
for (int i = 0; i < blockSize && i < bufferReadResult; i++) {
toTransform[i] = (double) buffer[i]/32768.0; // signed 16 bit
}
transformer.ft(toTransform);
publishProgress(toTransform);
}
audioRecord.stop();
} catch (Throwable t) {
Log.e("AudioRecord", "Recording Failed");
}
return null;
}
}
protected void onProgressUpdate(double[]... toTransform) {
canvas.drawColor(Color.BLACK);
for (int i = 0; i < toTransform[0].length; i++) {
int x = i;
int downy = (int) (100 - (toTransform[0][i] * 10));
int upy = 100;
canvas.drawLine(x, downy, x, upy, paint);
}
imageView.invalidate();
}
public void onClick(View v) {
if (started) {
started = false;
startStopButton.setText("Start");
recordTask.cancel(true);
} else {
started = true;
startStopButton.setText("Stop");
recordTask = new RecordAudio();
recordTask.execute();
}
}
}
यहाँ main.xml है:
यहाँ गतिविधि वर्ग के लिए स्रोत कोड है। अग्रिम धन्यवाद!
xml में छवि दृश्य टैग कहां है? – codeScriber