Ich versuche, die Verstärkung des Mikrofons eines Android-Telefons zu erhöhen, so dass es in der Lage ist, sehr kleine Töne zu hören. Ist es möglich? Kannst du mir bitte dabei helfen?Können wir die Verstärkung des Mikrofons eines Android-Handys erhöhen?
Antwort
this link sollte Sie weiter bringen. Verwenden Sie setStreamVolume (...), um die Lautstärke höher einzustellen. Beachten Sie jedoch, dass Sie beim Aufruf von getStreamMaxVolume (...) ein Maximum angeben können. also ist die Mikrofonverstärkung wahrscheinlich durch Hardware begrenzt, die ich erraten würde. also ist es eher nicht möglich, das "on-fly" zu machen, aber was ist mit der Aufnahme eines Bits, dem Versuch, eine spezielle Frequenz um equalizer zu verstärken und dann etwas wie einen Herzschlag zu erkennen? klingt schwer, aber vielleicht möglich.
welcher der aufgelisteten Streams ist für das mic? – Davita
Audio Verstärkungsregelung
public class MainActivity extends Activity {
public static final int SAMPLE_RATE = 16000;
private AudioRecord mRecorder;
private File mRecording;
private short[] mBuffer;
private final String startRecordingLabel = "Start recording";
private final String stopRecordingLabel = "Stop recording";
private boolean mIsRecording = false;
private ProgressBar mProgressBar;
float iGain = 1.0f;
CheckBox gain;
protected int bitsPerSamples = 16;
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
initRecorder();
Button bluetooth = (Button)findViewById(R.id.blue);
gain = (CheckBox) findViewById(R.id.checkBox1);
mProgressBar = (ProgressBar) findViewById(R.id.progressBar);
final Button button = (Button) findViewById(R.id.start);
button.setText(startRecordingLabel);
bluetooth.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent("");
}
});
gain.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (gain.isChecked()) {
iGain = 5.0f;
} else {
iGain = 2.0f;
}
}
});
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
if (!mIsRecording) {
button.setText(stopRecordingLabel);
mIsRecording = true;
mRecorder.startRecording();
mRecording = getFile("raw");
startBufferedWrite(mRecording);
} else {
button.setText(startRecordingLabel);
mIsRecording = false;
mRecorder.stop();
File waveFile = getFile("wav");
try {
rawToWave(mRecording, waveFile);
} catch (IOException e) {
Toast.makeText(MainActivity.this, e.getMessage(),
Toast.LENGTH_SHORT).show();
}
Toast.makeText(MainActivity.this,
"Recorded to " + waveFile.getName(),
Toast.LENGTH_SHORT).show();
}
}
});
}
@Override
public void onDestroy() {
mRecorder.release();
super.onDestroy();
}
private void initRecorder() {
int bufferSize = AudioRecord.getMinBufferSize(SAMPLE_RATE,
AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);
mBuffer = new short[bufferSize];
mRecorder = new AudioRecord(MediaRecorder.AudioSource.MIC, SAMPLE_RATE,
AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT,
bufferSize);
}
private void startBufferedWrite(final File file) {
new Thread(new Runnable() {
@Override
public void run() {
DataOutputStream output = null;
try {
output = new DataOutputStream(new BufferedOutputStream(
new FileOutputStream(file)));
while (mIsRecording) {
double sum = 0;
int readSize = mRecorder.read(mBuffer, 0,
mBuffer.length);
final int bytesPerSample = bitsPerSamples/8;
final int emptySpace = 64 - bitsPerSamples;
int byteIndex = 0;
int byteIndex2 = 0;
int temp = 0;
int mLeftTemp = 0;
int mRightTemp = 0;
int a = 0;
int x = 0;
for (int frameIndex = 0; frameIndex < readSize; frameIndex++) {
for (int c = 0; c < 1; c++) {
if (iGain != 1) {
long accumulator = 0;
for (int b = 0; b < bytesPerSample; b++) {
accumulator += ((long) (mBuffer[byteIndex++] & 0xFF)) << (b * 8 + emptySpace);
}
double sample = ((double) accumulator/(double) Long.MAX_VALUE);
sample *= iGain;
int intValue = (int) ((double) sample * (double) Integer.MAX_VALUE);
for (int i = 0; i < bytesPerSample; i++) {
mBuffer[i + byteIndex2] = (byte) (intValue >>> ((i + 2) * 8) & 0xff);
}
byteIndex2 += bytesPerSample;
}
}// end for(channel)
// mBuffer[frameIndex] *=iGain;
if (mBuffer[frameIndex] > 32765) {
mBuffer[frameIndex] = 32767;
} else if (mBuffer[frameIndex] < -32767) {
mBuffer[frameIndex] = -32767;
}
output.writeShort(mBuffer[frameIndex]);
sum += mBuffer[frameIndex] * mBuffer[frameIndex];
}
if (readSize > 0) {
final double amplitude = sum/readSize;
mProgressBar.setProgress((int) Math.sqrt(amplitude));
}
}
} catch (IOException e) {
Toast.makeText(MainActivity.this, e.getMessage(),
Toast.LENGTH_SHORT).show();
} finally {
mProgressBar.setProgress(0);
if (output != null) {
try {
output.flush();
} catch (IOException e) {
Toast.makeText(MainActivity.this, e.getMessage(),
Toast.LENGTH_SHORT).show();
} finally {
try {
output.close();
} catch (IOException e) {
Toast.makeText(MainActivity.this, e.getMessage(),
Toast.LENGTH_SHORT).show();
}
}
}
}
}
}).start();
}
private void rawToWave(final File rawFile, final File waveFile)
throws IOException {
byte[] rawData = new byte[(int) rawFile.length()];
DataInputStream input = null;
try {
input = new DataInputStream(new FileInputStream(rawFile));
input.read(rawData);
} finally {
if (input != null) {
input.close();
}
}
DataOutputStream output = null;
try {
output = new DataOutputStream(new FileOutputStream(waveFile));
// WAVE header
// see http://ccrma.stanford.edu/courses/422/projects/WaveFormat/
writeString(output, "RIFF"); // chunk id
writeInt(output, 36 + rawData.length); // chunk size
writeString(output, "WAVE"); // format
writeString(output, "fmt "); // subchunk 1 id
writeInt(output, 16); // subchunk 1 size
writeShort(output, (short) 1); // audio format (1 = PCM)
writeShort(output, (short) 1); // number of channels
writeInt(output, SAMPLE_RATE); // sample rate
writeInt(output, SAMPLE_RATE * 2); // byte rate
writeShort(output, (short) 2); // block align
writeShort(output, (short) 16); // bits per sample
writeString(output, "data"); // subchunk 2 id
writeInt(output, rawData.length); // subchunk 2 size
// Audio data (conversion big endian -> little endian)
short[] shorts = new short[rawData.length/2];
ByteBuffer.wrap(rawData).order(ByteOrder.LITTLE_ENDIAN)
.asShortBuffer().get(shorts);
ByteBuffer bytes = ByteBuffer.allocate(shorts.length * 2);
for (short s : shorts) {
// Apply Gain
/*
* s *= iGain; if(s>32767) { s=32767; } else if(s<-32768) {
* s=-32768; }
*/
bytes.putShort(s);
}
output.write(bytes.array());
} finally {
if (output != null) {
output.close();
}
}
}
private File getFile(final String suffix) {
Time time = new Time();
time.setToNow();
return new File(Environment.getExternalStorageDirectory(),
time.format("%Y%m%d%H%M%S") + "." + suffix);
}
private void writeInt(final DataOutputStream output, final int value)
throws IOException {
output.write(value >> 0);
output.write(value >> 8);
output.write(value >> 16);
output.write(value >> 24);
}
private void writeShort(final DataOutputStream output, final short value)
throws IOException {
output.write(value >> 0);
output.write(value >> 8);
}
private void writeString(final DataOutputStream output, final String value)
throws IOException {
for (int i = 0; i < value.length(); i++) {
output.write(value.charAt(i));
}
}
}
Hallo @ Shivaraj Patil, können Sie Ihren Code erklären. Ist es Mikrofonvolumen erhöhen? Wie ich sehe, es Ausgabedatei ändern, können wir nicht sehen, wenn Mikrofon verwenden. – phongvan
Er erhöht die Amplitude durch Multiplizieren der durchschnittlichen Verstärkung mit jedem Sample, so dass Sie die Lautstärke durch Einstellen des Verstärkungswerts erhöhen oder verringern können. Ich bin mir nicht sicher, ob wir vom Mikrofon profitieren können, da die Mikrofonverstärkung wahrscheinlich durch Hardware begrenzt ist. Darf ich wissen, was genau Sie vorhaben? –
- 1. Grafik-Sound-Analysator des Mikrofons
- 2. Können wir die Höhe der Toast-Benachrichtigung in WP7 erhöhen
- 3. Können wir die Anrufdetails eines iPhone abrufen?
- 4. C# -Anwendung zum Testen des Mikrofons
- 5. searchkich alle Daten suchen wie können wir erhöhen?
- 6. as3 steuern die Lautstärke des Mikrofons mit einem Schieberegler?
- 7. Können wir das Verhalten des Klassenobjekts überladen
- 8. Können wir die Nummerntastatur des iPhones ohne Typ = Nummer einschalten?
- 9. Wie können wir die Zeit des Prozesses zählen?
- 10. Können wir die Methode des Gradientenabfalls im Maximumentropiemodell verwenden?
- 11. RCP Anwendung Wie können wir die Standardhöhe von Cool bar in ActionBarAdvisor erhöhen?
- 12. Können wir Dialog innerhalb eines Dialogs öffnen?
- 13. Verstärkung lernen: Neuronales Netz
- 14. Wie können wir die verfügbaren CPUs für SVMs in Google Cloud DataLabs erhöhen?
- 15. Wie können wir die Größe von div auf BTN Klick in asp.net erhöhen oder verringern?
- 16. Können wir die Anzahl von 10 Datensätzen im Inline-Lookup-Feld in ms erhöhen 2016
- 17. Wie bekomme ich den vollständigen Namen des Mikrofons in C#?
- 18. Log Schmieden Verstärkung Fix
- 19. Verstärkung in C# lernt
- 20. php mpdf die Größe des pdf erhöhen
- 21. Können wir die Druckereinstellungen mit jquery ändern?
- 22. Können wir die Betriebssystemumgebungsvariablen in Java lesen?
- 23. Können wir die tvOS-App nicht speichern?
- 24. Können wir die Adresse für Stringliteral ausdrucken?
- 25. Können wir die Hauptmethode in Java überladen?
- 26. Können wir einen Inhaltstyp innerhalb eines Inhaltstyps in Drupal 8
- 27. Können wir 100% Entkopplung erreichen?
- 28. Wie können wir ein Widget eines Drittanbieters sichern?
- 29. Wie können wir die Ausrichtung des Kamerabilds während des Kameraerfassungsvorgangs sperren?
- 30. können wir Breite li
Was ist der Anwendungsfall? –
Ich versuche den Herzschlag durch Handy zu hören ... also dafür brauche ich ein empfindlicheres Mikrofon. wenn wir die Verstärkung des Mikros erhöhen könnten, wäre es hilfreich für mich – srikanth
Interessant. Schau mal hier: http://developer.android.com/reference/android/media/AudioManager.html –